标签: extended-events

捕获SQL Server扩展会话中传递的参数值?

我已经设置了SQL Server扩展事件,以将特定数据库中的最后1000个失败查询捕获到环形缓冲区中:

Create Event Session [Errors] on Server
Add Event sqlserver.error_reported (
    Action(
        sqlos.task_time,
        sqlserver.sql_text
    )
    Where sqlserver.database_name=N'MyDatabase'
    And error_number<>5701 -- Ignore changed db context messages
)
Add target package0.ring_buffer(Set max_memory=102400)
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=ON
)
Go
Run Code Online (Sandbox Code Playgroud)

我现在可以像这样查询这些错误:

Select 
    xmldata = Cast(xet.target_data as xml) 
Into #rbd
From sys.dm_xe_session_targets xet 
Join sys.dm_xe_sessions xe ON (xe.address = xet.event_session_address)
Where xe.name='errors' and target_name='ring_buffer'

; With Errors as (
    Select 
        e.query('.').value('(/event/@timestamp)[1]', 'datetime') as "TimeStamp",
        e.query('.').value('(/event/data[@name="message"]/value)[1]', 'nvarchar(max)') …
Run Code Online (Sandbox Code Playgroud)

sql-server extended-events

17
推荐指数
1
解决办法
3203
查看次数

SQL Server 2008 - 捕获所有命中服务器的SQL语句

任何人都可以建议我们在运行Profiler之外捕获发送到SQL Server的所有SQL语句的选项吗?我知道有几种方法可以做到这一点,但我想确保我不会忽略某些东西,例如现有的DM视图等.

非常感谢.

sql-server profiler sql-server-2008 extended-events

9
推荐指数
1
解决办法
1万
查看次数

创建触发器以记录受影响的表的SQL?

我正在试图找出更新列值的内容,而我对应用程序知之甚少.快速浏览一下,我注意到大约90%的应用程序业务逻辑都是在数据库上处理的.毋庸置疑,SP,功能和触发器的深度是疯狂的.

我想在有问题的表上创建一个触发器,它将记录影响该表的SQL.可以使用什么SQL在正在更新的表的上下文中获取已执行的SQL?

详细信息:MS SQL Server 2008

谢谢!!

sql sql-server triggers sql-server-2008 extended-events

8
推荐指数
3
解决办法
1万
查看次数

如何从SQL Server中的locks_lock_timeouts_greater_than_0事件中获取所有者和锁定对象?

我正在locks_lock_timeouts_greater_than_0使用SQL Server中的扩展事件捕获事件.活动会议如下:

CREATE EVENT SESSION MyQuery ON SERVER
    ADD EVENT sqlserver.locks_lock_timeouts_greater_than_0
    (
        ACTION (sqlserver.sql_text, sqlserver.tsql_stack)
    )
    ADD TARGET package0.ring_buffer (SET max_memory = 4096)
    WITH (max_dispatch_latency = 1 seconds)
Run Code Online (Sandbox Code Playgroud)

如何确定锁定的对象以及当前锁定的对象?

更新:我需要这个用于SQL Server 2008.如何在2012年之前的版本上调试锁定超时?

t-sql sql-server locking sql-server-2008 extended-events

8
推荐指数
1
解决办法
1537
查看次数

如何清除 SQL Server 扩展事件事件文件

如何清除存储在文件中的SQL Server扩展事件

背景

SQL Server 扩展事件事件文件目标的文件存储在哪里?

我想删除几个月的日志文件;但 SQL Server 没有告诉我文件在哪里:

在此处输入图片说明

我会遵循 Microsoft 的 SQL Server 论坛上的建议:

清除文件目标中的事件?

如果不再需要,只需停止会话并删除 .xel 文件。

尝试#3

我尝试做任何值得他们的盐的用户界面设计师从一开始就创建的最明显的事情:右键单击事件文件目标,然后选择:

  • 清除
  • 删除
  • 清除
  • 空的

除了没有选择做任何这些明显的事情:

在此处输入图片说明

尝试#4

我还尝试进入Extended Events菜单,然后单击Clear Data。但是该选项莫名其妙地被禁用了:

在此处输入图片说明

尝试#5

我还尝试编写Extended Events Session脚本,以查看它存储文件的位置。但当然 SQL Server 团队没有帮助:

ADD TARGET package0.event_file(SET filename=N'Expensive Queries',max_file_size=(25),max_rollover_files=(4)),
Run Code Online (Sandbox Code Playgroud)

尝试#6

在 SQL Server Profiler 中。如果您想清除事件,请按下按钮以清除事件:

在此处输入图片说明

SQL Profiler 已弃用,它的替代品无法清除事件。


清除事件的方法是什么?

奖励阅读

sql-server extended-events

7
推荐指数
1
解决办法
6568
查看次数

连接记录

我希望 SQL Server 创建一个日志文件,记录所有(成功的)数据库登录/连接。日志应至少包含:

  • 连接客户端的IP地址和端口
  • 客户端的应用程序名称
  • 用户名
  • 数据库名称
  • 连接时间或适用的交易

看起来服务器跟踪可能可以捕获所有这些信息,但微软表示服务器跟踪已被弃用,取而代之的是扩展事件。

因此,我尝试通过扩展事件收集这些信息。对于我的测试,我使用 SQL Server 2017 Developer Edition(在 Windows 10 上的 Docker 容器中运行)和 SSMS v17.7。创建或查看扩展事件时,我以“sa”身份登录。

到目前为止,我已经能够通过扩展事件收集大部分信息。问题是收集客户端 IP 和端口。我可以单独获得任何一个部分,但不能同时获得两个部分。下面列出了我正在使用的 XEvent。列出两次的事实connection_accept并不是错误。SQL Server 实际上有两个名称完全相同的不同事件(!!!)。

  • Login:没有收集客户端 IP 或端口的选项(字段或操作)。至少它确实提供了client_hostname
  • Logout:没有收集客户端 IP 或端口的选项(字段或操作)。这也捕捉到了client_hostname
  • connection_accept
    • 收集客户端IP,但它掩盖了最低的八位字节(例如192.168.1.XX)!!!
    • 收集客户端端口!好的!
    • 不收集session_id,因此无法与Login事件关联Logout
    • 我指定了、和EVENT SESSION的集合,但这些字段/操作都不存在于收集的数据中。:(usernameclient_app_nameclient_hostname
  • connection_accept
    • 收集客户端端口,但不收集客户端IP!
    • 有sesstion_id,所以至少可以关联到LoginLogout
    • 注意:我还没有在野外捕获到这个特定事件,所以我对此没有进一步的评论。

这些事件都没有提供客户端的 IP 地址,但我会接受客户端主机名作为合理的替代。然而,获取端口号是一个真正的问题。端口号仅在connection_accept事件中找到,并且没有明显的方法将其与login具有主机名的事件关联起来。简而言之,扩展事件似乎根本无法提供这种基本的客户端 IP 和端口配对。我想相信我错了,因为这是如此基本的数据。对于我所忽略的内容的任何帮助或建议将不胜感激。

扩展事件DDL …

sql-server monitoring network-monitoring extended-events

6
推荐指数
1
解决办法
4805
查看次数

扩展事件 - 无法将对象添加到事件会话中

当我尝试运行扩展事件时:

CREATE EVENT SESSION [Loading] ON SERVER  
ADD EVENT sqlserver.sql_statement_completed(SET collect_statement=(1)) 
ADD TARGET package0.event_file(SET filename=N'C:\Users\user\Documents\test.xel',max_file_size=(10)) 
WITH (MAX_MEMORY=4096 KB,EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,MAX_DISPATCH_LATENCY=3 SECONDS,MAX_EVENT_SIZE=0 KB,MEMORY_PARTITION_MODE=NONE,TRACK_CAUSALITY=OFF,STARTUP_STATE=OFF) 
GO 
Run Code Online (Sandbox Code Playgroud)

在SQL Server 2016上,我得到:

目标"5B2DA06D-898A-43C8-9309-39BBBE93EBBD.package0.event_file"在初始化期间遇到配置错误.无法将对象添加到事件会话中.操作系统返回错误5:'访问被拒绝.'在创建文件'C:\ Users\user\Documents\test_0_131207679384970000.xel'时.(Microsoft SQL Server,错误:25602)

问题出在哪儿?我对C:\ Users\user\Documents有足够的权限.

sql-server extended-events

5
推荐指数
1
解决办法
1372
查看次数

SQL Server扩展事件没有较新的事件

我正在查询system_health会话并注意到并非所有事件都被返回.今天肯定没有什么死锁,但这些并不在输出中.

我遇到了这个连接文件但是从评论中已经在SQL Server 2008 SP2中解决了这个问题.但我的版本是SQL Server 2008 SP3 Standard.这里有一些更多的细节.

这是一个Bug还是我查错了?

<RingBufferTarget truncated="1" eventsPerSec="31291" processingTime="209" totalEventsProcessed="6540" eventCount="1947" droppedCount="0" memoryUsed="4193813">


SELECT  TOP 1 e.event.value('(@timestamp)[1]','datetime') AS MaxDate, GETDATE() Today
FROM 
( SELECT ( SELECT 
        CONVERT(xml, target_data) 
        FROM sys.dm_xe_session_targets st 
        JOIN sys.dm_xe_sessions s ON 
        s.address = st.event_session_address 
        WHERE s.name = 'system_health' 
        AND st.target_name = 'ring_buffer' 
        )AS [x] 
        FOR XML PATH(''), TYPE 
) AS the_xml(x) 
CROSS APPLY x.nodes('x/RingBufferTarget/event') e (event) 
ORDER BY MaxDate DESC

MaxDate                     Today
2013-01-09 20:05:31.853     2013-01-11 15:22:37.887
Run Code Online (Sandbox Code Playgroud)

sql-server-2008 extended-events

3
推荐指数
1
解决办法
524
查看次数