-
以下為MS SQLSERVER慢查詢排查方法:
SqlServer 使用sys.dm_exec_query_stats查看開銷較高的語句
SELECT TOP 10 total_worker_time / 1000 AS [自編譯以來執行所用的CPU時間總量(ms)], total_elapsed_time/1000 as [完成執行此計划所用的總時間], total_elapsed_time / execution_count/1000 as [平均完成執行此計划所用時間], execution_count as [上次編譯以來所執行的次數], creation_time as [編譯計划的時間], deqs.total_worker_time / deqs.execution_count / 1000 AS [平均使用CPU時間(ms)], last_execution_time AS [上次開始執行計划的時間], total_physical_reads [編譯后在執行期間所執行的物理讀取總次數], total_logical_reads/execution_count [平均邏輯讀次數], min_worker_time /1000 AS [單次執行期間所用的最小CPU時間(ms)], max_worker_time / 1000 AS [單次執行期間所用的最大 CPU 時間(ms)], SUBSTRING(dest.text, deqs.statement_start_offset / 2 + 1, (CASE WHEN deqs.statement_end_offset = -1 THEN DATALENGTH(dest.text) ELSE deqs.statement_end_offset END - deqs.statement_start_offset ) / 2 + 1) AS [執行SQL], dest.text as [完整SQL], db_name(dest.dbid) as [數據庫名稱], object_name(dest.objectid, dest.dbid) as [對象名稱] ,deqs.plan_handle [查詢所屬的已編譯計划] FROM sys.dm_exec_query_stats deqs WITH(NOLOCK) CROSS APPLY sys.dm_exec_sql_text(deqs.sql_handle) AS dest --平均使用CPU時間降序 ORDER BY (deqs.total_worker_time / deqs.execution_count / 1000) DESC --執行時間降序 --ORDER BY total_elapsed_time / execution_count DESC;
平均使用CPU時間降序
執行時間降序
查看執行計划
select * from sys.dm_exec_query_plan(0x05000A0045E84551103903112400000001000000000000000000000000000000000000000000000000000000)
-
以下為MYSQL優化技巧: