Sql-Server
帶有隱式事務的 SELECT 會阻止 VersionStore 清理嗎?
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 語句可以阻止版本儲存清理。