Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Опять о блокировках  [new]
surikov_u
Member

Откуда:
Сообщений: 4
Прошу помочь новичку, с MS SQL только что начал работать. Есть большая (~100000000 строк ), хорошо индексированная таблица Z, из которой постоянно происходят большие, параллельные выборки с "грязным" чтением - SELECT a,b, c...FROM Z WITH(NOLOCK). Параллельно также происходит обновление таблицы Z. Ну, а далее "превышено время ожидания блокировки". Естественно, что blocking_session_id равно одной из сессий выборки. Почему, ведь чтение "незакомиченное"? И что делать?
Понимаю, что подобные вопросы уже плешь проели, в литературе тоже копал, но не поясните ли еще раз почему при данных выборках блокируется обновление.
27 сен 16, 01:15    [19711514]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
surikov_u,

а вы гляньте ( например с помощью sys.dm_tran_locks ) какие блокировки ваши процессы накладывают.
А потом гляньте в таблицу совместимости блокировок: https://technet.microsoft.com/en-us/library/ms186396(v=sql.105).aspx
27 сен 16, 07:44    [19711624]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
surikov_u,

SNAPSHOT
27 сен 16, 09:05    [19711726]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
surikov_u
Member

Откуда:
Сообщений: 4
Pavel1211,
S и U. Они неконфликтны. Тем не менее, 5-6 параллельных SELECT с выборками по 7-8 млн. записей блокируют единственный UPDATE.
27 сен 16, 09:55    [19711977]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
surikov_u
Member

Откуда:
Сообщений: 4
TaPaK,
А чем он менее конфликтен, чем READ UNCONNITTED?
27 сен 16, 09:57    [19712000]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
surikov_u,

разделит читателей и писателей, почитайте
27 сен 16, 10:03    [19712032]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
surikov_u
TaPaK,
А чем он менее конфликтен, чем READ UNCONNITTED?

заодно почитайте про зло NOCOUNT :)
27 сен 16, 10:03    [19712036]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
Pavel1211
Member

Откуда: Екатеринбург
Сообщений: 205
surikov_u
Pavel1211,
S и U. Они неконфликтны.

nolock не накладывает S
27 сен 16, 11:19    [19712326]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
surikov_u
Прошу помочь новичку, с MS SQL только что начал работать. Есть большая (~100000000 строк ), хорошо индексированная таблица Z, из которой постоянно происходят большие, параллельные выборки с "грязным" чтением - SELECT a,b, c...FROM Z WITH(NOLOCK). Параллельно также происходит обновление таблицы Z. Ну, а далее "превышено время ожидания блокировки". Естественно, что blocking_session_id равно одной из сессий выборки. Почему, ведь чтение "незакомиченное"? И что делать?
Понимаю, что подобные вопросы уже плешь проели, в литературе тоже копал, но не поясните ли еще раз почему при данных выборках блокируется обновление.

вообще посмотрите на ожидания, если всё как вы описываете, то похоже что просто нехватка памяти
27 сен 16, 11:24    [19712348]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
invm
Member

Откуда: Москва
Сообщений: 9845
surikov_u
S и U. Они неконфликтны. Тем не менее, 5-6 параллельных SELECT с выборками по 7-8 млн. записей блокируют единственный UPDATE.
Количество перешло в новое качество и S стало конфликтовать с U.
Установите для сессии с update lock_timeout в -1 (чтобы не было ошибки "превышено время ожидания блокировки"), потом смотрите в sys.dm_os_waiting_tasks на чем же на самом деле висит этот update.
27 сен 16, 11:27    [19712364]     Ответить | Цитировать Сообщить модератору
 Re: Опять о блокировках  [new]
surikov_u
Member

Откуда:
Сообщений: 4
Всем спасибо за ответы. К сожалению, так и не понял , в чем дело. Сейчас несколько оптимизировал запросы и взаимоблокировки прекратились, хотя блокировки остались. Буду думать.
Да, естественно пользовался sys.dm_exec_requests, sys.dm_exec_sessions и т.д.
Кстати, относительно ресурсов сервера - 2008 R2 Ent, 32/64, загружен слабо.
28 сен 16, 12:36    [19717616]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить