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.
Se aplica a:SQL Server
Azure SQL Database
Instancia
administrada de Azure SQLBase de datos SQL en Microsoft Fabric
Crea una sesión de eventos extendidos que identifica los eventos que se van a recopilar, los destinos de la sesión de eventos y las opciones de sesión de eventos.
Convenciones de sintaxis de Transact-SQL
Sintaxis
CREATE EVENT SESSION event_session_name
ON { SERVER | DATABASE }
{
<event_definition> [ , ...n ]
[ <event_target_definition> [ , ...n ] ]
[ WITH ( <event_session_options> [ , ...n ] ) ]
}
;
<event_definition>::=
{
ADD EVENT [event_module_guid].event_package_name.event_name
[ ( {
[ SET { event_customizable_attribute = <value> [ , ...n ] } ]
[ ACTION ( { [event_module_guid].event_package_name.action_name [ , ...n ] } ) ]
[ WHERE <predicate_expression> ]
} ) ]
}
<predicate_expression> ::=
{
[ NOT ] <predicate_factor> | { ( <predicate_expression> ) }
[ { AND | OR } [ NOT ] { <predicate_factor> | ( <predicate_expression> ) } ]
[ , ...n ]
}
<predicate_factor>::=
{
<predicate_leaf> | ( <predicate_expression> )
}
<predicate_leaf>::=
{
<predicate_source_declaration> { = | < > | != | > | >= | < | <= } <value>
| [event_module_guid].event_package_name.predicate_compare_name ( <predicate_source_declaration> , <value> )
}
<predicate_source_declaration>::=
{
event_field_name | ( [event_module_guid].event_package_name.predicate_source_name )
}
<value>::=
{
number | 'string'
}
<event_target_definition>::=
{
ADD TARGET [event_module_guid].event_package_name.target_name
[ ( SET { target_parameter_name = <value> [ , ...n ] } ) ]
}
<event_session_options>::=
{
[ MAX_MEMORY = size [ KB | MB ] ]
[ [ , ] EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS } ]
[ [ , ] MAX_DISPATCH_LATENCY = { seconds SECONDS | INFINITE } ]
[ [ , ] MAX_EVENT_SIZE = size [ KB | MB ] ]
[ [ , ] MEMORY_PARTITION_MODE = { NONE | PER_NODE | PER_CPU } ]
[ [ , ] TRACK_CAUSALITY = { ON | OFF } ]
[ [ , ] STARTUP_STATE = { ON | OFF } ]
[ [ , ] MAX_DURATION = { <time duration> { SECONDS | MINUTES | HOURS | DAYS } | UNLIMITED } ]
}
Argumentos
event_session_name
Nombre definido por el usuario para la sesión de eventos. event_session_name es alfanumérico, puede tener hasta 128 caracteres, debe ser único dentro de una instancia de SQL Server y debe cumplir las reglas para los identificadores de base de datos.
ON { SERVER | BASE DE DATOS }
Determina si la sesión de eventos está en el contexto del servidor o la base de datos.
Azure SQL Database y SQL Database en Microsoft Fabric requieren DATABASE.
ADD EVENT [event_module_guid]. event_package_name. event_name
Evento que se va a asociar a la sesión de eventos, donde:
- event_module_guid es el GUID del módulo que contiene el evento.
- event_package_name es el paquete que contiene el evento.
- event_name es el nombre del evento.
Para encontrar eventos disponibles, ejecute la consulta siguiente:
SELECT o.name AS event_name,
o.description AS event_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'event'
ORDER BY event_name ASC;
SET { event_customizable_attribute = <value> [ ,... n ] }
Atributos personalizables para el evento.
Para encontrar atributos personalizables para un evento determinado, ejecute la consulta siguiente:
SELECT object_name,
name AS column_name,
type_name,
column_value,
description
FROM sys.dm_xe_object_columns
WHERE object_name = 'event-name-placeholder'
AND column_type = 'customizable'
ORDER BY column_name ASC;
ACTION ( { [event_module_guid].event_package_name. action_name [ ,...n ] })
Acción que se va a asociar al evento, donde:
- event_module_guid es el GUID del módulo que contiene la acción.
- event_package_name es el paquete que contiene la acción.
- action_name es el nombre de la acción.
Las acciones disponibles se pueden encontrar ejecutando la consulta siguiente:
SELECT o.name AS action_name,
o.description AS action_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'action'
ORDER BY action_name ASC;
¿DÓNDE <predicate_expression>
Especifica la expresión de predicado usada para determinar si debe procesarse un evento. Si <predicate_expression> es true, las acciones y los destinos de la sesión siguen procesando el evento. Si <predicate_expression> es false, se quita el evento, lo que evita la acción adicional y el procesamiento de destino. Cada expresión de predicado está limitada a 3000 caracteres.
event_field_name
Nombre del campo de evento que identifica el origen del predicado.
Los campos de un evento se pueden encontrar ejecutando la consulta siguiente:
SELECT oc.name AS field_name,
oc.type_name AS field_type,
oc.description AS field_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
INNER JOIN sys.dm_xe_object_columns AS oc
ON o.name = oc.object_name
AND
o.package_guid = oc.object_package_guid
WHERE o.object_type = 'event'
AND
o.name = 'event-name-placeholder'
AND
oc.column_type = 'data'
ORDER BY field_name ASC;
[event_module_guid]. event_package_name. predicate_source_name
Nombre del origen del predicado global donde:
- event_module_guid es el GUID del módulo que contiene el evento.
- event_package_name es el paquete que contiene el objeto de origen del predicado.
- predicate_source_name es el nombre del origen del predicado.
Los orígenes de predicado se pueden encontrar ejecutando la consulta siguiente:
SELECT o.name AS predicate_source_name,
o.description AS predicate_source_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_source'
ORDER BY predicate_source ASC;
[event_module_guid].event_package_name.predicate_compare_name
Nombre del objeto comparador de predicado, donde:
- event_module_guid es el GUID del módulo que contiene el evento.
- event_package_name es el paquete que contiene el objeto comparador de predicado.
- predicate_compare_name es el nombre del comparador de predicados.
Los comparadores de predicados se pueden encontrar ejecutando la consulta siguiente:
SELECT o.name AS predicate_comparator_name,
o.description AS predicate_comparator_description,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'pred_compare'
ORDER BY predicate_comparator ASC;
número
Cualquier tipo numérico que se pueda representar como un entero de 64 bits.
'string'
Una cadena ANSI o Unicode según sea necesario por el comparador de predicado. No se realiza ninguna conversión implícita de tipos de cadena para las funciones de comparación de predicado. Si se pasa el valor de un tipo inesperado, se produce un error.
AGREGAR DESTINO [event_module_guid]. event_package_name. target_name
Es el destino que se va a asociar con la sesión de eventos, donde:
- event_module_guid es el GUID del módulo que contiene el destino.
- event_package_name es el paquete que contiene el destino.
- target_name es el nombre de destino.
Los destinos disponibles se pueden encontrar ejecutando la consulta siguiente:
SELECT o.name AS target_name,
o.description AS target_description,
o.capabilities_desc,
p.name AS package_name,
p.description AS package_description
FROM sys.dm_xe_objects AS o
INNER JOIN sys.dm_xe_packages AS p
ON o.package_guid = p.guid
WHERE o.object_type = 'target'
ORDER BY target_name ASC;
Una sesión de eventos puede tener cero, uno o varios destinos. Todos los destinos agregados a una sesión de eventos deben ser diferentes. Por ejemplo, no puede agregar un segundo event_file destino a una sesión que ya tenga un event_file destino.
Para obtener más información, incluidos ejemplos de uso para destinos usados habitualmente, consulte Destinos de eventos extendidos.
SET { target_parameter_name = <value> [ , ... n ] }
Establece un parámetro de destino.
Para ver todos los parámetros de destino y sus descripciones, ejecute la consulta siguiente, reemplazando target-name-placeholder por el nombre de destino, como event_file, ring_buffer, histogram, etc.:
SELECT name AS target_parameter_name,
column_value AS default_value,
description
FROM sys.dm_xe_object_columns
WHERE column_type = 'customizable'
AND object_name = 'target-name-placeholder';
Importante
Si usa el destino de búfer de anillo, se recomienda establecer el MAX_MEMORY parámetro de destino (distinto del MAX_MEMORY parámetro de sesión) en 1024 kilobytes (KB) o menos para ayudar a evitar el posible truncamiento de datos de la salida XML.
Para obtener más información sobre los tipos de destino, vea Destinos de eventos extendidos.
WITH ( <event_session_options> [ ,... n ] )
Especifica las opciones que se van a usar con la sesión de eventos.
MAX_MEMORY = tamaño [KB | MB ]
Especifica la cantidad máxima de memoria que se asigna a la sesión para el almacenamiento en búfer de los eventos. El valor predeterminado es 4 MB. size es un número entero y puede expresarse en kilobytes (KB) o en megabytes (MB). La cantidad máxima no puede superar los 2 GB (2048 MB). Sin embargo, no se recomienda usar valores de memoria en el intervalo de GB.
EVENT_RETENTION_MODE = { ALLOW_SINGLE_EVENT_LOSS | ALLOW_MULTIPLE_EVENT_LOSS | NO_EVENT_LOSS }
Especifica el modo de retención de eventos usado para controlar las pérdidas de eventos.
ALLOW_SINGLE_EVENT_LOSS
Puede perderse un evento de la sesión. Se elimina un único evento solo cuando todos los búferes de eventos están llenos. La pérdida de un único evento cuando los búferes de eventos están completos minimiza el impacto en el rendimiento, al tiempo que minimiza la pérdida de datos en el flujo de eventos procesado.
ALLOW_MULTIPLE_EVENT_LOSS
En la sesión pueden perderse búferes completos de eventos que contienen varios eventos. El número de eventos perdidos depende del tamaño de la memoria asignada a la sesión, del particionamiento de la memoria y del tamaño de los eventos del búfer. Esta opción generalmente evita el impacto en el rendimiento en el servidor cuando los búferes de eventos se rellenan rápidamente, pero se pueden perder grandes cantidades de eventos de la sesión.
NO_EVENT_LOSS
No se permite ninguna pérdida de eventos. Esta opción asegura que se retienen todos los eventos que aparecen. Al utilizar esta opción, se obliga a todas las tareas que activan eventos a esperar hasta que haya espacio disponible en un búfer de eventos. El uso de NO_EVENT_LOSS puede provocar problemas de rendimiento detectables mientras la sesión de eventos está activa. Es posible que las sesiones de usuario y las consultas se detengan mientras esperan a que los eventos se vacían del búfer.
Nota:
Para los objetivos de archivo de eventos en Azure SQL Database, SQL database en Microsoft Fabric y Azure SQL Managed Instance (con la política de actualizaciónSQL Server 2025 o Always-up-to-date), a partir de junio de 2024,
NO_EVENT_LOSSse comporta igual queALLOW_SINGLE_EVENT_LOSS. Si especificaNO_EVENT_LOSS, se devuelve una advertencia con el identificador de mensaje 25665, la gravedad 10 y el mensajeThis target doesn't support the NO_EVENT_LOSS event retention mode. The ALLOW_SINGLE_EVENT_LOSS retention mode is used instead.y se crea la sesión.Este cambio evita tiempos de espera de conexión, retrasos de conmutación por error y otros problemas que pueden reducir la disponibilidad de la base de datos cuando
NO_EVENT_LOSSse usa con destinos de archivos de eventos en Azure Blob Storage.NO_EVENT_LOSSestá previsto su eliminación como argumento apoyadoEVENT_RETENTION_MODEen futuras actualizaciones de Azure SQL Database, SQL database en Microsoft Fabric y Azure SQL Managed Instance. Evite utilizar esta característica en nuevos trabajos de desarrollo y tenga previsto modificar las aplicaciones que actualmente la utilizan.
MAX_DISPATCH_LATENCY = { segundos SEGUNDOS | INFINITE }
Especifica el tiempo que los eventos se almacenan en memoria antes de enviarse a los destinos de la sesión de eventos. De forma predeterminada, este valor está establecido en 30 segundos.
sobras
SECONDSTiempo, en segundos, que hay que esperar antes de que empiecen a vaciarse los búferes en los destinos. seconds es un número entero. El valor de latencia mínimo es de 1 segundo. Sin embargo, puede usarse el valor 0 para especificar la latencia INFINITE.
INFINITO
Los búferes se vacían en los destinos solo si están llenos o cuando se cierra la sesión de eventos.
MAX_EVENT_SIZE = tamaño [ KB | MB ]
Especifica el tamaño máximo permitido para los eventos. MAX_EVENT_SIZE solo debe establecerse para permitir eventos únicos mayores que MAX_MEMORY; si se establece en menos de MAX_MEMORY se produce un error. size es un número entero y puede expresarse en kilobytes (KB) o en megabytes (MB). Si size se especifica en kilobytes, el tamaño mínimo permitido es 64 KB. Cuando se establece MAX_EVENT_SIZE, se crean dos búferes de tamaño además de MAX_MEMORY y la memoria total usada para el almacenamiento en búfer de eventos se MAX_MEMORY + 2 * MAX_EVENT_SIZE.
MEMORY_PARTITION_MODE = { NINGUNA | PER_NODE | PER_CPU }
Especifica la afinidad de los búferes de eventos. Las opciones que no tienen como NONE resultado más búferes y un mayor consumo de memoria, pero pueden evitar contención y mejorar el rendimiento en máquinas más grandes.
NINGUNO
Se crea un único conjunto de búferes en la instancia del motor de base de datos.
PER_NODE
Se crea un conjunto de búferes para cada nodo NUMA.
PER_CPU
Se crea un conjunto de búferes para cada CPU.
TRACK_CAUSALITY = { ON | OFF }
Especifica si se va a realizar el seguimiento de la causalidad. Si está habilitado, la causalidad permite correlacionar eventos relacionados en las diferentes conexiones con el servidor.
STARTUP_STATE = { ON | OFF }
Especifica si esta sesión de eventos se inicia automáticamente cuando se inicie SQL Server.
Nota:
Si STARTUP_STATE = ONes , la sesión de eventos se inicia cuando se detiene el motor de base de datos y, a continuación, se reinicia. Para iniciar la sesión de eventos inmediatamente, use ALTER EVENT SESSION ... ON SERVER STATE = START.
ACTIVAR
La sesión de eventos se inicia al iniciarse.
Apagado
La sesión de eventos no se inicia en el inicio.
MAX_DURATION = { duración del tiempo { SECONDS | MINUTOS | HORAS | DAYS } | UNLIMITED }
Aplica a: SQL Server 2025 (17.x)
ILIMITADO
Crea una sesión de eventos que se ejecuta indefinidamente una vez iniciada, hasta que se detiene mediante la
ALTER EVENT SESSION ... STATE = STOPinstrucción . Este es el valor predeterminado siMAX_DURATIONno se especifica.duración del tiempo SECONDS | MINUTOS | HORAS | DÍAS
Crea una sesión de eventos que se detiene automáticamente después de que transcurre el tiempo especificado después de iniciar la sesión. La duración máxima admitida es de 2 147 483 segundos o 35 792 minutos o 596 horas o 24 días.
Para obtener más información, consulte Sesiones de eventos enlazadas a tiempo.
Comentarios
Para obtener más información sobre los argumentos de sesión de eventos, vea Sesiones de eventos extendidos.
El orden de prioridad de los operadores lógicos es NOT (el más alto), seguido de AND y OR.
Permisos
SQL Server y Azure SQL Managed Instance requieren el CREATE ANY EVENT SESSION permiso (introducido en SQL Server 2022).ALTER ANY EVENT SESSION
Azure SQL Database y SQL Database en Microsoft Fabric requieren el CREATE ANY DATABASE EVENT SESSION permiso en la base de datos.
Sugerencia
SQL Server 2022 introdujo permisos más granulares para eventos extendidos. Para obtener más información, consulte Blog: Nuevos permisos granulares para SQL Server 2022 y Azure SQL para mejorar el cumplimiento con PoLP.
Ejemplos
A. Ejemplo de SQL Server e Instancia administrada de Azure SQL
En el ejemplo siguiente se muestra cómo crear una sesión de eventos denominada test_session. En este ejemplo se agregan dos eventos y se usa el event_file destino, lo que limita el tamaño de cada archivo a 256 MB y limita el número retenido de archivos a 10.
IF EXISTS (SELECT 1
FROM sys.server_event_sessions
WHERE name = 'test_session')
DROP EVENT SESSION test_session ON SERVER;
CREATE EVENT SESSION test_session ON SERVER
ADD EVENT sqlserver.rpc_starting,
ADD EVENT sqlserver.sql_batch_starting,
ADD EVENT sqlserver.error_reported
ADD TARGET package0.event_file
(
SET filename = N'C:\xe\test_session.xel',
max_file_size = 256,
max_rollover_files = 10
)
WITH (MAX_MEMORY = 4 MB);
B. Ejemplos de Azure SQL Database
Por ejemplo, consulte Creación de una sesión de eventos con un destino de event_file en Azure Storage y Creación de una sesión de eventos con un destino de ring_buffer en memoria.
Los ejemplos de código pueden diferir para Azure SQL Database y SQL Managed Instance
Algunos ejemplos de código Transact-SQL escritos para SQL Server necesitan pequeños cambios para ejecutarse en Azure SQL Database o SQL Database en Fabric. Una categoría de estos ejemplos de código implica vistas de catálogo cuyos prefijos de nombre difieren en función del tipo de motor de base de datos:
-
server_- prefijo para SQL Server y Azure SQL Managed Instance -
database_- prefijo para Azure SQL Database, SQL Database en Fabric e Instancia administrada de SQL
Azure SQL Database y SQL Database en Fabric solo admiten sesiones de eventos con ámbito de base de datos. SQL Server Management Studio (SSMS) admite sesiones de eventos con ámbito de base de datos para Azure SQL Database: un nodo Eventos extendidos que contiene sesiones con ámbito de base de datos aparece en cada base de datos en el Explorador de objetos.
Azure SQL Managed Instance admite sesiones tanto con ámbito de base de datos como con ámbito de servidor. SSMS admite completamente sesiones con ámbito de servidor para SQL Managed Instance: en la carpeta Administración de cada instancia administrada del Explorador de objetos aparece un nodo Eventos extendidos que contiene todas las sesiones con ámbito de servidor.
Nota:
Las sesiones de eventos con ámbito de servidor se recomiendan para Azure SQL Managed Instance.
Las sesiones de eventos con ámbito de base de datos no se muestran en el Explorador de objetos en SSMS para Azure SQL Managed Instance. En una instancia administrada de SQL, las sesiones de eventos con ámbito de base de datos solo se pueden consultar y administrar con Transact-SQL.
Como ilustración, en la tabla siguiente se enumeran y comparan dos subconjuntos de las vistas de catálogo. Los subconjuntos tienen prefijos de nombre diferentes porque admiten diferentes motores de base de datos.
| Nombre en SQL Server y Azure SQL Managed Instance | Nombre en Azure SQL Database, SQL Database en Fabric e Instancia administrada de Azure SQL |
|---|---|
sys.server_event_session_actionssys.server_event_session_eventssys.server_event_session_fieldssys.server_event_session_targetssys.server_event_sessions |
sys.database_event_session_actionssys.database_event_session_eventssys.database_event_session_fieldssys.database_event_session_targetssys.database_event_sessions |
Contenido relacionado
- Creación de una sesión de eventos con un destino de event_file en Azure Storage
- Destinos de eventos extendidos
- sys.server_event_sessions (Transact-SQL)
- sys.dm_xe_objects (Transact-SQL)
- sys.dm_xe_object_columns (Transact-SQL)
- ALTER EVENT SESSION (Transact-SQL)
- SESIÓN DE EVENTOS DE ABANDONO (Transact-SQL)