博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用Extended Events收集错误信息
阅读量:6763 次
发布时间:2019-06-26

本文共 2053 字,大约阅读时间需要 6 分钟。

扩展事件提供了一个轻量级的平台可以用来收集错误信息,方便DBA查看最近的数据库错误配合开发人员一起解决问题。

下面的例子我们创建extended event 会话来获取错误208, 2812,and 4121。这三个错误分别对应:Invalid object name, Could not find stored procedure, and Cannotfind either column or the user-defined function or aggregate. 可以根据扩展事件sqlserver.error_reported。我们获取下面的详细信息:

sqlserver.session_id 

sqlserver.sql_text 

sqlserver.client_app_name 

sqlserver.client_hostname 

sqlserver.database_id 

sqlserver.username

通过这些信息我们可以了解到是哪个应用出现的问题尽快解决,创建扩展事件会话使用下面的脚本:

CREATEEVENTSESSION exErrors ONSERVER -- Session Name

ADDEVENT sqlserver.error_reported -- Event wewant to capture

(

ACTION -- What contents to capture

(

sqlserver.session_id

,sqlserver.sql_text

,sqlserver.client_app_name

,sqlserver.client_hostname

,sqlserver.database_id

,sqlserver.username

)

-- Somepredicate or filter (here it is object not found error number)

WHERE (error = 208

OR error  = 2812

OR error  = 4121

)

)

ADDTARGET package0.ring_buffer

WITH (max_dispatch_latency = 5seconds); -- Thetarget

GO

ALTEREVENTSESSION exErrors ONSERVERSTATE = START

GO

 

查询错误信息的脚本:

 

WITH exErrors

AS (

SELECT CAST(target_data  ASxml) AS SessionData

FROMsys.dm_xe_session_targetsst

INNERJOINsys.dm_xe_sessions s ONs.address= st.event_session_address

WHERE name  ='exErrors'

)

SELECT

error.value('(@timestamp)[1]','datetime') as event_timestamp

,error.value('(data/value)[5]','varchar(max)') as [error_message]

,error.value('(data/value)[1]','int') as error

,error.value('(action/value)[3]','nvarchar(255)') AS client_app_name

,error.value('(action/value)[4]','nvarchar(255)') as client_hostname

,DB_NAME(error.value('(action/value)[5]','int')) AS database_name

,error.value('(action/value)[6]','nvarchar(128)') AS username

,error.value('(action/value)[2]','varchar(max)') as sql_text

,error.value('(action/value)[1]','int') as session_id

,error.value('(data/value)[4]','bit') as user_defined

FROM exErrors d

CROSSAPPLY SessionData.nodes('//RingBufferTarget/event')AS t(error)

WHERE error.value('@name','nvarchar(128)') ='error_reported';

结果如下:

SouthEast

 

本文转自 lzf328 51CTO博客,原文链接:

http://blog.51cto.com/lzf328/1363340
你可能感兴趣的文章
ajax中的异步机制导致的问题
查看>>
java质数判断
查看>>
Android JNI和NDK学习(03)--动态方式实现JNI(转)
查看>>
如何提升你的面试机会?
查看>>
如何在Kubernetes部署期间正确处理DB模式
查看>>
甲骨文11.9亿美元收云解决方案供应商Aconex,预计明年上半年完成
查看>>
利用 Universal Transformer,翻译将无往不利!
查看>>
Python 做图片清晰度识别
查看>>
硬核NeruIPS 2018最佳论文,一个神经了的常微分方程
查看>>
个推Node.js 微服务实践:基于容器的一站式命令行工具链
查看>>
Express源码学习-路由篇
查看>>
Android平台上图片/视频选择,编辑和压缩的一站式解决方案
查看>>
从零开始撸一个Fresco之总结
查看>>
我想把 FileProvider 聊的更透彻一些
查看>>
2018年8月Top 10 JavaScript开源项目
查看>>
手游开发如何选择后端服务
查看>>
开学季你最想要的这10本编程新书
查看>>
node中的http会了吗? 来手写一个属于自己的'cgp-server'静态服务
查看>>
守护客户数据价值:企业级NewSQL HTAP分布式云TBase架构详解
查看>>
Web3与智能合约交互实战
查看>>