8

Tôi có một vai trò Windows Azure bao gồm hai trường hợp. Đôi khi, giao dịch sẽ không thành công với số SqlException bằng văn bản sauLàm thế nào để xác định một bế tắc trong SQL Azure?

Giao dịch (Quy trình ID) bị bế tắc trên tài nguyên khóa với một quy trình khác và đã được chọn làm nạn nhân bế tắc. Chạy lại giao dịch.

Bây giờ tôi đã Googled một lúc và đọc this post về xác định deadlocks bằng nhật ký SQL Server.

Vấn đề là ...

Làm cách nào để làm điều đó trong SQL Azure? Tôi sử dụng những công cụ nào để truy cập vào nội bộ của SQL Azure và nhận đủ dữ liệu?

+0

Nếu bạn không thể tìm thấy câu trả lời có thể chấp nhận được ở đây, vui lòng liên hệ trực tiếp với Microsoft. Microsoft đang rót rất nhiều tài nguyên vào Azure và hỗ trợ mà họ đang cung cấp cho các nhà phát triển Azure kể từ khi ông Guthrie tiếp quản khá ấn tượng. Nếu điều đó không thành công tôi sẽ giữ một mắt ra trên thread này và Azure MVP trực tiếp những người tôi biết để trả lời thread này như tôi muốn biết câu trả lời bản thân mình. – JSWork

Trả lời

2

Chạy truy vấn sau đây trên cơ sở dữ liệu "Thạc sĩ" trong SQL Azure db ,

select * from sys.event_log where event_type='deadlock' and database_name='<Databasename>'; 

có một vấn đề hiệu suất với truy vấn này, nếu nó bị timed out thử sau,

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' 

Cả hai truy vấn này đều có dữ liệu chi tiết ở định dạng XML liên quan đến các quy trình đang được thực thi. Chúc may mắn!

+0

Tôi không nghĩ rằng một trong các truy vấn này hoạt động trong v12. Đối với tôi truy vấn đầu tiên từ sys.event_log trả về các hàng, nhưng không có XML. Trên cùng một cơ sở dữ liệu truy vấn thứ hai trả về không có hàng nào. – yowl00

0

Bây giờ cơ sở dữ liệu Azure SQL hỗ trợ hai cách để nhận báo cáo xml bế tắc. Bạn có thể tạo một phiên XE có phạm vi db với sự kiện database_xml_deadlock_report để tự mình theo dõi hoặc bạn có thể sửa đổi cuộc gọi sys.fn_xe_telemetry_blob_target_read_file từ câu trả lời trước đó để sử dụng 'dl' thay vì 'el'. Deadlocks bây giờ được chuyển đến tập tin riêng của họ thay vì được trộn lẫn với các sự kiện đăng nhập.

Điều này MSDN article có thông tin mới nhất.

Các vấn đề liên quan