`
gwh_08
  • 浏览: 331969 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库性能调优查询

阅读更多
step1:===查看缺失的索引
SELECT t4.name,t1.[statement],t1.object_id, t2.user_seeks, t2.user_scans,
       t1.equality_columns, t1.inequality_columns,t1.included_columns,
       case 
          --when t1.equality_columns is null and charindex(',',t1.inequality_columns)=0 and t1.included_columns is null
          --    then   'create UNIQUE NONCLUSTERED INDEX IX_' + replace((replace((replace(t1.[statement],'[','_')),']','_')),'.','_') +'_'+ replace((replace((replace(isnull(t1.equality_columns,'1'),'[','_')),']','_')),'.','_') +'_' 
          --           +replace((replace((replace(isnull(t1.inequality_columns,'_2'),'[','_')),']','_')),'.','_') + ' ON '+ t1.[statement] + ' (' + t1.inequality_columns + ' ASC )'  
          when --t1.equality_columns is null and charindex(',',t1.inequality_columns)>0 and
              t1.included_columns is null
              then   'create  NONCLUSTERED INDEX IX_' + replace((replace((replace((replace(t1.[statement],'[','_')),']','_')),'.','_')),',','_') +'_'  
                     +replace(replace(replace(replace(replace(isnull(t1.equality_columns,'2'),' [',''),'[',''),'.',''),',',''),']','')
                     +replace((replace((replace((replace(isnull(t1.inequality_columns,'2'),'[','')),']','')),'.','')),',','_') + ' ON '+ t1.[statement] + ' (' + 
                       case  when t1.equality_columns is null then ' '
                             when charindex(',',t1.equality_columns)=0 then t1.equality_columns +' ASC '
                             when charindex(',',t1.equality_columns)>0 then replace(t1.equality_columns,',',' ASC,') + ' ASC ' 
                        end
                          +   
                       case  when charindex(',',t1.inequality_columns)=0 then  ' ,'+t1.inequality_columns + ' ASC )'
                             when  t1.inequality_columns is null then ' )'
                             when charindex(',',t1.inequality_columns)>0 then ' ,'+ replace(t1.inequality_columns,',',' ASC,') + ' ASC )' 
                        end
          when t1.included_columns is not null
               then   'create NONCLUSTERED INDEX IX_' + replace((replace((replace((replace(t1.[statement],'[','_')),']','_')),'.','_')),',','_') +'_'  
                     +replace(replace(replace(replace(replace(isnull(t1.equality_columns,'2'),' [',''),'[',''),'.',''),',',''),']','')
                     +replace((replace((replace((replace(replace(isnull(t1.inequality_columns,'2'),' [',''),'[','')),']','')),'.','')),',','_') + ' ON '+ t1.[statement] + ' (' + 
                       case  when t1.equality_columns is null then ' '
                             when charindex(',',t1.equality_columns)=0 then t1.equality_columns +' ASC '
                             when charindex(',',t1.equality_columns)>0 then replace(t1.equality_columns,',',' ASC,') + ' ASC ' 
                        end
                          +   
                       case  when t1.equality_columns is null then ''+t1.inequality_columns + ' ASC )'
                             when charindex(',',t1.inequality_columns)=0 then ' ,'+t1.inequality_columns + ' ASC )'
                             when  t1.inequality_columns is null then ' )'
                             when charindex(',',t1.inequality_columns)>0 then ' ,'+ replace(t1.inequality_columns,',',' ASC,') + ' ASC )' 
                        end
                     + ' INCLUDE ( ' + t1.included_columns + ' )'
 
       end  as  '建立索引的语句'
 
 
      FROM sys.dm_db_missing_index_groups AS t3
      join sys.dm_db_missing_index_details AS t1
       on  t1.index_handle = t3.index_handle
          join sys.dm_db_missing_index_group_stats AS t2
            on t2.group_handle = t3.index_group_handle
              join sys.databases AS t4 
                on t1.database_id = t4.database_id
      WHERE t1.database_id = DB_ID() --AND object_id = OBJECT_ID('dealer.升级码_经销商添加升级码')
      order by t2.user_seeks desc 
 
 
step2:===查看锁的语句
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
with C as
(
SELECT DB_NAME(resource_database_id) AS DatabaseName 
, request_session_id 
, resource_type 
, CASE 
WHEN resource_type = 'OBJECT' 
THEN OBJECT_NAME(resource_associated_entity_id) 
WHEN resource_type IN ('KEY', 'PAGE', 'RID') 
THEN (SELECT OBJECT_NAME(OBJECT_ID) 
FROM sys.partitions p 
WHERE p.hobt_id = l.resource_associated_entity_id) 
END AS resource_type_name 
, request_status 
, request_mode 
FROM sys.dm_tran_locks l 
WHERE request_session_id !=@@spid 
)
 select C.DatabaseName,C.request_session_id,C.request_mode,C.request_status,C.resource_type,
       C.resource_type_name,b.loginame,b.program_name,m.plan_handle,f.text,gp.query_plan
 
 from C join sys.sysprocesses as b 
      on C.request_session_id = b.spid  
 
      join sys.dm_exec_query_stats as m 
 
      on b.sql_handle  = m.sql_handle
 
      CROSS APPLY sys.dm_exec_sql_text(b.sql_handle) as f
 
      CROSS APPLY sys.dm_exec_query_plan(m.plan_handle) as gp
 
 
where resource_type <> 'database'    ORDER BY request_session_id
 
step3:===最占I/O的20个语句和他们的执行计划
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED 
SELECT TOP 20 
  [Total IO] = (qs.total_logical_reads + qs.total_logical_writes) 
  , [Average IO] = (qs.total_logical_reads + qs.total_logical_writes) / 
                                            qs.execution_count 
  , qs.execution_count 
  , SUBSTRING (qt.text,(qs.statement_start_offset/2) + 1,      
  ((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) + 1) AS [Individual Query] 
  , qt.text AS [Parent Query] 
  , DB_NAME(qt.dbid) AS DatabaseName 
  , qp.query_plan 
FROM sys.dm_exec_query_stats qs 
CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) as qt 
CROSS APPLY sys.dm_exec_query_plan(qs.plan_handle) qp 
ORDER BY [Total IO] DESC    
 
step4===查看没关闭事务的空闲进程,当前未完成的事务
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED ;
with C as
(
SELECT es.session_id, es.login_name, es.host_name, est.text 
  , cn.last_read, cn.last_write, es.program_name 
FROM sys.dm_exec_sessions es 
INNER JOIN sys.dm_tran_session_transactions st 
            ON es.session_id = st.session_id 
INNER JOIN sys.dm_exec_connections cn 
            ON es.session_id = cn.session_id 
CROSS APPLY sys.dm_exec_sql_text(cn.most_recent_sql_handle) est 
LEFT OUTER JOIN sys.dm_exec_requests er                     
            ON st.session_id = er.session_id 
                AND er.session_id IS NULL  
)
 
 select [session_id],[login_name],[host_name],[text],[last_read],[last_write],[program_name] from C
 
 
step5:===查看cpu占用
select * from sys.sysprocesses order by cpu desc
 
 
select * from sys.sysprocesses as s
cross apply sys.dm_exec_sql_text(s.sql_handle) as t order by cpu 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
 
分享到:
评论

相关推荐

    mysql数据库性能调优

    mysql数据库性能调优

    数据库性能调优.原理与技术2 - 中文电子书

    数据库性能调优.原理与技术 - 中文电子书 第1章 基本原理 1.1 原理的作用 1.2 个基本原理 1.3 基本原理和知识 第2章 事务处理调优 2.1 本章目标 2.2 封锁和并发控制 2.3 日志和恢复子系统 2.4 操作...

    oracle数据库性能调优(1)

    数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小、索引的创建、语句改写等等。总之,数据库性能调优的目的在于使系统运行得更快。数据库调优技术可以在不同的数据库系统中使用。...

    数据库性能调优.原理与技术.pdf

    数据库性能调优.原理与技术.pdf 调优需要有广泛的知识,这使得它既简单又复杂。 说调优简单,是因为调优者不必纠缠于复杂的公式和规则。许多学术界和业界的研究者都在尝试将调优和查询处理建立在数学基础之上。 称...

    数据库性能调优技术--索引调优

    数据库性能调优技术--索引调优 作者:杨万富

    数据库 性能调优 技术

    数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小、索引的创建、语句改写等等。总之,数据库性能调优的目的在于使系统运行得更快。 调优需要有广泛的知识,这使得它既简单又复杂...

    db2 数据库性能调优

    DB2 性能调优入门 了解DB2日常监控的过程 熟悉DB2常用的监控工具 能够熟练使用snapshot工具 能够熟练使用event monitor工具 能够熟练使用db2pd工具 能够使用SQL访问监控结果 能够熟练使用recovery expert工具

    oracle数据库性能调优(2)

    数据库性能调优是知识密集型的学科,需要综合考虑各种复杂的因素:数据库缓冲区的大小、索引的创建、语句改写等等。总之,数据库性能调优的目的在于使系统运行得更快。数据库调优技术可以在不同的数据库系统中使用。...

    数据库性能调优.原理与技术

    很不错的讲述数据库调优的国外教材,翻译版,比较深入

    数据库性能调优技术系列

    数据库性能调优技术系列,数据库性能调优技术系列

    Oracle10g数据库性能调优方法研究.docx

    Oracle10g数据库性能调优方法研究

    Oracle数据库性能调优

    整理的比较详细的Oracle数据库性能调优文档,从sql执行原理上分析调优的过程,希望对大家的Oracle数据库开发有所帮助

    db2数据库性能调优

    您可以应用这些简单的一步步的性能调优示例来提高您自己的 DB2 UDB 数据库系统上的性能。此外,您也有机会了解如何评估和分析访问计划,并修复“糟糕的查询”。在该文章系列的第 2 部分中,我们将使用更完整的数据库...

    数据库性能调优 原理与技术

    数据库性能调优 原理与技术 国外的教科书,很不错的

    Sybase数据库性能调优

    数据库性能一般用两个方面的指标来衡量:响应时间和吞吐量。响应越快,吞吐量越大,数据库性能越好。响应时间和吞吐量有些情况下不能一起得到改善。

    数据库性能调优常用SQL语句

    数据库性能调优常用SQL语句

    oralce 数据库 性能调优

    oralce 数据库 性能调优

    ORACLE数据库性能调优.docx

    ORACLE数据库性能调优

Global site tag (gtag.js) - Google Analytics