Рассылка закрыта
При закрытии подписчики были переданы в рассылку "Вопросы и ответы по MS SQL Server" на которую и рекомендуем вам подписаться.
Вы можете найти рассылки сходной тематики в Каталоге рассылок.
MS SQL Server - дело тонкое...
Информационный Канал Subscribe.Ru |
#223<< #224 |
СОДЕРЖАНИЕ Блокировки SQL Server 7.0/2000 - теория и практика устранения проблем (окончание)
По материалам статьи KB224453
Understanding and Resolving SQL Server 7.0 or 2000 Blocking Problems
Введение Основные категории сценариев устранения блокировок В приведенной ниже таблице указаны основные причины блокировок и возможности их разрешения. Число в столбце "Сценарий" соответствует номеру в разделе "Типовые сценарии нахождения и разрешения блокировок" данной статьи. Столбцы Waittype, Open_Tran и Status берутся из таблицы sysprocesses. Столбец "Разрешается?" показывает, разрешается ли проблема блокирования.
Применение сценариев разрешения блокировок В сценариях представленных ниже, содержатся характеристики, которые приведены в таблице выше. Этот раздел содержит дополнительную информацию, а также пути решения проблем блокирования. 1. Причиной блокирования является запрос, выполняющийся продолжительное время.
Решение: 2. Блокирование по причине того, что SPID, находящийся в состоянии "Sleeping", потерял возможность трассировки уровня вложенности транзакции.
Этот тип блокирования часто идентифицируется тем, что SPID находится в состоянии "sleeping" или "awaiting command",
и у него уровень вложенности транзакций (@@TRANCOUNT, поле open_tran из sysprocesses) больше нуля. Причиной может
служить превышение времени выполнения запроса или отмена выполнения без указания операторов ROLLBACK или COMMIT.
В этом случае SPID прекращает выполнение текущего запроса и пакета, но автоматически не откатывает / не завершает
транзакцию. Это должно быть предусмотрено в приложении, т.к. SQL Server не предполагает что нужно откатывать всю
транзакцию из-за отдельного запроса. Превышение времени выполнения или окончание запроса проявляются в виде события
ATTENTION для данного SPID в трассе профайлера. BEGIN TRAN SELECT * FROM SYSOBJECTS S1, SYSOBJECTS S2 -- Запустите это после выполнения запроса SELECT @@TRANCOUNT ROLLBACK TRAN Во время исполнения запроса, прервите его работу. После того, как выполнение запроса прекратится, переменная @TRANCOUNT покажет, что уровень вложения транзакций =1. Если бы запрос был на удаление или изменение данных, или в операторе SELECT с использованием опции HOLDLOCK, сохранились бы все блокировки, установленные этими операторами. Даже в представленном выше примере, если другой запрос в транзакции установил блокировку раньше, чем начал выполняться SELECT, она бы не устранились и после того как выполнится оператор SELECT. Решение:
3. Блокирование по причине того, что SPID не вернул все строки результата клиенту.
Если приложение не получило весь результирующий набор, таблица может остаться заблокированной. Если в приложении
явно используются T-SQL запросы к серверу, то приложение обязано получить весь результирующий набор. Если же это
не так (и не может быть сконфигурировано таким образом), возможно, Вы не сможете решить проблему блокирования.
Решение: 4. Блокирование вследствие возникновения распределенной клиент-серверной тупиковой блокировки.
В отличие от обычной тупиковой блокировки распределенная тупиковая блокировка не обнаруживается с помощью менеджера блокировок RDBMS. Это происходит вследствие того, что только один из ресурсов, вовлеченных в тупиковую блокировку - это блокировка SQL Server. С другой стороны, тупиковая блокировка зарождается на уровне клиентского приложения, которым SQL Server не может управлять. Следующий пример показывает, как такое может произойти и как решается эта проблема:
Решение: Два эффективных решения состоят в том, чтобы использовать превышение времени выполнения запроса или объединение подключений. 5. Блокирование по причине того что SPID находится в состоянии "golden" или "rollback" Если выполнение запроса на модификацию данных прервано или запрос отменен вне определенной пользователем транзакции, изменения должны быть отменены. Такое может произойти в случае, если клиентский компьютер был перезагружен, и/или сетевое подключение было разорвано. Аналогично, изменения, которые внес процесс, выбранный в качестве жертвы при тупиковой блокировке, тоже будет отменен. Откат изменений, вносимых запросами на модификацию данных, часто производится дольше, чем вносятся сами изменения. Например, если оператор Update, Insert или Delete выполнялся час, на откат изменений потребуется не менее часа, потому что сделанные изменения должны быть отменены или должна быть обеспечена транзакционная и физическая целостность в базе данных. Когда это происходит, SQL Server помечает SPID как "golden" или устанавливает ему состояние "rollback" (это означает, что он не может быть прерван или выбран в качестве жертвы при разрешении тупиковой блокировки). Как правило эту ситуацию можно отследить с помощью команды sp_who. Поле Status таблицы sysprocesses показывает статус ROLLBACK, который также можно увидеть с помощью sp_who или в окне текущей активности в Enterprise Manager. Решение:
Вы должны подождать, когда SPID закончит операцию по откату сделанных им изменений. 6. Блокирование по причине потерянного соединения. Если клиентское приложение перезапущено или рабочая станция перезагружена, при некоторых условиях сервер не может сразу же разорвать сетевое соединение. Со стороны сервера клиентское соединение все еще имеется и установленные им блокировки сохраняются. Для получения более подробной информации по этому вопросу см. статью BOL: SQL Server 7.0 "Orphaned Connections" Решение:
Если клиентское приложение было отключено без очистки его ресурсов, Вы можете прервать его при помощи команды KILL.
В качестве параметра команде Kill требуется SPID. Например, чтобы прервать SPID 9, просто используйте команду KILL 9. Влияние приложений на возникновение проблем блокировок
Существует тенденция для решения проблем с блокировками фокусировать внимание на настройке серверной части и
проблемах платформы. Однако, обычно это не приводит к решению проблемы а только лишь отнимает много времени и
энергии, которые следовало бы направить на изучение приложения-клиента и запросов, которые им используются. Ссылки Для получения дополнительной информации изучите следующие книги:
Microsoft SQL Server 7.0 System Administration Training Kit Microsoft Press, 2001 А также предлагается пройти следующие курсы:
2072 Administering a Microsoft SQL Server 2000 Database Информация в этой статье относится к:
Статьи на русском языке
Что нового в DTS?
An Alternative XML Solution Самые популярные темы недели
Ваше мнение об упражнениях SELECT на http://sql.ipps.ru
опять sybase и mssql
|
#223<< #224 |
Вопросы, предложения, коментарии, замечания, критику и т.п. оставляйте Виталию Степаненко и Александру Гладченко в форуме: Обсуждение рассылки
|
http://subscribe.ru/
http://subscribe.ru/feedback/ |
Подписан адрес: Код этой рассылки: comp.soft.winsoft.sqlhelpyouself |
Отписаться |
В избранное | ||