SQL SERVER 排查脚本
随着数据量和并发量的增大,数据库有时会遇到CPU,内存,IO 性能问题;整理了一下有关排查数据相关的SQL脚本,以便排查问题之用;
1,哪些SQL 消耗CPU
- /* 查看哪些SQL语句消耗CPU,找出有问题的SQL语句进行优化,或者索引优化*/
- SELECT TOP 50
- total_worker_time/1000 as '总消耗CPU 时间(ms)',
- execution_count '运行次数',
- qs.total_worker_time/qs.execution_count/1000. as '平均消耗CPU 时间(ms)',
- SUBSTRING(qt.text,qs.statement_start_offset/2+1,
- (case when qs.statement_end_offset = -1 then DATALENGTH(qt.text)
- else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1)
- as '使用CPU的语法',
- qt.text '完整语法',
- qt.dbid, dbname=db_name(qt.dbid),
- qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
- from sys.dm_exec_query_stats qs
- cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
- order by total_worker_time desc
2, 查看SQL 阻塞进程
- /***高并发情况下,容易产生进程阻塞,查看阻塞的SQL**/
- SELECT t1.request_session_id AS 'wait_sid' ,
- t1.resource_type AS '锁类型' ,
- DB_NAME(resource_database_id) AS '库明称' ,
- t1.request_mode AS 'wait锁类型' ,
- t2.wait_duration_ms AS 'wait_time_ms' ,
- ( SELECT text
- FROM sys.dm_exec_requests AS r
- CROSS APPLY sys.dm_exec_sql_text(r.sql_handle)
- WHERE r.session_id = t1.request_session_id
- ) AS 'wait_run_batch' ,
- ( SELECT SUBSTRING(qt.text, r.statement_start_offset / 2 + 1,
- ( CASE WHEN r.statement_end_offset = -1
- THEN DATALENGTH(qt.text)
- ELSE r.statement_end_offset
- END - r.statement_start_offset ) / 2 + 1)
- FROM sys.dm_exec_requests AS r
- CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) AS qt
- WHERE r.session_id = t1.request_session_id
- ) AS 'wait 运行的SQL语句' ,
- t2.blocking_session_id AS '锁定sid' ,
- ( SELECT text
- FROM sys.sysprocesses AS p
- CROSS APPLY sys.dm_exec_sql_text(p.sql_handle)
- WHERE p.spid = t2.blocking_session_id
- ) AS '锁定SQL'
- FROM sys.dm_tran_locks AS t1
- INNER JOIN sys.dm_os_waiting_tasks AS t2 ON t1.lock_owner_address = t2.resource_address
3, SQL SERVER 后台连接情况
- --请求
- select s.session_id, s.status,db_name(r.database_id) as database_name,
- s.login_name,s.login_time, s.host_name,
- c.client_net_address,c.client_tcp_port,s.program_name,
- r.cpu_time, r.reads, r.writes,c.num_reads,c.num_writes,
- s.client_interface_name,
- s.last_request_start_time, s.last_request_end_time,
- c.connect_time, c.net_transport, c.net_packet_size,
- r.start_time, r.status, r.command,
- r.blocking_session_id, r.wait_type,
- r.wait_time, r.last_wait_type, r.wait_resource, r.open_transaction_count,
- r.percent_complete,r.granted_query_memory
- from Sys.dm_exec_requests r with(nolock)
- right outer join Sys.dm_exec_sessions s with(nolock)
- on r.session_id = s.session_id
- right outer join Sys.dm_exec_connections c with(nolock)
- on s.session_id = c.session_id
- where s.session_id >50
- order by s.session_id
- --用户连接
- select login_name,COUNT(0) user_count
- from Sys.dm_exec_requests r with(nolock)
- right outer join Sys.dm_exec_sessions s with(nolock)
- on r.session_id = s.session_id
- right outer join Sys.dm_exec_connections c with(nolock)
- on s.session_id = c.session_id
- where s.session_id >50
- group by login_name
- order by 2 DESC
- --机器连接
- select s.host_name,c.client_net_address,COUNT(0) host_count
- from Sys.dm_exec_requests r with(nolock)
- right outer join Sys.dm_exec_sessions s with(nolock)
- on r.session_id = s.session_id
- right outer join Sys.dm_exec_connections c with(nolock)
- on s.session_id = c.session_id
- where s.session_id >50
- group by host_name,client_net_address
- order by 3 DESC
- --进程状态
- select s.status,COUNT(0) host_count
- from Sys.dm_exec_requests r with(nolock)
- right outer join Sys.dm_exec_sessions s with(nolock)
- on r.session_id = s.session_id
- right outer join Sys.dm_exec_connections c with(nolock)
- on s.session_id = c.session_id
- where s.session_id >50
- group by s.status
- order by 2 DESC
4, 内存使用情况
- --查看内存状态
- SELECT m.total_physical_memory_kb,
- m.available_physical_memory_kb,
- m.total_page_file_kb,
- m.available_page_file_kb,
- m.system_memory_state_desc
- FROM sys.dm_os_sys_memory m
- --查看各内存对象使用内存情况
- --在SQL SERVER 2012及以上版本运行
- SELECT M.type,
- sum(M.virtual_memory_reserved_kb) AS VirtualMemoryReservedKB,
- SUM(M.virtual_memory_committed_kb) AS VirtualMemortCommitedKB,
- SUM(M.shared_memory_committed_kb) AS SharedMemroyCommittedKB,
- SUM(M.shared_memory_reserved_kb) AS SharedMemroyReservedKB,
- SUM(M.pages_kb) AS PagesKB
- FROM sys.dm_os_memory_clerks M
- GROUP BY M.type
- ORDER BY PagesKB DESC
- --查看各数据库的内存使用情况
- SET TRAN ISOLATION LEVEL READ UNCOMMITTED
- SELECT ISNULL(DB_NAME(database_id), 'ResourceDb') AS DatabaseName
- , CAST(COUNT(row_count) * 8.0 / (1024.0) AS DECIMAL(28,2)) AS [Size (MB)]
- FROM sys.dm_os_buffer_descriptors
- GROUP BY database_id
- ORDER BY DatabaseName
- --查看数据库内存相关性能计数器
- SELECT * ,
- CAST(P.cntr_value*8.0/1024.0 AS INT) AS MemoryMB
- FROM sys.sysperfinfo p
- WHERE p.object_name LIKE '%SQLServer:Buffer Manager%'
- SELECT * ,
- CAST(P.cntr_value*8.0/1024.0 AS INT) AS MemoryMB
- FROM sys.sysperfinfo p
- WHERE p.object_name LIKE '%SQLServer:Memory Manager%'
5,CPU 历史使用情况
- /*
- 查询数据库服务器CPU利用率的历史情况,每一分钟统计一次,看看被各个程序占用情况
- */
- DECLARE @ts_now bigint = (SELECT cpu_ticks/(cpu_ticks/ms_ticks) FROM sys.dm_os_sys_info WITH (NOLOCK));
- SELECT SQLProcessUtilization AS [SQL Server Process CPU Utilization],
- SystemIdle AS [System Idle Process],
- 100 - SystemIdle - SQLProcessUtilization AS [Other Process CPU Utilization],
- DATEADD(ms, -1 * (@ts_now - [timestamp]), GETDATE()) AS [Event Time]
- FROM (SELECT record.value('(./Record/@id)[1]', 'int') AS record_id,
- record.value('(./Record/SchedulerMonitorEvent/SystemHealth/SystemIdle)[1]', 'int')
- AS [SystemIdle],
- record.value('(./Record/SchedulerMonitorEvent/SystemHealth/ProcessUtilization)[1]', 'int')
- AS [SQLProcessUtilization], [timestamp]
- FROM (SELECT [timestamp], CONVERT(xml, record) AS [record]
- FROM sys.dm_os_ring_buffers WITH (NOLOCK)
- WHERE ring_buffer_type = N'RING_BUFFER_SCHEDULER_MONITOR'
- AND record LIKE N'%<SystemHealth>%') AS x) AS y
- ORDER BY record_id DESC OPTION (RECOMPILE);
SQL SERVER 排查脚本的更多相关文章
- ola.hallengren的SQL Server维护脚本
ola.hallengren的SQL Server维护脚本 下载地址 http://files.cnblogs.com/files/lyhabc/ola.hallengrenMaintenanceSo ...
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛
非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry 大牛 Glenn Berry 大牛会对这个脚本持续更新 -- SQL Server 2012 Diagnost ...
- 非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry
非常全面的SQL Server巡检脚本来自sqlskills团队的Glenn Berry Glenn Berry 曾承诺对这个脚本持续更新 -- SQL Server 2012 Diagnostic ...
- sql server 用脚本管理作业
转自:https://blog.csdn.net/yunye114105/article/details/6594826 摘要: 在SQL SERVER中用脚本管理作业,在绝大部分场景下,脚本都比UI ...
- 一行导出所有任意微软SQL server数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解
文章标题: 一行导出所有任意微软SQL serer数据脚本-基于Python的微软官方mssql-scripter工具使用全讲解 关键字 : mssql-scripter,SQL Server 文章分 ...
- sql server 常用脚本(日常查询所需)
1:查看sql server代理中作业的运行状况的脚本 -- descr : a simple sql script to view sql server jobs run status -- las ...
- PowerDesigner生成SQL Server 2008脚本注释乱码的问题
[%OWNER%?[.O:[execute ][exec ]]sp_addextendedproperty [%R%?[N]]'MS_Description', N[%R%?[N]]%.q:COMME ...
- [转]sql server 常用脚本(日常查询所需)
1:查看sql server代理中作业的运行状况的脚本 -- descr : a simple sql script to view sql server jobs run status -- las ...
- sql server t-sql脚本转成oracle plsql
将一份SQL SERVER数据库生成的T-SQL脚本,转成ORACLE的PL/SQL,其复杂繁琐程度,远远出乎我的意料. 这份SQL SERVER脚本,里面有表,有视图,还有存储过程,以及一些自定义函 ...
随机推荐
- mybatis小结
mybatis是Apache的一个开源项目ibatis,后由Google管理,目前在github上.MyBatis 是支持定制化SQL.存储过程以及高级映射的优秀的持久层框架. 一.mybatis解决 ...
- 国内常用DNS
114.114.114.114 国内移动,电信,联通通用DNS 223.5.5.5 阿里 223.6.6.6 阿里 180.76.76.76 百度
- SQL基础语法
数据库: 结构化查询语言(Structured Query Language)简称SQL: 数据库管理系统(Database Management System)简称DBMS: 数据库管理员(Data ...
- 【原】无脑操作:IDEA + maven + Shiro + SpringBoot + JPA + Thymeleaf实现基础认证权限
开发环境搭建参见<[原]无脑操作:IDEA + maven + SpringBoot + JPA + Thymeleaf实现CRUD及分页> 需求: ① 除了登录页面,在地址栏直接访问其他 ...
- equals方法和==的区别--用实例简单说明
首先我们创建一个类 public class People { private String name; private String address; public String getName() ...
- 在docker私有仓库如何查看有哪些镜像?
搭建了docker私有仓库,上传了一些镜像,时间长了就会忘了有哪些镜像,在网上查了,有大佬是通过脚本查看的,多厉害! #!/usr/bin/env python#-*- coding:utf-8 -* ...
- vue.js window.removeEventListener 移除
vue项目中的小坑记录下,想要移除window的addEventListener,需要把后面的function挂在到this上,removeEventListener 和 addEventListen ...
- dubbo 序列化机制之 hessian2序列化实现原理分析
对于远程通信,往往都会涉及到数据持久化传输问题.往大了说,就是,从A发出的信息,怎样能被B接收到相同信息内容!小点说就是,编码与解码问题! 而在dubbo或者说是java的远程通信中,编解码则往往伴随 ...
- IDEA设置热部署
1.点击File找到Settings打开. 1.2:找到Compiler将 Build project automatically 勾选 2.使用快捷键 Ctrl+Shift+A 搜索 re ...
- Spring Cloud Eureka 常用配置详解,建议收藏!
前几天,栈长分享了 <Spring Cloud Eureka 注册中心集群搭建,Greenwich 最新版!>,今天来分享下 Spring Cloud Eureka 常用的一些参数配置及说 ...