Sql-Server-2012

查看查詢執行期間獲取的鎖 (SQL Server)

  • May 13, 2020

查詢執行計劃預設不顯示鎖定詳細資訊,是否可以查看在執行查詢期間獲取的鎖定以及類型?

是否可以查看在執行查詢期間獲取的鎖以及類型?

是的,對於確定鎖,

  1. 您可以使用**beta_lockinfoErland Sommarskog**

beta_lockinfo是一個儲存過程,它提供有關程序和它們持有的鎖以及它們的活動事務的資訊。beta_lockinfo旨在盡可能多地收集有關阻塞情況的資訊,以便在情況危急時立即找到罪魁禍首並殺死阻塞程序。然後,您可以坐下來分析輸出,beta_lockinfo以了解阻塞情況是如何產生的,並找出要採取哪些措施來防止這種情況再次發生。輸出beta_lockinfo顯示所有活動程序以及帶鎖的被動程序、它們鎖定了哪些對象、它們最後送出的命令以及它們正在執行的語句。您還可以獲得目前語句的查詢計劃。通常,您執行beta_lockinfo直接查看輸出,但也有將數據保存到表中的**存檔模式。**如果您希望有人beta_lockinfo在您自己無權訪問的站點上向您發送輸出,這並不是最不有用的。

  1. 另一種方法是**sp_whoIsActiveAdam Machanic**使用@get_locks = 1
EXEC sp_WhoIsActive 
@filter = '', 
@filter_type = 'session', 
@not_filter = '', 
@not_filter_type = 'session', 
@show_own_spid = 0, 
@show_system_spids = 0, 
@show_sleeping_spids = 1, 
@get_full_inner_text = 0, 
@get_plans = 1, 
@get_outer_command = 1, 
@get_transaction_info = 0, 
@get_task_info = 1, 
@get_locks = 1,   ----------> 1 = ON (get lock info); 0 = OFF
@get_avg_time = 0, 
@get_additional_info = 0, 
@find_block_leaders = 0, 
@delta_interval = 0, 
@output_column_list = '[dd%][session_id][sql_text][sql_command][login_name][wait_info][tasks][tran_log%][cpu%][temp%][block%][reads%][writes%][context%][physical%][query_plan][locks][%]', 
@sort_order = '[start_time] ASC', 
@format_output = 1, 
@destination_table = '', 
@return_schema = 0, 
@schema = NULL, 
@help = 0

引用自:https://dba.stackexchange.com/questions/99317