zoukankan      html  css  js  c++  java
  • 【经验分享】SQLServer找出执行慢的SQL文

    执行以下SQL,可以知道SQLServer运行了哪些SQL文,运行了多少次,以及执行的情况,能很直观的找出速度慢的SQL文,从而进行优化。

    SELECT
    (total_elapsed_time / execution_count)/1000 N'平均时间ms'
    ,total_elapsed_time/1000 N'总花费时间ms'
    ,total_worker_time/1000 N'所用的CPU总时间ms'
    ,total_physical_reads N'物理读取总次数'
    ,total_logical_reads/execution_count N'每次逻辑读次数'
    ,total_logical_reads N'逻辑读取总次数'
    ,total_logical_writes N'逻辑写入总次数'
    ,execution_count N'执行次数'
    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
    WHEN -1 THEN DATALENGTH(st.text)
    ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) N'执行语句'
    ,creation_time N'语句编译时间'
    ,last_execution_time N'上次执行时间'
    FROM
    sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
    WHERE
    SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
    WHEN -1 THEN DATALENGTH(st.text)
    ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) not like '%fetch%'
    ORDER BY
    total_elapsed_time / execution_count DESC; 

    SQLServer
    SELECT top 50 creation_time N'语句编译时间'
    ,last_execution_time N'上次执行时间'
    ,total_physical_reads N'物理读取总次数'
    ,total_logical_reads/execution_count N'每次逻辑读次数'
    ,total_logical_reads N'逻辑读取总次数'
    ,total_logical_writes N'逻辑写入总次数'
    ,execution_count N'执行次数'
    ,total_worker_time/1000 N'所用的CPU总时间ms'
    ,total_elapsed_time/1000 N'总花费时间ms'
    ,(total_elapsed_time / execution_count)/1000 N'平均时间ms'
    ,SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
    WHEN -1 THEN DATALENGTH(st.text)
    ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) N'执行语句'
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
    where SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
    ((CASE statement_end_offset
    WHEN -1 THEN DATALENGTH(st.text)
    ELSE qs.statement_end_offset END
    - qs.statement_start_offset)/2) + 1) not like '%fetch%'
    ORDER BY total_elapsed_time / execution_count DESC; 

    oracle
    select * 
    from
    (select 
    LAST_ACTIVE_TIME AS "上次执行时间",
    DISK_READS AS "读磁盘次数",
    SQL_TEXT AS "执行语句",
    PARSE_CALLS AS "编译次数",
    EXECUTIONS AS "执行次数",
    CPU_TIME/1000 AS "所用的CPU总时间ms",
    ELAPSED_TIME/1000 AS "总花费时间ms",
    ROUND(ELAPSED_TIME/EXECUTIONS/1000, 2) AS "平均时间ms",
    USER_IO_WAIT_TIME
    from    sys.v_$sqlarea
    where EXECUTIONS > 0
    and MODULE = 'SFCMN03003S.exe'
    order by ELAPSED_TIME/EXECUTIONS desc)
    where rownum < 51;



  • 相关阅读:
    SpringBoot集成Swagger2并配置多个包路径扫描
    SpringBoot基于EasyExcel解析Excel实现文件导出导入、读取写入
    SpringBoot + SpringSecurity + Quartz + Layui实现系统权限控制和定时任务
    Redis数据持久化(RDB、AOF)
    so安全编译选项(栈溢出保护)
    Python调用Chrome下载文件
    AtomicInteger如何保证线程安全以及乐观锁/悲观锁的概念
    SpringCloud:Eureka的健康检测机制
    共享锁(S锁)和排它锁(X锁)
    Collection接口及其常用子类(java.util包)
  • 原文地址:https://www.cnblogs.com/zhuzhu_/p/1661797.html
Copyright © 2011-2022 走看看