Поделиться через


Класс события: Предупреждение Hash

Класс событий Hash Warning можно использовать для мониторинга возникновения хэш-рекурсии или прекращения хэширования во время хэш-операции.

Хэш-рекурсия возникает, когда входные данные сборки не помещаются в доступную память, что приводит к разделению входных данных на несколько секций, обрабатываемых отдельно. Если любой из этих разделов по-прежнему не помещается в доступную память, он разбивается на подпартии, которые также обрабатываются отдельно. Этот процесс разделения продолжается до тех пор, пока каждая секция не помещается в доступную память или пока не будет достигнут максимальный уровень рекурсии (отображается в столбце данных IntegerData).

Хэш-спасение происходит, когда операция хэширования достигает максимального уровня рекурсии и перемещается в альтернативный план для обработки оставшихся секционированных данных. Хэш-бейл-аут обычно происходит из-за искажённых данных.

Хэш-рекурсия и спасение хэша приводят к снижению производительности на сервере. Чтобы устранить или уменьшить частоту хэш-рекурсии и откатов, выполните одно из следующих действий:

  • Убедитесь, что на столбцах, которые объединяются или группируются, существует статистика.

  • Если статистика существует в столбцах, обновите их.

  • Используйте другой тип соединения. Например, при необходимости используйте соединение MERGE или LOOP, если это уместно.

  • Увеличьте доступную память на компьютере. Хэш-рекурсия или выгрузка на диск происходит, когда недостаточно памяти для обработки запросов в оперативной памяти.

Создание или обновление статистики столбца, участвующего в соединении, является наиболее эффективным способом сокращения числа возникающих хэш-рекурсий или выбросов.

Замечание

Термины грациозное хэш-соединение и рекурсивное хэш-соединение также используются для описания хэш-спасения.

Это важно

Чтобы определить, где происходит событие Hash Warning, когда оптимизатор запросов создает план выполнения, необходимо также собрать класс событий Showplan в трассировке. Вы можете выбрать любой из классов событий Showplan, кроме классов событий Showplan Text и Showplan Text (Unencoded), которые не возвращают идентификатор узла. Идентификаторы узлов в Showplans определяют каждую операцию, выполняемую оптимизатором запросов при создании плана выполнения запроса. Эти операции называются операторами, и каждый оператор в Showplan имеет идентификатор узла. Столбец ObjectID для событий hash Warning соответствует идентификатору узла в Showplans, чтобы определить, какой оператор или операция вызывает ошибку.

Столбцы данных класса событий предупреждения о хэше

Имя столбца данных Тип данных Описание Идентификатор столбца Доступно для фильтрации
ИмяПриложения nvarchar Имя клиентского приложения, создавшего подключение к экземпляру SQL Server. Этот столбец заполняется значениями, передаваемыми приложением, а не отображаемым именем программы. 10 Да
ClientProcessID int Идентификатор, присвоенный главным компьютером сервера процессу, в котором работает клиентское приложение. Этот столбец данных заполняется, если клиент предоставляет идентификатор процесса клиента. 9 Да
Идентификатор базы данных int Идентификатор базы данных, указанной в инструкции USE database , или database по умолчанию, если для данного экземпляра инструкция USE не выполнялась. Sql Server Profiler отображает имя базы данных, если столбец данных ServerName фиксируется в трассировке и сервер доступен. Определите значение для базы данных, используя функцию DB_ID. 3 Да
ИмяБазыДанных nvarchar Имя базы данных, в которой выполняется пользовательская инструкция. 35 Да
EventClass int Тип события = 55. двадцать семь нет
Последовательность событий int Последовательность данного события в запросе. 51 нет
EventSubClass int Тип подкласса события.

0=Рекурсия

1=Спасение
двадцать один Да
Идентификатор группы int Идентификатор группы рабочей нагрузки, в которой запускается событие трассировки SQL. 66 Да
Имя хоста nvarchar Имя компьютера, на котором выполняется клиентская программа. Этот столбец данных заполняется, если клиент предоставляет имя узла. Чтобы определить имя узла, используйте функцию HOST_NAME. 8 Да
ЦелочисленныеДанные int Уровень рекурсии (только хэш-рекурсия). двадцать пять Да
IsSystem int Указывает, произошло событие в системном или в пользовательском процессе. 1 = системный, 0 = пользовательский. шестьдесят Да
Имя пользователя для входа nvarchar Имя имени входа пользователя (имя входа безопасности SQL Server или учетные данные для входа Windows в формате <DOMAIN>\<username>). 11 Да
ЛогинСид image Идентификатор безопасности вошедшего в систему пользователя. Эти сведения можно найти в представлении каталога sys.server_principals. Значение идентификатора безопасности уникально для каждого имени входа на сервере. 41 Да
Имя домена NT nvarchar Домен Windows, к которому принадлежит пользователь. 7 Да
NTИмяПользователя nvarchar Имя пользователя Windows. 6 Да
ИдентификаторОбъекта int Идентификатор узла корня хэш-группы, участвующей в репартировании. Соответствует идентификатору узла в Showplans. двадцать два Да
RequestID int Идентификатор запроса, содержащего заявление. 49 Да
Имя сервера nvarchar Имя отслеживаемого экземпляра SQL Server. 26
SessionLoginName nvarchar Имя входа пользователя, создавшего этот сеанс. Например, если вы подключаетесь к SQL Server с помощью Login1 и выполняете инструкцию login2, SessionLoginName показывает Login1 и LoginName показывает Login2. В этом столбце отображаются имена входа SQL Server и Windows. 64 Да
СПИД int Идентификатор сеанса, в котором произошло событие. 12 Да
Время начала datetime Время начала события, если оно известно. 14 Да
TransactionID bigint Назначенный системой идентификатор транзакции. 4 Да
XactSequence bigint Токен, который описывает текущую транзакцию. 50 Да

См. также

sp_trace_setevent (Transact-SQL)