Published on

January 17, 2021

Понимание блокировки в SQL Server

Блокировка в 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, администраторы баз данных и разработчики могут получить ценные сведения о корневых причинах блокировки и принять соответствующие меры для улучшения производительности.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.