SQL Server常用的效能診斷語句

來源:互聯網
上載者:User

標籤:

/*常規伺服器動態管理對象包括:dm_db_*:資料庫和資料庫物件dm_exec_*:執行使用者代碼和關聯的串連dm_os_*:記憶體、鎖定和時間安排dm_tran_*:事務和隔離dm_io_*:網路和磁碟的輸入/輸出*/--- 運行下面的 DMV 查詢以查看 CPU、排程器記憶體和緩衝池資訊。select     cpu_count,    hyperthread_ratio,    scheduler_count,    physical_memory_in_bytes / 1024 / 1024 as physical_memory_mb,    virtual_memory_in_bytes / 1024 / 1024 as virtual_memory_mb,    bpool_committed * 8 / 1024 as bpool_committed_mb,    bpool_commit_target * 8 / 1024 as bpool_target_mb,    bpool_visible * 8 / 1024 as bpool_visible_mbfrom sys.dm_os_sys_info--- 高I/O開銷的查詢  Identifying Most Costly Queries by I/O SELECT TOP 10       [Average IO] = (total_logical_reads + total_logical_writes) / qs.execution_count    , [Total IO] = (total_logical_reads + total_logical_writes)    , [Execution count] = qs.execution_count    , [Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,              (CASE WHEN qs.statement_end_offset = -1                 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2               ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)             ,[Parent Query] = qt.text    , DatabaseName = DB_NAME(qt.dbid)FROM sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qtORDER BY [Average IO] DESC;--- 高CPU開銷的查詢 Identifying Most Costly Queries by CPU SELECT TOP 10       [Average CPU used] = total_worker_time / qs.execution_count    , [Total CPU used] = total_worker_time    , [Execution count] = qs.execution_count    , [Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,              (CASE WHEN qs.statement_end_offset = -1                 THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2               ELSE qs.statement_end_offset END - qs.statement_start_offset)/2)    , [Parent Query] = qt.text    , DatabaseName = DB_NAME(qt.dbid)FROM sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qtORDER BY [Average CPU used] DESC;--- 高開銷的缺失索引 Cost of Missing Indexes 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_columnsFROM        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_handleORDER BY [Total Cost] DESC;--- 最常執行的查詢 Identifying Queries that Execute Most Often SELECT TOP 10  [Execution count] = execution_count,[Individual Query] = SUBSTRING (qt.text,qs.statement_start_offset/2,          (CASE WHEN qs.statement_end_offset = -1             THEN LEN(CONVERT(NVARCHAR(MAX), qt.text)) * 2           ELSE qs.statement_end_offset END - qs.statement_start_offset)/2),[Parent Query] = qt.text,DatabaseName = DB_NAME(qt.dbid)FROM sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qtORDER BY [Execution count] DESC;--- 重複編譯的查詢(plan_generation_num 指示該查詢已重新編譯的次數)select top 25      sql_text.text,      sql_handle,      plan_generation_num,      execution_count,      dbid,      objectid from sys.dm_exec_query_stats a      cross apply sys.dm_exec_sql_text(sql_handle) as sql_textwhere plan_generation_num > 1order by plan_generation_num desc--- 伺服器等待的原因 SQL Query Records Causes of Wait Times SELECT TOP 10 [Wait type] = wait_type, [Wait time (s)] = wait_time_ms / 1000, [% waiting] = CONVERT(DECIMAL(12,2), wait_time_ms * 100.0                / SUM(wait_time_ms) OVER())FROM sys.dm_os_wait_statsWHERE wait_type NOT LIKE ‘%SLEEP%‘ ORDER BY wait_time_ms DESC;--- 讀和寫 Identifying the Most Reads and WritesSELECT TOP 10         [Total Reads] = SUM(total_logical_reads)        ,[Execution count] = SUM(qs.execution_count)        ,DatabaseName = DB_NAME(qt.dbid)FROM sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qtGROUP BY DB_NAME(qt.dbid)ORDER BY [Total Reads] DESC;SELECT TOP 10         [Total Writes] = SUM(total_logical_writes)        ,[Execution count] = SUM(qs.execution_count)        ,DatabaseName = DB_NAME(qt.dbid)FROM sys.dm_exec_query_stats qsCROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qtGROUP BY DB_NAME(qt.dbid)ORDER BY [Total Writes] DESC;--- 運行下面的 DMV 查詢以尋找 I/O 閂鎖等候統計資訊。select wait_type, waiting_tasks_count, wait_time_ms, signal_wait_time_ms, wait_time_ms / waiting_tasks_countfrom sys.dm_os_wait_stats  where wait_type like ‘PAGEIOLATCH%‘  and waiting_tasks_count > 0order by wait_type--- 查看資料庫的阻塞資訊select * from sysprocesses a where a.program_name = ‘.Net SqlClient Data Provider‘ and blocked != 0---查看所有會話的 找到活動事務對應的執行語句select  dc.session_id,        ds.login_name,        ds.login_time,                       dc.connect_time,        dc.net_transport,        dc.client_net_address,         ds.host_name,        ds.program_name,        case ds.status  when ‘sleeping‘ then ‘睡眠 - 當前沒有運行任何請求 ‘                        when ‘running‘  then ‘正在運行 - 當前正在運行一個或多個請求 ‘                        when ‘Dormancy‘ then ‘休眠 – 會話因串連池而被重設,並且現在處於登入前狀態‘                        when ‘Pre-connected‘ then ‘預串連 - 會話在資源管理員分類器中‘                        end as status ,        ds.cpu_time as cpu_time_ms,        ds.memory_usage*8 as memory_kb,        ds.total_elapsed_time as total_elapsed_time_ms,        case ds.transaction_isolation_level when 0 then ‘未指定‘                                            when 1 then ‘未提交讀取‘                                            when 2 then ‘已提交讀取‘                                            when 3 then ‘可重複‘                                            when 4 then ‘可序列化‘                                            when 5 then ‘快照‘                                        end ‘會話的交易隔離等級‘,         dt.text              from sys.dm_exec_connections  dc        --執行串連,最近執行的查詢資訊  cross apply sys.dm_exec_sql_text(dc.most_recent_sql_handle) dtjoin sys.dm_exec_sessions ds  on dc.session_id=ds.session_idwhere ds.login_name= ‘LCGS609999‘  --where ds.program_name = ‘.Net SqlClient Data Provider‘ORDER BY dt.text--kill 53;-- 檢查分析死結資訊1、使用sql profiler 抓取死結鏈及圖2、跟蹤分析SQL日誌dbcc traceon (1204, 3605, -1)godbcc tracestatus(-1)go參考資料:http://support.microsoft.com/zh-cn/kb/832524-- 檢查分析阻塞資訊WHILE 1=1BEGIN   EXEC master.dbo.sp_blocker_pss80        -- or sp_blocker_pss08   -- Or for fast mode    -- EXEC master.dbo.sp_blocker_pss80 @fast=1   -- Or for latch mode    -- EXEC master.dbo.sp_blocker_pss80 @latch=1   WAITFOR DELAY ‘00:00:15‘ENDGOcmd執行命令:osql -E -Sserver -icheckblk.sql -ocheckblk.out -w2000參考資料:http://support.microsoft.com/zh-cn/kb/271509揭開隱藏資料的面紗,最佳化應用程式效能https://msdn.microsoft.com/zh-cn/magazine/cc135978.aspx

  

SQL Server常用的效能診斷語句

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.