SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待信息的增强

在SQLServer中,利用扩展事件可获取Session级等待信息,而SQLServer 2016对此功能进行了进一步增强。

SQL Server中利用扩展事件获取Session级别等待信息及SQL Server 2016的增强功能解析

技术内容:

SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待信息的增强

在数据库性能调优过程中,了解Session级别的等待信息至关重要,通过获取这些信息,我们可以诊断并解决与数据库性能相关的问题,在SQL Server中,可以使用扩展事件(Extended Events)来捕获Session级别的等待信息,本文将介绍如何在SQL Server中使用扩展事件获取Session级别的等待信息,并探讨SQL Server 2016中对这一功能的增强。

扩展事件简介

扩展事件是SQL Server提供的一种轻量级性能监控工具,用于收集数据库引擎的操作数据,它具有以下优点:

1、性能开销较低:扩展事件在捕获数据时对系统性能的影响较小。

2、灵活性:扩展事件可以自定义事件、数据列和筛选条件,方便用户根据需求进行监控。

3、可扩展性:扩展事件支持多种目标输出,如环形缓冲区、文件、Windows事件日志等。

使用扩展事件获取Session级别等待信息

1、创建扩展事件会话

SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待信息的增强

我们需要创建一个扩展事件会话,用于捕获Session级别的等待信息,以下是一个示例脚本:

-- 创建扩展事件会话
CREATE EVENT SESSION [Session_Wait_Info] ON SERVER 
ADD EVENT sqlserver.session_wait(
    ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_id,sqlserver.plan_handle,sqlserver.session_id,sqlserver.sql_text)
    WHERE ([package0].[equal_uint64]([sqlserver].[session_id],(131072)) AND [sqlserver].[is_system]=(0))
),
ADD EVENT sqlserver.sql_statement_completed(
    ACTION(sqlserver.client_app_name,sqlserver.client_hostname,sqlserver.database_id,sqlserver.plan_handle,sqlserver.session_id,sqlserver.sql_text)
    WHERE ([package0].[equal_uint64]([sqlserver].[session_id],(131072)) AND [sqlserver].[is_system]=(0))
)
ADD TARGET package0.ring_buffer(SET max_memory=(10240))
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=30 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF)
GO
-- 启用扩展事件会话
ALTER EVENT SESSION [Session_Wait_Info] ON SERVER STATE = START
GO

2、查询扩展事件数据

在创建并启用扩展事件会话后,我们可以通过以下方式查询捕获的Session级别等待信息:

-- 查询扩展事件数据
SELECT
    te.name AS EventName,
    te.event_id AS EventID,
    OBJECT_NAME(te.object_id) AS ObjectName,
    te.post_time AS PostTime,
    te.duration AS Duration,
    te.cpu_time AS CPU_Time,
    te.reads AS Reads,
    te.writes AS Writes,
    te.logical_reads AS LogicalReads,
    t.target_name AS TargetName,
    JSON_VALUE(data, '$.client_app_name') AS ClientAppName,
    JSON_VALUE(data, '$.client_hostname') AS ClientHostName,
    JSON_VALUE(data, '$.database_id') AS DatabaseID,
    JSON_VALUE(data, '$.session_id') AS SessionID,
    JSON_VALUE(data, '$.sql_text') AS SQLText
FROM
    sys.dm_xe_session_targets t
JOIN
    sys.dm_xe_sessions s ON t.event_session_address = s.address
JOIN
    sys.dm_xe_session_events e ON s.address = e.event_session_address
JOIN
    sys.dm_xe_package_event_mappings pem ON e.event_name = pem.event_name
JOIN
    sys.dm_xe_objects te ON pem.object_name = te.name
JOIN
    sys.dm_xe_object_columns tec ON te.object_id = tec.object_id
JOIN
    sys.dm_xe_session_event_actions sea ON e.event_id = sea.event_id
JOIN
    sys.dm_xe_session_events dee ON sea.event_session_address = dee.event_session_address
OUTER APPLY
    sys.dm_xe_session_object_columns_data(dee.event_id, tec.column_id, t.target_name) AS data
WHERE
    s.name = 'Session_Wait_Info'
ORDER BY
    te.post_time DESC
GO

3、停止并删除扩展事件会话

在完成性能分析后,我们可以停止并删除扩展事件会话,以避免持续的性能开销:

