怎么查找执行比较慢的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(单位为毫秒),点击确定。如下:
基础才是编程人员应该深入研究的问题,比如:
1)List/Set/Map内部组成原理|区别
2)mysql索引存储结构&如何调优/b-tree特点、计算复杂度及影响复杂度的因素。。。
3)JVM运行组成与原理及调优
4)Java类加载器运行原理
5)Java中GC过程原理|使用的回收算法原理
6)Redis中hash一致性实现及与hash其他区别
7)Java多线程、线程池开发、管理Lock与Synchroined区别
8)Spring IOC/AOP 原理;加载过程的。。。
【+加关注】。