首页 > 数据库 >SQLServer常用运维SQL整理

SQLServer常用运维SQL整理

时间:2024-05-28 10:57:51浏览次数:26  
标签:10 运维 SQLServer replace char SQL avg CPU

今天线上SQLServer数据库的CPU被打爆了,紧急情况下,分析了数据库阻塞、连接分布、最耗CPU的TOP10 SQL、查询SQL并行度配置、查询SQL 重编译的原因等等

整理了一些常用的SQL

1. 查询数据库阻塞

?
1 SELECT * FROM  sys.sysprocesses WHERE blocked<>0  

查询结果中,重点看Blocked这一列,先找出最多的SID,然后循环找出Root的阻塞根源SID

查询阻塞根源Session的SQL

?
1 DBCC Inputbuffer(sid)

2. 查询SQL连接分布

?
1 SELECT Hostname FROM  sys.sysprocesses WHERE hostname<>''

3. 查询最消耗CPU的SQL Top10

?
1 2 3 select top(10) st.text as Query, qs.total_worker_time, qs.execution_count from sys.dm_exec_query_stats as qs CROSS Apply sys.dm_exec_sql_text(qs.sql_handle) AS st order by qs.total_worker_time desc

4. 查看SQLServer并行度

?
1 SELECT value_in_use  FROM sys.configurations WHERE name = 'max degree of parallelism'

并行度如果设置为1,To suppress parallel plan generation, set max degree of parallelism to 1

将阻止并行编译生成SQL执行计划,最大并行度设置为1

设置策略和具体设置方法,请参考:https://docs.microsoft.com/en-us/sql/database-engine/configure-windows/configure-the-max-degree-of-parallelism-server-configuration-option?view=sql-server-2017

?
1 2 3 4 5 6 7 8 9 10 USE DatabaseName ;  GO   EXEC sp_configure 'show advanced options', 1;  GO  RECONFIGURE WITH OVERRIDE;  GO  EXEC sp_configure 'max degree of parallelism', 16;  GO  RECONFIGURE WITH OVERRIDE;  GO

  

5. 查询SQL Server Recompilation Reasons

?
1 2 select dxmv.name, dxmv.map_key,dxmv.map_value from sys.dm_xe_map_values as dxmv where dxmv.name='statement_recompile_cause' order by dxmv.map_key

6. 将SQL Trace文件存入一张表,做聚合分析(CPU、IO、执行时间等)

?
1 2 3 SELECT * INTO TabSQL FROM fn_trace_gettable('C:\Users\***\Desktop\Trace\sql05trace20180606-业务.trc', default); GO

对上述表数据进行聚合分析最耗时的SQL

