當前位置:
首頁 > 知識 > 常用傻瓜式SQL Server語句,優化資料庫

常用傻瓜式SQL Server語句,優化資料庫

基本都是網路收集來的,有些挺好用,例如查詢是否缺索引的語句。

查找出什麼語句占內存最高,針對占內存高的語句進行優化

SELECT SS.SUM_EXECUTION_COUNT,

T.TEXT,

SS.SUM_TOTAL_ELAPSED_TIME,

SS.SUM_TOTAL_WORKER_TIME,

SS.SUM_TOTAL_LOGICAL_READS,

SS.SUM_TOTAL_LOGICAL_WRITES

FROM (SELECT S.PLAN_HANDLE,

SUM(S.EXECUTION_COUNT)SUM_EXECUTION_COUNT,

SUM(S.TOTAL_ELAPSED_TIME)SUM_TOTAL_ELAPSED_TIME,

SUM(S.TOTAL_WORKER_TIME)SUM_TOTAL_WORKER_TIME,

SUM(S.TOTAL_LOGICAL_READS)SUM_TOTAL_LOGICAL_READS,

SUM(S.TOTAL_LOGICAL_WRITES)SUM_TOTAL_LOGICAL_WRITES

FROM SYS.DM_EXEC_QUERY_STATS S

GROUP BY S.PLAN_HANDLE

) AS SS

CROSS APPLY SYS.dm_exec_sql_text(SS.PLAN_HANDLE)T

ORDER BY SUM_TOTAL_LOGICAL_READS DESC

選取前10個最耗CPU時間的會話

SELECT TOP 10

[session_id],

[request_id],

[start_time] AS "開始時間",

[status] AS "狀態",

[command] AS "命令",

dest.[text] AS "sql語句",

DB_NAME([database_id]) AS "資料庫名",

[blocking_session_id] AS "正在阻塞其他會話的會話ID",

[wait_type] AS "等待資源類型",

[wait_time] AS "等待時間",

[wait_resource] AS "等待的資源",

[reads] AS "物理讀次數",

[writes] AS "寫次數",

[logical_reads] AS "邏輯讀次數",

[row_count] AS "返回結果行數"

FROM sys.[dm_exec_requests] AS der

CROSS APPLY

sys.[dm_exec_sql_text](der.[sql_handle]) AS dest

WHERE [session_id]>50 AND DB_NAME(der.[database_id])="gposdb"

ORDER BY [cpu_time] DESC

執行下面語句就會顯示出會話中有多少個worker在等待

SELECT TOP 10

[session_id],

[request_id],

[start_time] AS "開始時間",

[status] AS "狀態",

[command] AS "命令",

dest.[text] AS "sql語句",

DB_NAME([database_id]) AS "資料庫名",

[blocking_session_id] AS "正在阻塞其他會話的會話ID",

der.[wait_type] AS "等待資源類型",

[wait_time] AS "等待時間",

[wait_resource] AS "等待的資源",

[dows].[waiting_tasks_count] AS "當前正在進行等待的任務數",

[reads] AS "物理讀次數",

[writes] AS "寫次數",

[logical_reads] AS "邏輯讀次數",

[row_count] AS "返回結果行數"

FROM sys.[dm_exec_requests] AS der

INNER JOIN [sys].[dm_os_wait_stats] AS dows

ON der.[wait_type]=[dows].[wait_type]

CROSS APPLY

sys.[dm_exec_sql_text](der.[sql_handle]) AS dest

WHERE [session_id]>50

ORDER BY [cpu_time] DESC

查詢CPU佔用高的語句

SELECT TOP 10

total_worker_time/execution_count AS avg_cpu_cost, plan_handle,

execution_count,

(SELECT SUBSTRING(text, statement_start_offset/2 + 1,

(CASE WHEN statement_end_offset = -1

THEN LEN(CONVERT(nvarchar(max), text)) * 2

ELSE statement_end_offset

END - statement_start_offset)/2)

FROM sys.dm_exec_sql_text(sql_handle)) AS query_text

FROM sys.dm_exec_query_stats

ORDER BY [avg_cpu_cost] DESC

查詢缺失索引

SELECT

DatabaseName = DB_NAME(database_id)

,[Number Indexes Missing] = count(*)

FROM sys.dm_db_missing_index_details

GROUP BY DB_NAME(database_id)

ORDER BY 2 DESC;

查詢缺失索引詳細語句

SELECT TOP 10

[Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans),0)

, avg_user_impact

, TableName = statement

, [EqualityUsage] = equality_columns

, [InequalityUsage] = inequality_columns

, [Include Cloumns] = included_columns

FROM sys.dm_db_missing_index_groups g

INNER JOIN sys.dm_db_missing_index_group_stats s

ON s.group_handle = g.index_group_handle

INNER JOIN sys.dm_db_missing_index_details d

ON d.index_handle = g.index_handle

ORDER BY [Total Cost] DESC;

常用傻瓜式SQL Server語句,優化資料庫

Collage of Feng Shui destructive cycle with five

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 程序員小新人學習 的精彩文章:

orb_slam整體編程思路及代碼解析
一個兩年的程序員,面5家斬獲點我達,網易offer的面試總結

TAG:程序員小新人學習 |