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

Откуда:
Сообщений: 4
Вдруг возник %SUBJ%.
При выполнении запросов (в том числе и на простое чтение) происходит блокирование таблиц, что не позволяет выполняться другим запросам. При просмотре Current Activity видно, что статус одного из spid'ов - blocking, а остальных - blocked by этим spid'ом ? Причём блокирующим может оказаться любой spid.

Не могу понять что надо сделать, чтобы такие ситуации не возникали.
18 апр 05, 15:58    [1476810]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Чем этот blocking занимается? Заканчивается ли вообще или зависает на неопределенное время?
18 апр 05, 16:08    [1476859]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
Czer
Member

Откуда:
Сообщений: 4
Запросы выполняет разные, как на чтение, так и на изменение или добавление. И заканчивается как правило нормально.
18 апр 05, 16:23    [1476942]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
GreenSunrise
Member

Откуда:
Сообщений: 12310
Чем он занимается в момент висящей блокировки. Узнать это можно так:
DBCC INPUTBUFFER (spid)
или даблкликом по процессу в EM.
18 апр 05, 17:09    [1477129]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
Czer
Member

Откуда:
Сообщений: 4
Это как раз понятно. Непонятно почему когда выполняется SELECT на кучу таблиц - остальные запросы к этим таблицам заблокированы.
18 апр 05, 18:15    [1477378]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
Czer
Это как раз понятно. Непонятно почему когда выполняется SELECT на кучу таблиц - остальные запросы к этим таблицам заблокированы.

Остальные - это какие? А селект какой? А Вы в курсе, что селект тоже накладывает блокировки?
18 апр 05, 18:16    [1477381]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
StalkerS
Member

Откуда: Nowhere
Сообщений: 1343
Czer

Непонятно почему когда выполняется SELECT на кучу таблиц - остальные запросы к этим таблицам заблокированы

селект обычно не может заблокировать другие. Для этого его надо к примеру с хинтом updlock запустить. Обычно блокируют на чтение только изменяющие данные транзакции
18 апр 05, 18:23    [1477399]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 37101
автор
Для этого его надо к примеру с хинтом updlock запустить

Или, например, в транзакции запустить. Или с хинтом holdlock. Или еще с каким-нить хинтом.
Чтиво по теме:
http://www.rsdn.ru/?article/db/mssqllocks.xml
http://www.rsdn.ru/?article/db/LockEscalation.xml
http://www.rsdn.ru/?article/db/deadlocks.xml
18 апр 05, 18:26    [1477407]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
Czer
Member

Откуда:
Сообщений: 4
Есть SELECT'ы и в транзакциях. Но вставки и изменения блокируют и простые SELECT'ы - безо всяких транзакций и хинтов. Происходит блокировка индексов в просматриваемых SELECT'ом таблицах, в которые другие заблокированные запросы пытаются вставить данные.
Не понимаю, почему затыкается транзакция на вставку в таблицу, по которой смотрит SELECT. SELECT вообще не должен видеть строки пока транзакция нормально не завершилась. Он должен видеть старые данные если транзакция на изменение, или ничего если транзация на вставку. Но не блокировать таблицу так, что в неё ни вставить, ни изменить в ней ничего нельзя... Это же полная труба получается - один пользователь что-то смотрит - остальные сидят и ждут когда он закончит смотреть.
19 апр 05, 16:19    [1480048]     Ответить | Цитировать Сообщить модератору
 Re: Странные проблемы с блокировками в SQL 2000.  [new]
Glory
Member

Откуда:
Сообщений: 104760
Не понимаю, почему затыкается транзакция на вставку в таблицу, по которой смотрит SELECT. SELECT вообще не должен видеть строки пока транзакция нормально не завершилась. Он должен видеть старые данные если транзакция на изменение, или ничего если транзация на вставку. Но не блокировать таблицу так, что в неё ни вставить, ни изменить в ней ничего нельзя... Это же полная труба получается - один пользователь что-то смотрит - остальные сидят и ждут когда он закончит смотреть.

"Тяжелое" наследие Oracle мешает ?
Ну так в MSSQL всего немного более не так.
Придется брать мануал и читать про блокировки, уровни изоляции и тп.
19 апр 05, 16:24    [1480087]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить