Sql-Server

檢查分區消除是否有效

  • June 6, 2019

我在我們的 DEV/TEST 環境中的一張表上實現了分區,並修改了一些程序以在訪問該表時使用分區鍵。

如何驗證數據庫中是否確實發生了分區消除?

我試著用這個查詢檢查它。但是我只看到提到了“partitioned = true”,但沒有訪問多少個分區。

SELECT 
 eqs.execution_count,
 CAST((1.)*eqs.total_worker_time/eqs.execution_count AS NUMERIC(10,1)) AS avg_worker_time,
 eqs.last_worker_time,
 CAST((1.)*eqs.total_logical_reads/eqs.execution_count AS NUMERIC(10,1)) AS avg_logical_reads,
 eqs.last_logical_reads,
   (SELECT TOP 1 SUBSTRING(est.text,statement_start_offset / 2+1 , 
   ((CASE WHEN statement_end_offset = -1 
     THEN (LEN(CONVERT(nvarchar(max),est.text)) * 2) 
     ELSE statement_end_offset END)  
     - statement_start_offset) / 2+1))  
   AS sql_statement,
 qp.query_plan
FROM sys.dm_exec_query_stats AS eqs
CROSS APPLY sys.dm_exec_sql_text (eqs.sql_handle) AS est 
JOIN sys.dm_exec_cached_plans cp on 
 eqs.plan_handle=cp.plan_handle
CROSS APPLY sys.dm_exec_query_plan (cp.plan_handle) AS qp
WHERE est.text like '%<TABLE_NAME>%'
OPTION (RECOMPILE);

您是否有任何其他查詢可以幫助我確定我的數據庫中是否發生分區消除?

謝謝 !

羅尼。

使用擴展事件通過query_post_execution_showplan事件庫擷取實際執行計劃。創建會話時,請注意新會話嚮導中的以下警告:

query_post_execution_showplan

在執行 SQL 語句後發生。此事件返回實際查詢計劃的 XML 表示。使用此事件可能會產生顯著的性能成本,因此僅應在故障排除或在短時間內監視特定問題時使用它。

以下 T-SQL 將創建所需的擴展事件會話。不要在生產 SQL Server 上執行它,除非你想讓它慢一點。

CREATE EVENT SESSION [CapturePlans] ON SERVER 
ADD EVENT sqlserver.query_post_execution_showplan(
   ACTION(sqlserver.client_app_name,sqlserver.database_id,sqlserver.sql_text))
ADD TARGET package0.ring_buffer(SET max_memory=(2048))
WITH (STARTUP_STATE=OFF)
GO

ALTER EVENT SESSION [CapturePlans] ON SERVER STATE = START;

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