Блокировка в SQL Server может быть сложной проблемой для анализа, особенно в случаях с большим количеством активных соединений. Когда в блокировке участвуют несколько соединений, становится еще сложнее определить причину и найти решение. В этой статье мы рассмотрим процедуру под названием sp_who4, которая упрощает анализ блокированных соединений в SQL Server.
Цель sp_who4
Основная цель sp_who4 – упростить анализ блокированных соединений, предоставляя иерархическое представление заблокированных соединений. Это иерархическое представление помогает определить корневую причину блокировки, так как родительское соединение отображается первым, за которым следуют его дочерние соединения и последующие уровни заблокированных соединений. Кроме того, sp_who4 также извлекает информацию о отсутствующих индексах из планов выполнения, что может помочь в оптимизации запросов, участвующих в блокировке.
Как работает sp_who4
При выполнении sp_who4 возвращается набор результатов с 19 столбцами, содержащими подробности о текущих заблокированных соединениях и другую актуальную информацию для анализа. Некоторые из ключевых столбцов включают:
- Group Num: Идентификаторы групп заблокированных соединений SQL Server
- Connections Blocked: Текущий идентификатор сеанса и идентификатор родительского сеанса для сценариев блокировки
- Connection DB: База данных для текущего соединения
- Object: Имя текущей процедуры
- SQL Statement: Активный SQL-запрос
- Status: Текущий статус соединения
- Transaction count: Количество транзакций для текущего соединения
- Wait type: Последний тип ожидания
- Wait object: Заблокированные объекты, такие как индексы
- Wait duration: Разница между текущей датой и временем
- CPU Reads/Writes: Чтение и запись ЦП для соединения
- Indexes: Отсутствующие индексы
- Query plan: План выполнения текущего объекта
- Program name: Имя программы, в настоящее время подключенной к SQL Server
- Host name: Имя хоста, в настоящее время подключенного к SQL Server
- Login name: Имя входа
- Hid: Двоичное представление заблокированных соединений в иерархическом порядке
Пример использования
Давайте рассмотрим пример, в котором у нас есть две группы блокирующих соединений. Группа 1 содержит соединения 62, 53 и 58, при этом соединение 53 является корневой причиной блокировки из-за отсутствующего индекса, необходимого для выполнения процедуры Insert_Tab1. Группа 2 состоит из соединений 60, 56 и 64, при этом соединение 60 с количеством транзакций 1 является корневой причиной блокировки.
Запустив предоставленный код, мы можем смоделировать этот сценарий и выполнить процедуру sp_who4, чтобы получить результаты анализа. Иерархическое представление заблокированных соединений и информация об отсутствующих индексах могут помочь нам эффективно определить и устранить проблемы с блокировкой.
Заключение
Процедура sp_who4 упрощает анализ заблокированных соединений в SQL Server, группируя их иерархически и извлекая информацию об отсутствующих индексах. Это упрощение позволяет принимать более быстрые решения по оптимизации запросов и устранению проблем с блокировкой. Используя sp_who4, администраторы баз данных и разработчики могут получить ценные сведения о корневых причинах блокировки и принять соответствующие меры для улучшения производительности.