Недавно я начал новую работу, и у них есть веб-сервер, который общается с отдельным сервером базы данных. Недавно это стало вызывать ошибки взаимоблокировок при запуске страниц ASP, такие как:
ОШИБКА: MSSQL 2kTransaction (Process ID 103) был заблокирован на ресурсах блокировки с другим процессом и был выбран в качестве жертвы блокировки. Повторно запустите транзакцию.
Указанная выше ошибка возникает, когда страница asp пытается получить доступ к базе данных MSSQL 2k.
Они думают, что это проблема сервера, поэтому меня попросили разобраться с этим. Любая помощь будет высоко оценена.
решение1
Обычно взаимоблокировки являются проблемой либо с дизайном базы данных, либо с несоответствиями в том, как приложение получает доступ к ресурсам базы данных. Часто бывает так, что вы найдете решения проблем, внеся изменения в нее, а не в инфраструктуру. Взаимоблокировки часто не обнаруживаются во время функционального тестирования, но, как правило, обнаруживаются при тестировании производительности и масштабируемости.
Вы можете помочь команде разработчиков в этом, используя трассировки, которые позволяют записывать более подробную информацию в журнал SQL.
например: DBCC TRACEON (3605,1205,-1) — обязательно отключите его (DBCC TRACEOFF), когда закончите собирать сообщения журнала!
Далее проверьте типичные вещи для любой установки SQL:
- убедитесь, что это вСП4
- имеет правильную настройку оборудования - файлы журналов на диске RAID 1, файлы данных на диске RAID 5, tempdb на диске RAID 1 и резервные копии на диске RAID 5 - я бы назвал это минимумом для любого реального сервера.
- имеет настроенный план обслуживания (резервное копирование, перестроение индексов, проверки целостности, обновление статистики). Я думаю, что в SQL 2000 есть мастер плана обслуживания для этого.
Наконец, начните планировать миграцию на SQL 2008 R2 — основная поддержка SQL 2000 в настоящее время заканчивается, а расширенная поддержка завершится в 2013 году.
решение2
Вам нужно понятьпочемупроисходят взаимоблокировки. Следуйте указаниям документации по продукту наОбнаружение и устранение тупиковых ситуацийиУстранение неполадок с взаимоблокировками.
Как решить тупиковую ситуацию, невозможно сказать заранее, без информации о тупиковой ситуации. Обычно решение заключается в изменении модели данных (например, добавлении отсутствующего индекса) и/или исправлении дизайна приложения (изменении шаблонов доступа и запросов).