2012-06-20 28 views
8

Tôi đang chụp locks_lock_timeouts_greater_than_0 sự kiện bằng Sự kiện mở rộng trong SQL Server. Phiên sự kiện như sau:Làm cách nào để lấy chủ sở hữu và đối tượng bị khóa khỏi sự kiện locks_lock_timeouts_greater_than_0 trong 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) 

Làm cách nào để xác định đối tượng nào bị khóa và ai đang khóa?

CẬP NHẬT: Tôi cần điều này cho SQL Server 2008. Cách gỡ lỗi thời gian chờ khóa trên phiên bản trước năm 2012?

Trả lời

2

Có vẻ như thông tin bạn muốn không bị sự kiện này chụp.

Bạn có thể xem những gì các lĩnh vực có sẵn cho một sự kiện với:

select p.name package_name, o.name event_name, c.name event_field, c.type_name field_type, c.column_type column_type 
from sys.dm_xe_objects o 
join sys.dm_xe_packages p 
     on o.package_guid = p.guid 
join sys.dm_xe_object_columns c 
     on o.name = c.object_name 
where o.object_type = 'event' 
    AND o.name = 'locks_lock_timeouts_greater_than_0' 
order by package_name, event_name 

kết quả là:

sqlserver locks_lock_timeouts_greater_than_0 ID uint16 readonly 
sqlserver locks_lock_timeouts_greater_than_0 UUID guid_ptr readonly 
sqlserver locks_lock_timeouts_greater_than_0 VERSION uint8 readonly 
sqlserver locks_lock_timeouts_greater_than_0 CHANNEL etw_channel readonly 
sqlserver locks_lock_timeouts_greater_than_0 KEYWORD keyword_map readonly 
sqlserver locks_lock_timeouts_greater_than_0 count uint64 data 
sqlserver locks_lock_timeouts_greater_than_0 lock_type uint64 data 

Tuy nhiên, trong SQL 2012 sự kiện này đã được thay thế (http://msdn.microsoft.com/en-us/library/ms144262.aspx) bởi lock_timeout_greater_than_0 trong đó có bộ trường sau đây

sqlserver lock_timeout_greater_than_0 UUID guid_ptr readonly 
sqlserver lock_timeout_greater_than_0 VERSION uint8 readonly 
sqlserver lock_timeout_greater_than_0 CHANNEL etw_channel readonly 
sqlserver lock_timeout_greater_than_0 KEYWORD keyword_map readonly 
sqlserver lock_timeout_greater_than_0 collect_resource_description boolean customizable 
sqlserver lock_timeout_greater_than_0 collect_database_name boolean customizable 
sqlserver lock_timeout_greater_than_0 resource_type lock_resource_type data 
sqlserver lock_timeout_greater_than_0 mode lock_mode data 
sqlserver lock_timeout_greater_than_0 owner_type lock_owner_type data 
sqlserver lock_timeout_greater_than_0 transaction_id int64 data 
sqlserver lock_timeout_greater_than_0 database_id uint32 data 
sqlserver lock_timeout_greater_than_0 lockspace_workspace_id ptr data 
sqlserver lock_timeout_greater_than_0 lockspace_sub_id uint32 data 
sqlserver lock_timeout_greater_than_0 lockspace_nest_id uint32 data 
sqlserver lock_timeout_greater_than_0 resource_0 uint32 data 
sqlserver lock_timeout_greater_than_0 resource_1 uint32 data 
sqlserver lock_timeout_greater_than_0 resource_2 uint32 data 
sqlserver lock_timeout_greater_than_0 object_id int32 data 
sqlserver lock_timeout_greater_than_0 associated_object_id uint64 data 
sqlserver lock_timeout_greater_than_0 duration uint64 data 
sqlserver lock_timeout_greater_than_0 resource_description unicode_string data 
sqlserver lock_timeout_greater_than_0 database_name unicode_string data 

Từ đây tôi đã là abl e để lấy được cơ sở dữ liệu (database_id) và trong bảng trường hợp của tôi (khác nhau trong object_id, associated_object_id, resource_0) từ các Id của chúng.

Tôi không thấy một cách rõ ràng để tìm ai đã khóa đối tượng khỏi dữ liệu được sự kiện này nắm bắt.

EDIT - xem SQL Server Lock Timeout Exceeded Deleting Records in a Loop để biết ví dụ về cách sử dụng sp_lock và sp_who2 để gỡ lỗi nguyên nhân của sự kiện khóa thời gian chờ.

+0

+1 Cảm ơn bạn đã thông tin về những thay đổi trong SQL Server 2012. Thật không may, tôi cần thông tin này trên SQL Server 2008. Có thể, ai đó sẽ tìm thấy giải pháp cho SQL Server 2008. –

+0

Tại sao bạn đặt thời gian chờ khóa, thông thường nó sẽ chờ một khoảng thời gian không giới hạn nếu không có bế tắc? – bkr

+0

Ứng dụng này có giao diện người dùng. –

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