常用傻瓜式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;
Collage of Feng Shui destructive cycle with five


※orb_slam整體編程思路及代碼解析
※一個兩年的程序員,面5家斬獲點我達,網易offer的面試總結
TAG:程序員小新人學習 |