Sql-Server

帶有隱式事務的 SELECT 會阻止 VersionStore 清理嗎?

  • March 30, 2021

JDBC 驅動程序通常在客戶端執行的每個查詢中設置隱式事務。

我發現許多 SELECT 語句處於掛起狀態,使用 Version Store 將隱式事務設置為 ON 48 小時。

這些選擇語句並沒有佔用太多 tempdb 空間,但我想知道這是否會阻止版本清理,即使生成版本儲存行的 UPDATE / DELETE / INSERT 語句已經送出。(許多數據庫使用讀送出的快照隔離級別)

在我終止會話後,版本儲存空間變得空閒。

我使用帶有以下查詢的版本儲存找到了 select 語句:

SELECT 
      db_name(spu.database_id) as database_name,
      ast.session_id, 
      ast.transaction_id, 
      ast.transaction_sequence_num, 
      ast.elapsed_time_seconds,
      b.program_name, 
      b.open_tran, 
      b.status,
      ses.row_count,
      (spu.user_objects_alloc_page_count * 8) AS user_objects_kb,
      (spu.user_objects_dealloc_page_count * 8) AS user_objects_deallocated_kb,
      (spu.internal_objects_alloc_page_count * 8) AS internal_objects_kb,
      (spu.internal_objects_dealloc_page_count * 8) AS internal_objects_deallocated_kb,
      loginame,
      last_request_start_time,
      last_request_end_time,
      cmd,
      lastwaittype
  FROM sys.dm_tran_active_snapshot_database_transactions ast
     JOIN sys.dm_exec_sessions ses ON ses.session_id = ast.session_id
     JOIN sys.dm_db_session_space_usage spu ON spu.session_id = ses.session_id
     JOIN sys.sysprocesses b on ast.session_id = b.spid
  ORDER BY elapsed_time_seconds DESC

我在這個影片中找到了答案:

在 SQL Server 中使用 Perfmon 監控快照隔離

是的,帶有開放事務的 SELECT 語句可以阻止版本儲存清理。

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