opencomputer
Overview of MS SQL Server locks and deadlocks.
- SQL Books Online->Accessing and changing data->Locking->Customizing
locking with SQL server->Deadlocking.
- Здесь говорится о том, что между двумя разными транзакциями может возникнуть
конфликт за возможность заблокировать некоторые данные. Предлагается следующий
выход - переменной @@lock_timeout присвоить некоторое значение и в результате
такие конфликтующие запросы будут завершаться с ошибкой №1222 (“Lock request
time-out period exceeded”). Если же deadlock выследит сервер - то приложению
вернётся код 1205 ("deadlock").
- В некоторых других источниках предлагается другой подход - надо проектировать
сами SQL-запросы таким образом, чтоб последовательность обращения к таблицам
была одинакова у всех запросов (т.е. если у одного запроса обращение к
таблице А встречается на первом месте, то и у другого эта таблица тоже
стояла бы на первом месте). Собственно в документе Deadlocking->Avoiding
Deadlocks именно это и говорится...и даже с пояснениями в картинках :)
- SQL Books Online->How To->SQL Server Enterprise Manager->Administering
SQL Server->Monitoring Server Perfomance and Activity->How to view the
current locks (Enterprise Manager)
- Мне приходилось сталкиваться с блокировками процессов иногда по нескольку
раз в день (не моя программа вызывала такое). Express-решение это надо
найти первый процесс, который вызвал блокировку и kill его. Следующие
процессы обычно восстанавливают свою нормальную работу (это если пользователь
ничего не сделал или не слишком поздно). Необходимый опыт по выявлению
первого процесса, вызвавшего блокировку приходит с опытом :). Конечно,
если логика программы отвечает всем требованиям описанным в приведённом
выше документе - то единственное, когда может возникнуть серьёзная блокировка
это если кто-то с повышенными привелегиями вздумает изменять структуру
БД во время её интенсивной работы. От такого не спасёт никакие оптимизации
алгоритмов, но спасёт вырубание процесса.
- SQL Books Online->Optimizing Database Performance->Optimizing Server
Performance
- Здесь можно найти общие рекомендации по оптимизации БД. Ведь чем быстрее
обрабатываются запросы - тем меньше вероятность возникновения lock'ов!
На сервере надо ставить как можно больше оперативной памяти, как можно
больше процессоров, использовать fibers, файловую систему NTFS с размером
кластера в 64Kb, HDD SCSI, RAID...
- SQL Books Online->Optimizing Database Performance->Overview of
Optimizing Database Performance - все ссылки...
MS SQL Server
Оригинал: deadlock.htm
07-Jun-2005