?
1 2 3 4 5 6 7 8 9 10 11 12 select  top 100             replace(replace(replacesubstring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' 'as '名称',         --substring(Textdata,1,6600)  as old,        count(*) as '数量',        sum(duration/1000) as '总执行时间ms',        avg(duration/1000) as '平均执行时间ms',        avg(cpu) as '平均CPU时间ms',        avg(reads) as '平均读次数',        avg(writes) as '平均写次数', LoginName from TabSQL   t group by   replace(replace(replacesubstring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ') , LoginName order by sum(duration) desc

最耗IO的SQL

?
1 2 3 4 5 6 7 8 9 10 11 12 select  TOP 100 replace(replace(replacesubstring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ') as '名称' ,LoginName,        count(*) as '数量',        sum(duration/1000) as '总执行时间ms',        avg(duration/1000) as '平均执行时间ms',        sum(cpu) as '总CPU时间ms',        avg(cpu) as '平均CPU时间ms',        sum(reads) as '总读次数',        avg(reads) as '平均读次数',        avg(writes) as '平均写次数' from TabSQL group by replace(replace(replacesubstring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')  ,LoginName order by  sum(reads) desc

最耗CPU的SQL

?
1 2 3 4 5 6 7 8 9 10 11 SELECT TOP 100 replace(replace(replacesubstring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' 'as '名称',LoginName,        count(*) as '数量',        sum(duration/1000) as '总执行时间ms',        avg(duration/1000) as '平均执行时间ms',        sum(cpu) as '总CPU时间',        avg(cpu) as '平均CPU时间',        avg(reads) as '平均读次数',        avg(writes) as '平均写次数' from TabSQL group by replace(replace(replacesubstring(Textdata,1,6600) ,char(10),' '),char(13),' ') ,char(9),' ')   ,LoginName order by avg(cpu) desc

 

  

 

周国庆

2019/7/8

 

2024-05-28 10:41:56【出处】:https://www.cnblogs.com/tianqing/p/11152799.html

=======================================================================================

标签:10,运维,SQLServer,replace,char,SQL,avg,CPU
From: https://www.cnblogs.com/mq0036/p/18217402

相关文章

  • CentOS7安装PostgreSQL15以及PostGIS3.3
     安装Postgresqlyuminstall-yhttps://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpmyuminstall-yhttps://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/l/libzstd-1.5.5-1.el7.x86_64.rpmyum-yinstallpos......
  • MySQL - [08] 存储过程
    题记部分  一、什么是存储过程  存储过程是事先经过编译并存储在数据库中的一段SQL语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的。  存储过程思想上很简单,就是数据库SQL语言层面的......
  • SQLServer如何查询近3分钟最消耗CPU的SQL
    在SQLServer中,要查询近3分钟最消耗CPU的SQL语句,可以使用sys.dm_exec_query_stats动态管理视图结合sys.dm_exec_sql_text函数来获取SQL语句的文本。不过,直接查询近3分钟的数据可能需要一些额外的逻辑来筛选时间范围,因为sys.dm_exec_query_stats并不直接提供时间筛选的功能。一种......
  • SQLServer如何监控阻塞会话
    一、查询阻塞和被阻塞的会话SELECTr.session_idAS[BlockedSessionID],r.blocking_session_idAS[BlockingSessionID],r.wait_type,r.wait_time,r.wait_resource,s1.program_nameAS[BlockedProgramName],s1.login_nameAS[Blo......
  • SQLServer统计监控SQL执行计划突变的方法
    使用动态管理视图(DMVs)来检测SQL执行计划的突变,你需要关注那些能够提供查询执行统计和计划信息的视图。以下是一些可以用于此目的的DMVs以及相应的查询示例:sys.dm_exec_query_stats:这个视图提供了关于SQLServer中查询执行的统计信息,包括CPU时间、总工作时间、执行次数等。SE......
  • MySQL数据库语法(五-->多表查询)
    多表查询1.innerjoin:代表选择的是两个表的交差部分。内连接就是表间的主键与外键相连,只取得键值一致的,可以获取双方表中的数据连接方式。语法如下:SELECT列名1,列名2...FROM表1INNERJOIN表2ON表1.外键=表2.主键WhERE条件语句;2.leftjoin:代表选择的是前面......
  • SQLServer如何监控阻塞会话
    一、查询阻塞和被阻塞的会话SELECTr.session_idAS[BlockedSessionID],r.blocking_session_idAS[BlockingSessionID],r.wait_type,r.wait_time,r.wait_resource,s1.program_nameAS[BlockedProgramName],s1.login_nameAS[Block......
  • Mysql单表普通查询(新手推荐)
    大家在学校里学mysql查询的时候,尤其是遇到比较复杂查询的时候,不知道有没有经常遇到问题。小编在学习mysql的时候,经常哪个怎么搞,得出的值也老是不对,今天在这里分享一些原理性的东西,帮助大家理解如何去查询基础 3、select...聚合函数from表名1、where.........
  • SqlSugar:基于SQLSugar框架在 .Net环境中搭建PostgreSQL数据库访问、操作的框架,C#连接
    SqlSugar 是一款老牌.NET开源ORM框架,由果糖大数据科技团队维护和更新,开箱即用最易上手的ORM 优点:【生态丰富】【高性能】【超简单】【功能全面】【多库兼容】【适合产品】 【SqlSugar视频教程】 支持:.netframework .netcore3.1 .ne5.net6.net7.net8.n......
  • MySQL中如何快速定位占用CPU过高的SQL
    作为DBA工作中都会遇到过数据库服务器CPU飙升的场景,我们该如何快速定位问题?又该如何快速找到具体是哪个SQL引发的CPU异常呢?下面我们说两个方法。聊聊MySQL中如何快速定位占用CPU过高的SQL。技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。 以一......