随着数据量和并发量的增大,数据库有时会遇到CPU,内存,IO  性能问题;整理了一下有关排查数据相关的SQL脚本,以便排查问题之用;

1,哪些SQL 消耗CPU

  1. /* 查看哪些SQL语句消耗CPU,找出有问题的SQL语句进行优化,或者索引优化*/
  2.  
  3. SELECT TOP 50
  4. total_worker_time/1000 as '总消耗CPU 时间(ms)',
  5.  
  6. execution_count '运行次数',
  7.  
  8. qs.total_worker_time/qs.execution_count/1000. as '平均消耗CPU 时间(ms)',
  9.  
  10. SUBSTRING(qt.text,qs.statement_start_offset/2+1,
  11.  
  12. (case when qs.statement_end_offset = -1 then DATALENGTH(qt.text)
  13. else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1)
  14. as '使用CPU的语法',
  15.  
  16. qt.text '完整语法',
  17.  
  18. qt.dbid, dbname=db_name(qt.dbid),
  19.  
  20. qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
  21.  
  22. from sys.dm_exec_query_stats qs
  23. cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
  24.  
  25. order by total_worker_time desc

2, 查看SQL 阻塞进程

  1. /***高并发情况下,容易产生进程阻塞,查看阻塞的SQL**/
  2. SELECT t1.request_session_id AS 'wait_sid' ,
  3. t1.resource_type AS '锁类型' ,
  4. DB_NAME(resource_database_id) AS '库明称' ,
  5. t1.request_mode AS 'wait锁类型' ,
  6. t2.wait_duration_ms AS 'wait_time_ms' ,
  7. ( SELECT text
  8. FROM sys.dm_exec_requests AS r
  9. CROSS APPLY sys.dm_exec_sql_text(r.sql_handle)
  10. WHERE r.session_id = t1.request_session_id
  11. ) AS 'wait_run_batch' ,
  12. ( SELECT SUBSTRING(qt.text, r.statement_start_offset / 2 + 1,
  13. ( CASE WHEN r.statement_end_offset = -1
  14. THEN DATALENGTH(qt.text)
  15. ELSE r.statement_end_offset
  16. END - r.statement_start_offset ) / 2 + 1)
  17. FROM sys.dm_exec_requests AS r
  18. CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS qt
  19. WHERE r.session_id = t1.request_session_id
  20. ) AS 'wait 运行的SQL语句' ,
  21. t2.blocking_session_id AS '锁定sid' ,
  22. ( SELECT text
  23. FROM sys.sysprocesses AS p
  24. CROSS APPLY sys.dm_exec_sql_text(p.sql_handle)
  25. WHERE p.spid = t2.blocking_session_id
  26. ) AS '锁定SQL'
  27. FROM sys.dm_tran_locks AS t1
  28. INNER JOIN sys.dm_os_waiting_tasks AS t2 ON t1.lock_owner_address = t2.resource_address

3, SQL SERVER 后台连接情况

  1. --请求
  2. select s.session_id, s.status,db_name(r.database_id) as database_name,
  3. s.login_name,s.login_time, s.host_name,
  4. c.client_net_address,c.client_tcp_port,s.program_name,
  5. r.cpu_time, r.reads, r.writes,c.num_reads,c.num_writes,
  6. s.client_interface_name,
  7. s.last_request_start_time, s.last_request_end_time,
  8. c.connect_time, c.net_transport, c.net_packet_size,
  9. r.start_time, r.status, r.command,
  10. r.blocking_session_id, r.wait_type,
  11. r.wait_time, r.last_wait_type, r.wait_resource, r.open_transaction_count,
  12. r.percent_complete,r.granted_query_memory
  13. from Sys.dm_exec_requests r with(nolock)
  14. right outer join Sys.dm_exec_sessions s with(nolock)
  15. on r.session_id = s.session_id
  16. right outer join Sys.dm_exec_connections c with(nolock)
  17. on s.session_id = c.session_id
  18. where s.session_id >50
  19. order by s.session_id
  20.  
  21. --用户连接
  22.  
  23. select login_name,COUNT(0) user_count
  24. from Sys.dm_exec_requests r with(nolock)
  25. right outer join Sys.dm_exec_sessions s with(nolock)
  26. on r.session_id = s.session_id
  27. right outer join Sys.dm_exec_connections c with(nolock)
  28. on s.session_id = c.session_id
  29. where s.session_id >50
  30. group by login_name
  31. order by 2 DESC
  32.  
  33. --机器连接
  34.  
  35. select s.host_name,c.client_net_address,COUNT(0) host_count
  36. from Sys.dm_exec_requests r with(nolock)
  37. right outer join Sys.dm_exec_sessions s with(nolock)
  38. on r.session_id = s.session_id
  39. right outer join Sys.dm_exec_connections c with(nolock)
  40. on s.session_id = c.session_id
  41. where s.session_id >50
  42. group by host_name,client_net_address
  43. order by 3 DESC
  44.  
  45. --进程状态
  46. select s.status,COUNT(0) host_count
  47. from Sys.dm_exec_requests r with(nolock)
  48. right outer join Sys.dm_exec_sessions s with(nolock)
  49. on r.session_id = s.session_id
  50. right outer join Sys.dm_exec_connections c with(nolock)
  51. on s.session_id = c.session_id
  52. where s.session_id >50
  53. group by s.status
  54. order by 2 DESC

4, 内存使用情况

  1. --查看内存状态
  2. SELECT m.total_physical_memory_kb,
  3. m.available_physical_memory_kb,
  4. m.total_page_file_kb,
  5. m.available_page_file_kb,
  6. m.system_memory_state_desc
  7. FROM sys.dm_os_sys_memory m
  8.  
  9. --查看各内存对象使用内存情况
  10. --在SQL SERVER 2012及以上版本运行
  11. SELECT M.type,
  12. sum(M.virtual_memory_reserved_kb) AS VirtualMemoryReservedKB,
  13. SUM(M.virtual_memory_committed_kb) AS VirtualMemortCommitedKB,
  14. SUM(M.shared_memory_committed_kb) AS SharedMemroyCommittedKB,
  15. SUM(M.shared_memory_reserved_kb) AS SharedMemroyReservedKB,
  16. SUM(M.pages_kb) AS PagesKB
  17. FROM sys.dm_os_memory_clerks M
  18. GROUP BY M.type
  19. ORDER BY PagesKB DESC
  20.  
  21. --查看各数据库的内存使用情况
  22. SET TRAN ISOLATION LEVEL READ UNCOMMITTED
  23. SELECT ISNULL(DB_NAME(database_id), 'ResourceDb') AS DatabaseName
  24. , CAST(COUNT(row_count) * 8.0 / (1024.0) AS DECIMAL(28,2)) AS [Size (MB)]
  25. FROM sys.dm_os_buffer_descriptors
  26. GROUP BY database_id
  27. ORDER BY DatabaseName
  28.  
  29. --查看数据库内存相关性能计数器
  30. SELECT * ,
  31. CAST(P.cntr_value*8.0/1024.0 AS INT) AS MemoryMB
  32. FROM sys.sysperfinfo p
  33. WHERE p.object_name LIKE '%SQLServer:Buffer Manager%'
  34.  
  35. SELECT * ,
  36. CAST(P.cntr_value*8.0/1024.0 AS INT) AS MemoryMB
  37. FROM sys.sysperfinfo p
  38. WHERE p.object_name LIKE '%SQLServer:Memory Manager%'

5,CPU 历史使用情况

  1. /*
  2. 查询数据库服务器CPU利用率的历史情况,每一分钟统计一次,看看被各个程序占用情况
  3. */
  4. DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys_info WITH (NOLOCK));
  5.  
  6. SELECT SQLProcessUtilization AS [SQL Server Process CPU Utilization],
  7. SystemIdle AS [System Idle Process],
  8. 100 - SystemIdle - SQLProcessUtilization AS [Other Process CPU Utilization],
  9. DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS [Event Time]
  10. FROM (SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
  11. record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int')
  12. AS [SystemIdle],
  13. record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int')
  14. AS [SQLProcessUtilization], [timestamp]
  15. FROM (SELECT [timestamp], CONVERT(xml, record) AS [record]
  16. FROM sys.dm_os_ring_buffers WITH (NOLOCK)
  17. WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
  18. AND record LIKE N'%<SystemHealth>%') AS x) AS y
  19. ORDER BY record_id DESC OPTION (RECOMPILE);

