Hash Warning (clase de evento)

La clase de evento Hash Warning se puede utilizar para supervisar cuándo se ha producido una recursividad hash o un cese de hash (salida hash) durante una operación de hash.

La recursividad hash se produce cuando no hay suficiente memoria para la entrada generada, lo que causa que ésta se divida en varias particiones que se procesan por separado. Si alguna de estas particiones sigue sin caber en la memoria disponible, se vuelve a dividir en subparticiones, que también se procesan por separado. El proceso de división continúa hasta que cada partición quepa en la memoria disponible o hasta que se alcance el nivel máximo de recursividad (que se muestra en la columna de datos IntegerData).

La salida hash se produce cuando una operación de hash alcanza el nivel máximo de repetición y vuelve a un plan alternativo para procesar el resto de datos con particiones. La salida hash normalmente se produce debido a la existencia de datos sesgados.

La recursividad hash y el cese de hash reducen el rendimiento del servidor. Para eliminar o reducir la frecuencia de la repetición hash y del cese de hash, realice uno de los siguientes procedimientos:

  • Asegúrese de que existen estadísticas en las columnas que se están combinando o agrupando.

  • Si hay estadísticas en las columnas, actualícelas.

  • Utilice un tipo de combinación diferente. Por ejemplo, utilice en su lugar una combinación MERGE o LOOP, si resulta apropiado.

  • Aumente la memoria disponible en el equipo. La repetición hash o el cese de hash se produce cuando no hay suficiente memoria para procesar las consultas realizadas y es necesario volcarlas en el disco.

Crear o actualizar las estadísticas de la columna afectada en la combinación es el modo más eficaz de reducir el número de repeticiones hash o de ceses de hash que se producen.

Nota

Para describir las salidas de hash, también se utilizan los términos combinación hash aplazada y combinación hash de repetición. Para obtener más información, vea Descripción de las combinaciones hash.

Nota importanteImportante

Para determinar dónde se está produciendo el evento Hash Warning cuando el optimizador de consultas genera un plan de ejecución, debería recopilar la clase de evento Showplan en el seguimiento. Puede elegir cualquiera de las clases de eventos Showplan, excepto Showplan Text y Showplan Text (Unencoded), que no devuelven ningún identificador de nodo. Los identificadores de nodo en las clases de evento Showplans identifican cada operación que realiza el optimizador de consultas cuando genera un plan de ejecución de consultas. Estas operaciones se denominan operadores y cada operador de un Showplan tiene un identificador de nodo. La columna ObjectID para los eventos Warning Hash se corresponden con el identificador de nodo en las clases de evento Showplan para que pueda determinar qué operador u operación está provocando el error. Para obtener más información acerca de las clases de eventos Showplan, vea Mostrar planes de ejecución mediante las clases de eventos del Analizador de SQL Server.

Columnas de datos de la clase de eventos Hash Warning

Nombre de la columna de datos

Tipo de datos

Descripción

Column ID

Se puede filtrar

ApplicationName

nvarchar

Nombre de la aplicación cliente que ha creado la conexión a una instancia de SQL Server. Esta columna se llena con los valores que pasa la aplicación, en lugar de con el nombre que se muestra del programa.

10

ClientProcessID

int

Identificador que el equipo host asigna al proceso en el que se ejecuta la aplicación cliente. Esta columna de datos se llena si el cliente proporciona el Id. del proceso del cliente.

9

DatabaseID

int

Identificador de la base de datos especificada por la instrucción USE database o la base de datos predeterminada si no se ha emitido ninguna instrucción USE database para una instancia determinada. SQL Server Profiler muestra el nombre de la base de datos si se captura la columna de datos ServerName en el seguimiento y el servidor está disponible. El valor para una base de datos se puede determinar mediante la función DB_ID.

3

DatabaseName

nvarchar

Nombre de la base de datos en que se ejecuta la instrucción del usuario.

35

EventClass

int

Tipo de evento = 55.

27

No

EventSequence

int

Secuencia de un evento determinado de la solicitud.

51

No

EventSubClass

int

Tipo de subclase de evento.

0=Repetición

1=Cese de hash

21

GroupID

int

Id. del grupo de cargas de trabajo donde se activa el evento de Seguimiento SQL.

66

HostName

nvarchar

Nombre del equipo en el que se está ejecutando el cliente. Esta columna de datos se llena si el cliente proporciona el nombre del host. Para determinar el nombre de host, utilice la función HOST_NAME.

8

IntegerData

int

Nivel de recursividad (sólo recursividad hash).

25

IsSystem

int

Indica si el evento se ha producido en un proceso del sistema o de usuario. 1 = sistema, 0 = usuario.

60

LoginName

nvarchar

Nombre del inicio de sesión del usuario (inicio de sesión de seguridad de SQL Server o credenciales de inicio de sesión de Windows con el formato <DOMINIO>\<nombreDeUsuario>).

11

LoginSid

image

SID (número de identificación de seguridad) del usuario que ha iniciado la sesión. Puede buscar esta información en la vista de catálogo sys.server_principals. Cada SID es exclusivo para cada inicio de sesión en el servidor.

41

NTDomainName

nvarchar

Dominio de Windows al que pertenece el usuario.

7

NTUserName

nvarchar

Nombre de usuario de Windows.

6

ObjectID

int

Id. del nodo de la raíz del equipo de hash implicado en la nueva creación de particiones. Se corresponde con el Id. de nodo en los eventos Showplan.

22

RequestID

int

Id. de la solicitud que contiene la instrucción.

49

ServerName

nvarchar

Nombre de la instancia de SQL Server de la que se va a realizar un seguimiento.

26

SessionLoginName

nvarchar

Nombre de inicio de sesión del usuario que originó la sesión. Por ejemplo, si se conecta a SQL Server usando inicioDeSesión1 y ejecuta una instrucción como inicioDeSesión2, SessionLoginName muestra inicioDeSesión1 y LoginName muestra inicioDeSesión2. Esta columna muestra tanto el inicio de sesión de SQL Server como el de Windows.

64

SPID

int

Identificador de la sesión en la que se ha producido el evento.

12

StartTime

datetime

Hora a la que se inició el evento, si está disponible.

14

TransactionID

bigint

Id. de la transacción asignado por el sistema.

4

XactSequence

bigint

Token que describe la transacción actual.

50