Azure数据库中的sys.event_log选择查询超时

时间:2016-02-19 03:36:46

标签: sql-server azure azure-sql-database

我需要在生产中诊断一些问题,但我无法查询event_log,查询超时。 我试图在Azure数据库中的Master数据库上执行以下查询,

select * from sys.event_log where start_time>='2016-02-20:12:00:00' and end_time<='2016-02-20 12:00:00' 

查询开始执行,运行超过8分钟并取消查询执行。我很确定在这个数据库服务器中,eventlog必须是一个非常大的事件日志。如何克服这种情况并查询sys.event_log表? 即使前10个查询也超时。需要一些帮助!

1 个答案:

答案 0 :(得分:0)

查询我跑了,这可能也会有时间,只是继续尝试(第3次为我工作)

SELECT *
  ,CAST(event_data AS XML).value('(/event/@timestamp)[1]', 'datetime2') AS TIMESTAMP
  ,CAST(event_data AS XML).value('(/event/data[@name="error"]/value)[1]', 'INT') AS error
  ,CAST(event_data AS XML).value('(/event/data[@name="state"]/value)[1]', 'INT') AS STATE
  ,CAST(event_data AS XML).value('(/event/data[@name="is_success"]/value)[1]', 'bit') AS is_success
  ,CAST(event_data AS XML).value('(/event/data[@name="database_name"]/value)[1]', 'sysname') AS database_name
FROM sys.fn_xe_telemetry_blob_target_read_file('el', NULL, NULL, NULL)
WHERE object_name = 'database_xml_deadlock_report'

这在xml数据字段中提供了非常有用的细节。 使用XML查看器查看详细信息。我使用了XMLGrid.

它将显示两个进程(死锁受害者和获胜者)是什么,好消息是它为您提供了这些进程试图执行的SQL语句。

在我的情况下,两个进程试图更新一个数据表,但是两个不同的行。 Winner进程使用的是SQL&#34; Merge&#34;这会为行更新创建表锁。解决方案是我更改了Merge查询以使用SQL UPDATE。