Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Класс событий 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 | Да |