Compartir a través de


Exchange Spill, clase de eventos

La clase de eventos Exchange Spill indica que los búferes de comunicación de un plan de consulta paralelo se han escrito temporalmente en la base de datos tempdb . Esto ocurre con poca frecuencia y solo cuando un plan de consulta tiene varios escaneos de rango.

Normalmente, la consulta Transact-SQL que genera dichos análisis de intervalo tiene muchos operadores BETWEEN, cada uno de los cuales selecciona un intervalo de filas de una tabla o un índice. Como alternativa, puede obtener varios intervalos mediante expresiones como (T.a > 10 AND T.a < 20) OR (T.a > 100 AND T.a < 120). Además, los planes de consulta deben requerir que estos intervalos se examinen en orden, ya sea porque hay una cláusula ORDER BY en T.a, o porque un iterador dentro del plan requiere que consuma las tuplas en orden ordenado.

Cuando un plan de consulta para esta consulta tiene varios operadores de paralelismo , los búferes de comunicación de memoria utilizados por los operadores de paralelismo se llenan y puede surgir una situación en la que el progreso de la ejecución de la consulta se detiene. En esta situación, uno de los operadores de paralelismo escribe su búfer de salida en tempdb (una operación denominada desbordamiento de intercambio) para que pueda consumir filas de algunos de sus búferes de entrada. Finalmente, las filas derramadas se devuelven al consumidor cuando el consumidor está listo para consumirlas.

Muy rara vez, se pueden producir varios desbordamientos de intercambio en el mismo plan de ejecución, lo que hace que la consulta se ejecute lentamente. Si observa más de cinco derrames dentro de la misma ejecución del plan de consulta, póngase en contacto con su profesional de soporte técnico.

A veces, los derrames de intercambio son transitorios y pueden desaparecer a medida que cambian las distribuciones de datos.

Hay varias maneras de evitar eventos de desbordamiento de intercambio:

Importante

Para determinar dónde se produce el evento Exchange Spill cuando el optimizador de consultas genera un plan de ejecución, debe recopilar también una clase de evento de 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 Exchange Spill corresponde al identificador de nodo en los planos de presentación para que puedas determinar qué operador o operación está causando el error.

Columnas de datos de la clase de eventos Exchange Spill

Nombre de columna de datos Tipo de dato Descripción Identificador de columna Filtrable
ApplicationName 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 que pasa la aplicación, en lugar de con el nombre que se muestra para el 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 el identificador de proceso del cliente. 9
DatabaseID 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
DatabaseName nvarchar Nombre de la base de datos en la que se ejecuta la instrucción del usuario. 35
EventClass Int Tipo de evento = 127. 27 No
EventSequence Int Secuencia de un evento determinado de la solicitud. 51 No
EventSubClass Int Tipo de la subclase de eventos.

1=Inicio del derrame

2=Fin del derrame
Veintiuno
GroupID Int Id. del grupo de carga de trabajo donde se activa el evento de Seguimiento de SQL. 66
Nombre de 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
IsSystem Int Indica si el evento ha ocurrido en un proceso del sistema o en un proceso 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 las credenciales de inicio de sesión de Windows en forma de <DOMINIO>\<nombredeusuario>). 11
LoginSid imagen SID (número de identificación de seguridad) del usuario que ha iniciado la sesión. Puede encontrar esta información en la tabla syslogins de la base de datos maestra . Cada SID es único para cada inicio de sesión en el servidor. 41
NTDomainName nvarchar Dominio de Windows al que pertenece el usuario. 7
NTUserName nvarchar Nombre del usuario de Windows. 6
ObjectID Int Identificador del objeto asignado por el sistema. Corresponde con el identificador de nodo en Plan de presentación. 22
SolicitudID Int Identificador de la solicitud que contiene la instrucción. 49
ServerName nvarchar Nombre de la instancia de SQL Server que se realiza el seguimiento. 26 No
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 Int Identificador de la sesión en la que se produjo 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

Véase también

sp_trace_setevent (Transact-SQL)
Establecer opciones de índice
ALTER INDEX (Transact-SQL)