怎么查找执行比较慢的sql语句-DBA给的建议

  • 1.使用sql动态视图

如下:

select top 10 b.text,a.total_worker_time,a.total_logical_reads,a.total_elapsed_time,execution_count
from sys.dm_exec_query_stats a
CROSS APPLY sys.dm_exec_sql_text(a.sql_handle) as b
order by total_worker_time/execution_count desc 

查看联机帮助文档视图:sys.dm_exec_query_stats可得到所有字段含义,主要有

total_worker_time:总的cpu消耗时间

total_logical_reads:逻辑读次数

total_elapsed_time:耗时

execution_count:执行次数。

total_worker_time/execution_count desc 表示每次执行需要消耗多少cpu,按照倒叙排序,找到最消耗cpu的sql语句。text

上面只可以查找SqlServer清空缓存之后的数据,如果SqlServer重启过,或者SqlServer由于内存不足导致执行计划被释放。那么是无法找到的。

  • 2.使用攻击profiler。新建跟踪:

勾选以下事件。第一个是存储过程,第二个是sql语句

筛选器选择超过100秒的为慢sql(单位为毫秒),点击确定。如下:

时间: 2024-10-06 14:13:23

怎么查找执行比较慢的sql语句-DBA给的建议的相关文章

Mysql 定位执行效率低的sql 语句

一.通过MySQL慢查询日志定位执行效率低的SQL语句. MySQL通过慢查询日志定位那些执行效率较低的SQL 语句,用--log-slow-queries[=file_name]选项启动时,mysqld 会写一个包含所有执行时间超过long_query_time 秒的SQL语句的日志文件,通过查看这个日志文件定位效率较低的SQL . 1.通过命令: show variables like '%query%'  查看是否开启慢查询日志. 开启前 开启后 slow_query_log :   on

oracle中查找执行效率低下的SQL

v$sqltext:存储的是完整的SQL,SQL被分割 v$sqlarea:存储的SQL 和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息(统计) v$sql:内存共享SQL区域中已经解析的SQL语句.(即时) 根据sid查找完整sql语句: select sql_text from v$sqltext a where a.hash_value = (select sql_hash_value from v$session b where b.sid = '&sid'    )or

在雇员表中查找第二高的工资SQL语句助记

        "在雇员表中查找第二高的工资的员工记录"SQL语句怎么写         这个查询首先查找最高工资,然后将它从列表中排除,再查找最高工资.很明显,第二次返回的是第二高工资. select top 1 * from employee where salary not int (select max(salary) from emplyee) order by salary desc 或者 select top 1 * from(select top 2 * from em

原!!mybatis如何直接 执行传入的任意sql语句 并按照顺序取出查询的结果集

需求: 1.直接执行前端传来的任何sql语句,parameterType="String", 2.对于任何sql语句,其返回值类型无法用resultMap在xml文件里配置或者返回具体的bean类型,因此设置resultType="java.util.Map",但是Map并不保证存入取出顺序一致, 因此设置resultType="java.util.LinkedHashMap",为保证查询的字段值有序(存入与取出顺序一致)所以采用LinkedHa

python连接SQLServer数据库,执行给定的查询SQL语句,并返回查询结果数据

import sys import pymssql reload(sys) sys.setdefaultencoding("utf-8") #数据库连接配置 config_dict={ 'user':'sa', 'password':'', 'host':'127.0.0.1', 'database':'pawn2007' } def SQLServer_connect(config_dict): ''' SQLServer 数据库连接 ''' connect=pymssql.conn

Mysql写出高质量的sql语句的几点建议

CleverCode在实际的工作也写过一些低效率的sql语句.这些语句会给数据库带来很大的压力,最主要的表现就是sql语句运行慢,后来逐渐的去优化和尝试.总结了一些高质量的sql语句的写法.这里CleverCode总结一下分享给大家. [ CleverCode发表在csdn博客中的原创作品,请勿转载,原创地址:http://blog.csdn.net/clevercode/article/details/46341147] 1 建议一:尽量避免在列上运算 尽量避免在列上运算,这样会导致索引失效.

执行次数最多的sql语句

SELECT * FROM ( SELECT top 1000 creation_time N'语句编译时间' ,last_execution_time N'上次执行时间' ,execution_count/datediff(mi,creation_time,getdate()) as '平均每分钟执行次数' ,execution_count,datediff(mi,creation_time,getdate()) as '编译以来分钟数' ,total_physical_reads N'物理读

执行Django原生的sql语句

Django中能用ORM的就用它ORM吧,不建议执行原生SQL,可能会有一些安全问题, 如果实在是SQL太复杂ORM实现不了,那就看看下边执行原生SQL的方法,跟直接使用pymysql基本一致了 from  django.db  import connection with connection.cursor() as cursor cursor.excute('select * from accounts_User') row = cursor.fetchall() return row 原文

一条执行4秒的sql语句导致的系统问题 (转)

为了一看究竟,抓取了一个awr报告.发现系统的负载情况确实很严重,每秒的redo有1.6M,可见系统的负载不是主要在select上,可能有一些dml之类的操作极为频繁. 看了下等待事件.都是关于lock的.这个时候就有些纳闷了.到底什么样的操作会导致严重的锁等待. Top 5 Timed Foreground Events 这个时候怎么解释执行计划效率很高,但是执行时间却很长的问题.第一个猜想就是系统的负载加大了,可能查取数据的时候就慢了.但是反过来说,也不会慢这么高的比例啊.所以这种猜想不成立