-- 停止扩展事件会话
ALTER EVENT SESSION [Session_Wait_Info] ON SERVER STATE = STOP
GO
-- 删除扩展事件会话
DROP EVENT SESSION [Session_Wait_Info]
GO

SQL Server 2016中的增强功能

在SQL Server 2016中,微软对Session级别等待信息的功能进行了增强,以下是一些重要的改进:

SQLServer中使用扩展事件获取Session级别的等待信息及SQLServer 2016中Session级别等待信息的增强

1、增加了新的等待类型:SQL Server 2016引入了更多等待类型,帮助用户更准确地诊断性能问题。

2、改进了等待信息的列:在扩展事件中,SQL Server 2016增加了一些新的列,如CPU时间、读取次数、写入次数和逻辑读取次数,以便更好地了解资源消耗。

3、等待资源信息:SQL Server 2016扩展事件提供了更多关于等待资源的信息,例如等待的锁类型、等待的数据库文件等。

通过使用扩展事件,我们可以方便地获取SQL Server中Session级别的等待信息,从而诊断并解决性能问题,SQL Server 2016在扩展事件方面进行了增强,提供了更多等待类型和详细信息,帮助用户更好地了解数据库引擎的内部操作,掌握扩展事件的使用和SQL Server 2016中的增强功能,对于数据库性能调优具有重要意义。

原创文章,作者:K-seo,如若转载,请注明出处:https://www.kdun.cn/ask/322826.html

Like (0)
Donate 微信扫一扫 微信扫一扫
K-seo的头像K-seoSEO优化员
Previous 2024-02-18 19:21
Next 2024-02-18 19:25

相关推荐

  • SqlServer编写数据库表的操作方式(建库、建表、修改语句)

    创建数据库:CREATE DATABASE 数据库名;,创建表:CREATE TABLE 表名 (列名1 数据类型, 列名2 数据类型, ...);,修改表:ALTER TABLE 表名 ADD/ALTER COLUMN 列名 数据类型。

    2024-05-21
    099
  • sqlserver sa账户被禁用

    在SQL Server 2008中,SA账户是系统管理员账户,具有最高的权限,如果SA账户被禁用,其他用户将无法连接到数据库服务器,在这种情况下,我们需要采取一些措施来快速恢复连接,本文将介绍一种快速解决方法,帮助大家解决这个问题。使用操作系统账户登录1、尝试使用操作系统账户登录到服务器,如果您的操作系统是Windows Server……

    2024-03-15
    089
  • sqlserver如何删除表中一行数据

    在SQL Server中,可以使用DELETE语句删除表中的一行数据。首先需要确定要删除的数据的条件,然后使用DELETE语句指定条件进行删除。,,``sql,DELETE FROM 表名 WHERE 条件;,``

    2024-05-21
    0114
  • python中response.text怎么用

    在Python中,response.text是一个非常重要的属性,它通常用于处理HTTP请求的响应,当我们使用诸如requests库发起HTTP请求时,服务器会返回一个响应对象,该对象包含了服务器返回的所有信息,如状态码、头部信息和响应体等,而response.text就是响应体的内容,它是一个字符串,包含了服务器返回的实际数据。本文……

    2024-01-17
    0339
  • YxVM 新加坡VPS 测试记录( free bgp session / unlock stream media)

    YxVM 新加坡VPS 测试记录在互联网高速发展的今天,虚拟专用服务器(VPS)已经成为了许多企业和个人的首选,VPS是一种将一台物理服务器分割成多个虚拟服务器的技术,每个虚拟服务器都有自己的操作系统和资源,可以独立运行,YxVM是一家提供全球VPS服务的公司,其新加坡VPS因其稳定性、速度和性价比而受到许多用户的青睐,本文将对YxV……

    2023-12-28
    0134
  • iscsi无法断开连接

    您好,iscsi无法断开连接可能是由于多种原因引起的。以下是一些可能的解决方法:,,1. 检查网络连接是否正常。,2. 检查iSCSI目标是否已关闭。,3. 检查iSCSI客户端是否已关闭。,4. 检查iSCSI服务是否正在运行。,5. 尝试使用命令行工具iscsiadm来断开连接。

    2024-01-03
    0307

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

免备案 高防CDN 无视CC/DDOS攻击 限时秒杀,10元即可体验  (专业解决各类攻击)>>点击进入