Compartir a través de


Hash Warning, clase de eventos

La clase de eventos Hash Warning se puede usar para supervisar cuándo se ha producido una recursión de hash o un abandono del proceso de hash durante una operación de hash.

La recursividad hash se produce cuando la entrada de compilación no cabe en la memoria disponible, lo que da lugar a la división de entrada en varias particiones que se procesan por separado. Si alguna de estas particiones todavía no cabe en la memoria disponible, se divide en subparticiones, que también se procesan por separado. Este proceso de división continúa hasta que cada partición se ajusta a la memoria disponible o hasta que se alcanza el nivel máximo de recursividad (se muestra en la columna de datos IntegerData).

Se produce un bailout de hash cuando una operación de hashing alcanza su límite máximo de recursión y cambia a un plan alternativo para procesar los datos particionados restantes. El rescate de hash suele ocurrir debido a la distribución desequilibrada de los datos.

La recursividad hash y el aborto de hash provocan un rendimiento reducido en su servidor. Para eliminar o reducir la frecuencia de recursividad hash y los rescates, realice una de las acciones siguientes:

  • Asegúrese de que existen estadísticas en las columnas que se van a combinar o agrupar.

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

  • Use otro tipo de combinación. Por ejemplo, use una combinación MERGE o LOOP en su lugar, si procede.

  • Aumente la memoria disponible en el equipo. La recursividad o el rescate de hash se producen cuando no hay suficiente memoria para procesar las consultas en su lugar y necesitan desbordarse en el disco.

Crear o actualizar las estadísticas de la columna involucrada en la unión es la manera más eficaz de reducir el número de recursiones de hash o abandonos de hash que se producen.

Nota:

Los términos grace hash join y recursive hash join también se usan para describir el mecanismo de recuperación hash.

Importante

Para determinar dónde se produce el evento Hash Warning cuando el optimizador de consultas genera un plan de ejecución, también debe recopilar una clase de eventos Showplan en el seguimiento. Puede elegir cualquiera de las clases de eventos Showplan excepto las clases de eventos Showplan Text y Showplan Text (Sin codificar), que no devuelven un identificador de nodo. Los identificadores de nodo de 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 plan de presentación tiene un identificador de nodo. La columna ObjectID para los eventos de advertencia hash corresponde al identificador de nodo en Los planos de presentación para que pueda determinar qué operador o operación está causando el error.

Columnas de datos de la clase de eventos Hash Warning

Nombre de columna de datos Tipo de dato Descripción Identificador de columna Filtrable
Nombre de la Aplicación nvarchar Nombre de la aplicación cliente que creó la conexión a una instancia de SQL Server. Esta columna se rellena con los valores pasados por la aplicación en lugar de con el nombre mostrado 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 rellena si el cliente proporciona un identificador de proceso de cliente. 9
ID de Base de Datos int Identificador de la base de datos especificada mediante la instrucción USE database o la base de datos predeterminada si no se emite la instrucción USE database para una determinada instancia. 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. Determina el valor de una base de datos mediante la función DB_ID. 3
Nombre de la base de datos nvarchar Nombre de la base de datos en la que se ejecuta la instrucción del usuario. 35
EventClass int Tipo de evento = 55. 27 No
Secuencia de Eventos int Secuencia de un evento determinado de la solicitud. 51 No
SubclaseDeEvento int Tipo de la subclase de eventos.

0=Recursividad

1=Rescate
Veintiuno
ID de Grupo int Id. del grupo de carga de trabajo donde se activa el evento de Seguimiento de SQL. 66
Nombre del host nvarchar Nombre del equipo en el que se está ejecutando el cliente. Esta columna de datos se rellena si el cliente proporciona el nombre del host. Para averiguar el nombre de host, use la función HOST_NAME . 8
Datos Enteros int Nivel de recursión (recursión de hash solamente). 25
IsSystem int Indica si el evento ha ocurrido en un proceso del sistema o en un proceso de usuario. 1 = sistema, 0 = usuario. 60
NombreDeUsuario nvarchar Nombre del inicio de sesión del usuario (inicio de sesión de seguridad de SQL Server o las credenciales de inicio de sesión de Windows en forma de <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 único para cada inicio de sesión en el servidor. 41
Nombre de Dominio NT nvarchar Dominio de Windows al que pertenece el usuario. 7
NTUserName (Nombre de usuario NT) nvarchar Nombre del usuario de Windows. 6
ID del Objeto int Identificador de nodo de la raíz del equipo hash implicado en la repartición. Corresponde con el identificador de nodo en Plan de presentación. 22
RequestID int ID de la solicitud que contiene la instrucción. 49
NombreDelServidor nvarchar Nombre de la instancia de SQL Server que se está realizando el 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 mediante Login1 y ejecuta una instrucción como Login2, SessionLoginName muestra Login1 y LoginName muestra Login2. En esta columna se muestran los inicios de sesión de SQL Server y Windows. 64
SPID (Servicios de Identidad Digital) int Identificador de la sesión en la que se produjo el evento. 12
HoraDeInicio 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

Véase también

sp_trace_setevent (Transact-SQL)