car*_*reo 5 performance sql-server sql-server-2008-r2
我有一个数据库 Microsoft SQL Server 2008r2。我有一些不同编程语言的应用程序。
我想记录所有超过 X 秒的查询。
我想我应该创建一个事件会话,但我对它们的理解不足以完成这个特定的任务。理想的答案是包含一个包含活动会话示例的在线教程的链接;即使是一本书推荐也会去。
几年前我在微软做过6231A“维护一个Microsoft SQL Server数据库”的培训,但此后我就没有实践过;课件涵盖了论点,但我无法理解。
您正在寻找的语法将与此非常相似:
create event session longrunning_statements on server
add event sqlserver.sql_statement_completed
(
where (duration > 5000000)
)
add target package0.asynchronous_file_target
(Set filename='c:\capture\xe_longrunning_statement.xel',
metadatafile='c:\capture\xe_longrunning_statement.xem');
alter event sesession longrunning_statements on server state=start;
Run Code Online (Sandbox Code Playgroud)
这将设置一个事件会话,它将跟踪需要超过 5 秒才能完成的 sql 语句。持续时间过滤器基于微秒顺便说一句。
如果您想将其限制为特定的数据库(在这种情况下,数据库 id=5 的 db,那么您可以将过滤器更改为:
where (duration > 5000000 and database_id=5)
Run Code Online (Sandbox Code Playgroud)
如果需要,还有许多其他过滤器可以将其与特定会话或用户联系起来。
此事件会话会将其结果记录到文件 ( c:\capture\xe_longrunning_statement.xel) 中,该文件可以使用如下fn_xe_file_target_read_file函数读入:
SELECT *
FROM
sys.fn_xe_file_target_read_file
(
'c:\capture\xe_longrunning_statement*.xel',
'c:\capture\xe_longrunning_statement.xem',
null,
null
);
Run Code Online (Sandbox Code Playgroud)
(请注意,我已将 2008R2 标准用于 tge xel/xem 文件并设置目标。2012 年略有不同,但此语法仍然有效)。文件名中的 * 是为了让函数知道您想要加载所有文件,如果它们因大小而翻转。
然后您需要通过您选择的 XML 工具解析数据。
完成捕获后,您可以按如下方式整理:
alter event session longrunning_statements on server state=stop;
drop event session longrunning_statements;
Run Code Online (Sandbox Code Playgroud)
最好的在线资源之一是 Jonathan Kehayais 的 31 天扩展事件 - https://www.sqlskills.com/blogs/jonathan/an-xevent-a-day-31-days-of-extended-events/ - 其中通过大量示例引导您了解该主题。
| 归档时间: |
|
| 查看次数: |
2023 次 |
| 最近记录: |