Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
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 | Sí |
| 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 | Sí |
| 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 | Sí |
| Nombre de la base de datos | nvarchar |
Nombre de la base de datos en la que se ejecuta la instrucción del usuario. | 35 | Sí |
| 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 | Sí |
| ID de Grupo | int |
Id. del grupo de carga de trabajo donde se activa el evento de Seguimiento de SQL. | 66 | Sí |
| 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 | Sí |
| Datos Enteros | int |
Nivel de recursión (recursión de hash solamente). | 25 | Sí |
| IsSystem | int |
Indica si el evento ha ocurrido en un proceso del sistema o en un proceso de usuario. 1 = sistema, 0 = usuario. | 60 | Sí |
| 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 | Sí |
| 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 | Sí |
| Nombre de Dominio NT | nvarchar |
Dominio de Windows al que pertenece el usuario. | 7 | Sí |
| NTUserName (Nombre de usuario NT) | nvarchar |
Nombre del usuario de Windows. | 6 | Sí |
| 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 | Sí |
| RequestID | int |
ID de la solicitud que contiene la instrucción. | 49 | Sí |
| 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 | Sí |
| SPID (Servicios de Identidad Digital) | int |
Identificador de la sesión en la que se produjo el evento. | 12 | Sí |
| HoraDeInicio | datetime |
Hora a la que se inició el evento, si está disponible. | 14 | Sí |
| TransactionID | bigint |
Id. de la transacción asignado por el sistema. | 4 | Sí |
| XactSequence | bigint |
Token que describe la transacción actual. | 50 | Sí |