Класс событий Hash Warning
Изменения: 5 декабря 2005 г.
Класс событий Hash Warning можно использовать для мониторинга возникновения рекурсии хэша или остановки хэширования (аварийного хэширования) во время операции хэширования.
Рекурсия хэша возникает, когда входные данные не помещаются в доступную память, что приводит к разбиению их на несколько отдельно обрабатываемых секций. Если какая-либо из этих секций все же не помещается в доступную память, она разбивается на подсекции, которые также обрабатываются отдельно. Процесс разбиения продолжается, либо пока все секции не будут помещаться в доступную память, либо пока не будет достигнут максимальный уровень рекурсии (который можно проверить в столбце данных IntegerData).
Аварийное хэширование происходит, когда операция хэширования достигает максимального уровня рекурсии и переходит к альтернативному плану обработки оставшихся секционированных данных. Причиной этого обычно становятся ассиметричные данные.
Рекурсии и аварийное хэширование приводят к снижению производительности сервера. Для устранения или уменьшения частоты появления рекурсий и аварийного хэширования можно применить следующие методы.
- Удостовериться в том, что для соединяемых или группируемых столбцов существует статистика.
- Если для столбцов существует статистика, обновить ее.
- Использовать другой тип соединения. Например, соединения MERGE или LOOP, если это допустимо.
- Увеличить объем доступной памяти на компьютере. Рекурсии и аварийное хэширование возникают, когда в машине недостаточно памяти для обработки имеющихся запросов и их приходится сбрасывать на диск.
Создание или обновление статистики по столбцу, включенному в соединение, представляет собой наиболее эффективный способ уменьшения числа рекурсий или аварийного хэширования.
Примечание. |
---|
Также для описания аварийного хэширования используются термины поэтапное хэш-соединение и рекурсивное хэш-соединение. Дополнительные сведения см. в разделе Основные сведения о хэш-соединениях. |
Важно! |
---|
Для обнаружения возникновения события Hash Warning при формировании плана выполнения запроса оптимизатором запросов в трассировке необходимо также собрать класс событий Showplan. Можно выбрать любой класс событий Showplan, кроме Showplan Text и Showplan Text (Unencoded), которые не возвращают идентификатор узла. Идентификаторами узла в классах событий Showplan обозначается каждая операция, выполняемая оптимизатором запросов при формировании плана выполнения запроса. Эти операции также называются операторами, и каждый оператор в классе событий Showplan имеет свой идентификатор узла. Столбец ObjectID для событий Hash Warning соответствует идентификатору узла в классе событий Showplan, что позволяет выявить каждый вызывающий ошибку оператор или операцию в отдельности. Дополнительные сведения о классах событий Showplan см. в разделе Отображение плана выполнения с помощью классов событий приложения SQL Server Profiler. |
Столбцы данных класса событий Hash Warning
Имя столбца данных | Тип данных | Описание | Идентификатор столбца | Фильтрация |
---|---|---|---|---|
ApplicationName |
nvarchar |
Имя клиентского приложения, создавшего соединение с экземпляром SQL Server. Этот столбец заполняется значениями, передаваемыми приложением, а не отображаемым именем программы. |
10 |
Да |
ClientProcessID |
int |
Идентификатор, присвоенный узлом процессу, в котором работает клиентское приложение. Этот столбец данных заполняется в том случае, если клиент вводит идентификатор клиентского процесса. |
9 |
Да |
DatabaseID |
int |
Идентификатор базы данных, указанной в инструкции USE database, или базы данных по умолчанию, если инструкция USE database не была выполнена для данного экземпляра. SQL Server Profiler выводит имя базы данных, если трассировкой фиксируется столбец данных ServerName и если сервер доступен. Для определения значения для базы данных используйте функцию DB_ID. |
3 |
Да |
DatabaseName |
nvarchar |
Имя базы данных, в которой выполняется инструкция пользователя. |
35 |
Да |
EventClass |
int |
Тип события = 55. |
27 |
Нет |
EventSequence |
int |
Последовательность данного события в запросе. |
51 |
Нет |
EventSubClass |
int |
Тип подкласса события. 0=рекурсия. 1=аварийное хэширование. |
21 |
Да |
HostName |
nvarchar |
Имя компьютера, на котором выполняется клиентская программа. Этот столбец данных заполняется, если клиент предоставляет имя узла. Чтобы определить имя узла, используйте функцию HOST_NAME. |
8 |
Да |
IntegerData |
int |
Уровень рекурсии (только рекурсия хэширования). |
25 |
Да |
IsSystem |
int |
Указывает, произошло ли событие в системном или в пользовательском процессе. 1 = системный, 0 = пользовательский. |
60 |
Да |
LoginName |
nvarchar |
Имя входа пользователя (либо защищенное имя входа SQL Server, либо учетные данные входа Windows в формате <ДОМЕН>\<имя_пользователя>). |
11 |
Да |
LoginSid |
image |
Идентификационный номер безопасности вошедшего в систему пользователя. Эти сведения можно найти в таблице syslogins базы данных master. Каждому имени входа на сервере соответствует свой уникальный идентификационный номер безопасности. |
41 |
Да |
NTDomainName |
nvarchar |
Домен Windows, к которому принадлежит пользователь. |
7 |
Да |
NTUserName |
nvarchar |
Имя пользователя Windows. |
6 |
Да |
ObjectID |
int |
Идентификатор узла для корня группы хэширования, участвующей в перераспределении секций. Соответствует идентификатору узла в классе событий Showplan. |
22 |
Да |
RequestID |
int |
Идентификатор запроса, содержащего инструкцию. |
49 |
Да |
ServerName |
nvarchar |
Имя трассируемого экземпляра SQL Server. |
26 |
|
SessionLoginName |
nvarchar |
Имя входа пользователя, создавшего этот сеанс. Например, при подключении к SQL Server по имени Имя_входа1 и при выполнении инструкции под именем Имя_входа2 SessionLoginName содержит значение «Имя_входа1», а LoginName содержит значение «Имя_входа2». В этом столбце отображаются имена входа как SQL Server, так и Windows. |
64 |
Да |
SPID |
int |
Идентификатор сеанса, в котором произошло событие. |
12 |
Да |
StartTime |
datetime |
Время начала события, если оно известно. |
14 |
Да |
TransactionID |
bigint |
Назначенный системой идентификатор транзакции. |
4 |
Да |
XactSequence |
bigint |
Маркер, который описывает текущую транзакцию. |
50 |
Да |
См. также
Основные понятия
Основные сведения о хэш-соединениях
Другие ресурсы
Мониторинг событий
sp_trace_setevent (Transact-SQL)
Справка и поддержка
Получение помощи по SQL Server 2005
Журнал изменений
Версия | Журнал |
---|---|
5 декабря 2005 г. |
|