SQL SERVER 排查脚本的更多相关文章

  1. ola.hallengren的SQL Server维护脚本

    ola.hallengren的SQL Server维护脚本 下载地址 http://files.cnblogs.com/files/lyhabc/ola.hallengrenMaintenanceSo ...

  2. 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛

    非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛 Glenn Berry 大牛会对这个脚本持续更新 -- SQL Server 2012 Diagnost ...

  3. 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry

    非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry Glenn Berry 曾承诺对这个脚本持续更新 -- SQL Server 2012 Diagnostic ...

  4. sql server 用脚本管理作业

    转自:https://blog.csdn.net/yunye114105/article/details/6594826 摘要: 在SQL SERVER中用脚本管理作业,在绝大部分场景下,脚本都比UI ...

  5. 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解

    文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...

  6. sql server 常用脚本(日常查询所需)

    1:查看sql server代理中作业的运行状况的脚本 -- descr : a simple sql script to view sql server jobs run status -- las ...

  7. PowerDesigner生成SQL Server 2008脚本注释乱码的问题

    [%OWNER%?[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description', N[%R%?[N]]%.q:COMME ...

  8. [转]sql server 常用脚本(日常查询所需)

    1:查看sql server代理中作业的运行状况的脚本 -- descr : a simple sql script to view sql server jobs run status -- las ...

  9. sql server t-sql脚本转成oracle plsql

    将一份SQL SERVER数据库生成的T-SQL脚本,转成ORACLE的PL/SQL,其复杂繁琐程度,远远出乎我的意料. 这份SQL SERVER脚本,里面有表,有视图,还有存储过程,以及一些自定义函 ...

随机推荐

  1. mybatis小结

    mybatis是Apache的一个开源项目ibatis,后由Google管理,目前在github上.MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架. 一.mybatis解决 ...

  2. 国内常用DNS

    114.114.114.114 国内移动,电信,联通通用DNS 223.5.5.5 阿里 223.6.6.6 阿里 180.76.76.76 百度

  3. SQL基础语法

    数据库: 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理员(Data ...

  4. 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限

    开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...

  5. equals方法和==的区别--用实例简单说明

    首先我们创建一个类 public class People { private String name; private String address; public String getName() ...

  6. 在docker私有仓库如何查看有哪些镜像?

    搭建了docker私有仓库,上传了一些镜像,时间长了就会忘了有哪些镜像,在网上查了,有大佬是通过脚本查看的,多厉害! #!/usr/bin/env python#-*- coding:utf-8 -* ...

  7. vue.js window.removeEventListener 移除

    vue项目中的小坑记录下,想要移除window的addEventListener,需要把后面的function挂在到this上,removeEventListener 和 addEventListen ...

  8. dubbo 序列化机制之 hessian2序列化实现原理分析

    对于远程通信,往往都会涉及到数据持久化传输问题.往大了说,就是,从A发出的信息,怎样能被B接收到相同信息内容!小点说就是,编码与解码问题! 而在dubbo或者说是java的远程通信中,编解码则往往伴随 ...

  9. IDEA设置热部署

    1.点击File找到Settings打开. 1.2:找到Compiler将 Build project automatically   勾选 2.使用快捷键 Ctrl+Shift+A    搜索 re ...

  10. Spring Cloud Eureka 常用配置详解,建议收藏!

    前几天,栈长分享了 <Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!>,今天来分享下 Spring Cloud Eureka 常用的一些参数配置及说 ...