检测SqlServer服务器CPU是否瓶颈

检测SqlServer服务器CPU是否瓶颈 初次写博文,分享个人心得,欢迎大虾小虾来拍砖。 系统自带的性能监视器 在开始命令框中输入perfmon按enter键即可打开性能监视器 可以通过监视 % Processor Time 的值察看cpu是否遇到瓶颈,此值最好不要超出80% 如果达到了比

检测SqlServer服务器CPU是否瓶颈

初次写博文,分享个人心得,欢迎大虾小虾来拍砖。

 

 系统自带的性能监视器

   在开始命令框中输入perfmon按enter键即可打开性能监视器

可以通过监视 % Processor Time 的值察看cpu是否遇到瓶颈,此值最好不要超出80%

如果达到了比较高的值也并不一定就是CPU的问题,一般来说CPU是不会有什么问题的,也有可能是IO,内存,网站空间,程序本身的问题,CPU只是表相而已

 可以用数据收集器定时收集

下面的语句可以查询出耗时最长的SQL语句

   select top 50 *, (s.total_worker_time / s.execution_count) as avgworkertime from sys.dm_exec_query_stats s
 cross apply sys.dm_exec_sql_text(s.sql_handle)
 order by avgworkertime desc

单位是微秒

 

SqlServer ProFile监视

选择TSQL_Duration模板监视SQL语句执行时长,可以选择保存为文件或者数据库,可以设置监视时长,监视的结果可以根据数据库引擎优化顾问进行优化

数据库引擎优化顾问可以优化SQL文件,虚拟主机,香港服务器租用,sqlserverprofile监视的文件或保存的数据表

 

在查询过程当中,编译查询计划是最为耗CPU的过程,以下可以查询出生成查询计划最多的SQL语句

select top 50 * from sys.dm_exec_query_stats q
cross apply sys.dm_exec_sql_text(q.sql_handle) t
order by q.plan_generation_num desc

尽可能的去优化这些SQL语句,以充分利用查询计划,可以大大提高查询效率

下面的语句可以查询出优化的结果

select * from sys.dm_exec_query_optimizer_info

占用时间           总优化次数     每次优化单个语句(查询)所用的平均时间(秒)。

elapsed time    11937503     0.140496722220612

SQL Statistics对象提供计数器来监视编译和发送到SQL Server实例的请求类型。必须通过监视查询编译和重编译的数量结合接收到的批处理数量来找出高CPU消耗是否是由编译引起。

理想情况下,SQL Recompilations/sec和Batch Requests/sec的比率应该应该非常低,除非用户提交的是即席查询。

关键数据:

SQLServer:SQL Statistics->Batch Requests/sec    

SQL Server: SQL Statistics: SQL Compilations/sec

话袋AI笔记 话袋AI笔记

话袋AI笔记, 像聊天一样随时随地记录每一个想法,打造属于你的个人知识库,成为你的外挂大脑

话袋AI笔记 195 查看详情 话袋AI笔记

SQL Server: SQL Statistics: SQL Recompilations/sec

SQL Trace

  如果性能计数器显示非常大的重编译数量,重编译可能正在造成高CPU消耗。接下来需要需要利用SQL Profiler纪录的trace来找出当时被重新编译的存储

过程。SQL Server Profiler trace可以给出这些信息连同重编译的原因。可以使用事件来获取这些信息。

SP: Recompile / SQL: StmtRecompile. The SP:Recompile and the SQL:StmtRecompile事件类显示哪些存储过程和语句曾经被重新编译过。当编译一个存储过程时,为存储过程和每一个被编译的语句生成事件。然而,当一个存储过程被重新编译时,只有引起重新编译的语句才会被生成一个事件(不同于SQL Server 2000中的整体存储过程编译)。

 

  SP:Recompile事件类中的重要的数据列如下所示:

  ◆Event Class

  ◆EventSubClass

  ◆ObjectID(表示包含这个语句的存储过程)

  ◆SPID

  ◆Start Time

  ◆SqlHandle

  ◆TextData

  EventSubClass数据列对于确定重编译原因来说非常重要。一旦过程或者触发器被重新编译,SP:Recompile就会被触发,但是有可能被重编译的即席批处理不会引发这个事件。 在SQL Server 2005中,监视SQL:StmtRecompiles时非常有用的,任何类型的批处理,即席查询,存储过程或者触发器被重编译时,这个事件类都会被触发。

  保存trace文件,使用下面的查询来查看所有的重编译事件。

Select spid,starttime,textdata,eventsubclass,objected,databaseid,
sqlhandle from fn_trace_gettable (‘filepath.trc’,1) where EventClass in(37,75,166)

  EventClass 37是SP:Recompile, 75是CursorRecompile, 166是SQL:StmtRecompile.

  也可以进一步对这些查询结果根据Sqlhandle和ObjectID列进行分组来查看是否有某个存储过程存在大量的重编译或者由于其他原因导致的重编译(如Set选项变化)。

  Showplan XML For Query Compile. 这个事件类在Microsoft SQL Server编译或者重新编译SQL语句时发生。这个事件中有关于被编译或者重编译的语句的信息。这些信息包括查询计划和存在问题的过程的Object ID。如果发现SQL Compilations/sec计数器数值很高,应该监视这个事件类。通过这些信息可以发现哪些语句被频繁的重编译。可以使用这些信息改变那些语句的参数。这应该会降低重新编译的次数。

 

 

 

 

posted on

Copyright ©2013 gejianhua Powered by: 博客园 模板提供:沪江博客

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1083472.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月2日 21:24:02
下一篇 2025年12月2日 21:27:12

相关推荐

  • 如何使用PHP从SQLServer获取存储过程的详细教程?

    php可以实现从sql server获取存储过程的详细信息,但需通过sqlsrv或pdo_sqlsrv扩展配合以下步骤完成:1. 确保php环境已正确安装并启用sqlsrv扩展,检查php.ini中启用了extension=sqlsrv和extension=pdo_sqlsrv,并使用sqlsrv_…

    2025年12月4日 后端开发
    000
  • Linux下安装SQLServer2019的方法

    可以直接参考官方文档:https://www.php.cn/link/32824c14387bff0a269b11c976c1d0d0 安装SQL Server 首先,下载 SQL Server 2019 (15.x) 的 Red Hat 存储库配置文件: sudo curl -o /etc/yum…

    2025年12月4日
    000
  • 怎么在同一台服务器上安装多个MySQL

    一、安装前的准备工作 在进行MySQL多实例的安装前,需要进行以下准备工作: 准备多个MySQL的安装包,可以从MySQL官网下载适合自己环境的版本进行下载:https://dev.mysql.com/downloads/ 准备多个MySQL数据目录,可以通过创建不同的目录来支持不同的MySQL实例…

    数据库 2025年12月4日
    000
  • 简易项目搭建(用于一般杂七杂八的小功能点)

    在工作中,我们常常会遇到许多需要完成的小功能点。以我自己的工作情况为例,最常见的是两个方面:1、控制台项目;2、web界面(纯前端)。 首先让我们讨论控制台项目的工作内容。在没有使用PostMan之前,工作中大量使用接口调用。在项目准备阶段,首先需要对接口的使用进行描述。在主要使用WebServic…

    2025年12月4日
    000
  • 条码打印软件批量制作JAN13条码的方法

    jan码属于日本特有的条码规范,其编码准则和国际通行的ean码一致,只是称谓有所差异。如果要大批量生成jan13条码,可以借助条码打印软件里的ean13码功能来实现。两者唯一的不同点在于,jan13条码的前两位数字必须是45或49,这代表日本的国家代码,类似于我国条码以69开头的情形。 1、 制作J…

    2025年12月3日 软件教程
    000
  • linux怎么查看是否是虚拟机

    查看方法:1、执行“dmidecode -s system-product-name”命令,如果输出“VMware Virtual Platform”则为虚拟机;2、执行“lscpu”命令,如果输出信息中有“VMware”则为虚拟机。 本教程操作环境:linux5.9.8系统、Dell G3电脑。 …

    2025年12月3日
    000
  • SQLServer插入标识列数据怎么写_SQLServer标识列插入方法

    要向SQL Server的标识列插入指定值,需启用IDENTITY_INSERT。首先执行SET IDENTITY_INSERT 表名 ON;然后在INSERT语句中显式包含标识列并赋值;操作完成后必须执行SET IDENTITY_INSERT 表名 OFF;该操作仅限会话级别,且需ALTER权限,…

    2025年12月3日 数据库
    000
  • SQLServer连接字符串怎么配置_SQLServer数据源连接字符串设置

    配置SQL Server连接字符串需设置Data Source、Initial Catalog、User ID、Password等参数,推荐通过配置文件定义以提升可维护性;使用Windows身份验证时需启用Integrated Security=True,并确保用户权限合法;错误配置将导致连接超时、…

    2025年12月3日 数据库
    000
  • SQLServer插入特殊字符怎么转义_SQLServer特殊字符转义插入

    使用参数化查询可解决SQL Server中特殊字符转义问题并防止SQL注入,推荐通过参数传递数据而非拼接SQL,同时注意单引号、反斜杠等字符的手动转义及编码一致性。 插入SQL Server数据库时遇到特殊字符转义问题,通常是因为这些字符与SQL语法冲突。核心在于使用正确的转义方法,确保数据被正确解…

    2025年12月3日 数据库
    000
  • SQLServer如何计算连续登录_SQLServer中连续登录问题解法

    答案是使用ROW_NUMBER()窗口函数结合日期差计算分组键,识别连续登录“岛屿”。通过先获取用户每日唯一登录记录,再为每个登录日期分配行号并计算LoginDate减去行号的差值作为分组依据,相同差值的日期属于同一连续区间,最后按用户和该差值分组统计天数,即可得出各连续登录段的起止日期与天数。此方…

    2025年12月3日 数据库
    000
  • SQLServer镜像数据源怎么配_SQLServer数据库镜像数据源配置

    SQL Server数据库镜像的核心在于服务器端先建立镜像伙伴关系,客户端再通过连接字符串配置故障转移伙伴实现自动切换。首先,主数据库需处于完整恢复模式,并通过完整备份和日志备份将数据以NORECOVERY方式还原到镜像服务器;接着,在主、镜像及见证服务器上创建镜像端点并确保防火墙开放相应端口;然后…

    2025年12月3日 数据库
    000
  • SQLServer命名实例数据源配置_SQLServer命名实例连接设置

    连接SQL Server命名实例需在连接字符串中使用“服务器名实例名”格式,如MYSERVERSQLEXPRESS,客户端通过SQL Server Browser服务获取实例端口完成连接;不同编程语言(如C#、Java、Python)虽语法不同,但均遵循此核心模式;常见错误包括实例名错误、SQL S…

    2025年12月3日 数据库
    000
  • SQLServer数据源驱动怎么选_SQLServer数据源驱动程序选择

    答案:选择SQL Server数据源驱动应根据应用语言和需求确定。Java应用首选Microsoft JDBC Driver,.NET应用推荐Microsoft.Data.SqlClient,二者在性能、功能支持和新特性集成上优于通用ODBC驱动;虽ODBC适用于跨平台或遗留系统,但原生驱动因更优的…

    2025年12月3日 数据库
    000
  • SQLServer添加记录如何实现_SQLServer插入新记录方法

    答案:SQL Server中通过INSERT INTO语句插入数据,可结合VALUES、SELECT、BULK INSERT等实现单条、批量或跨表插入;处理约束冲突可用IF NOT EXISTS、MERGE或TRY…CATCH;从查询结果插入使用INSERT INTO … S…

    2025年12月3日 数据库
    000
  • SQLServer插入时性能监控怎么看_SQLServer插入性能监控方法

    SQL Server插入性能监控与优化需从多维度入手,核心在于分析事务日志写入、I/O开销、锁等待及索引维护。通过动态管理视图(DMVs)可实时诊断阻塞与等待类型;扩展事件精准捕获INSERT语句的执行细节与资源消耗;性能监视器(PerfMon)提供系统级指标如日志刷新速率和页分裂频率;查询存储则用…

    2025年12月3日 数据库
    100
  • SQLServer插入时加密数据怎么操作_SQLServer加密数据插入方法

    SQL Server数据加密核心方法包括:1. 使用ENCRYPTBYPASSPHRASE进行密码短语加密,操作简单但安全性较低,适用于测试场景;2. 使用ENCRYPTBYKEY通过对称密钥加密,结合数据库主密钥、证书和对称密钥的分层体系,安全性高,适合生产环境;3. 单元格级加密用于保护特定敏感…

    2025年12月3日 数据库
    000
  • postgresqlserverless模式是否适用数据库_postgresql无服务器模式讨论

    PostgreSQL 无服务器模式适合流量波动大、成本敏感的场景,如开发测试、MVP 项目、事件驱动应用;其自动伸缩、按需付费特性降低运维负担,但不适用于高并发稳定负载、延迟敏感或复杂事务场景,需根据实际 workload 权衡选择。 PostgreSQL 无服务器(Serverless)模式正在成…

    2025年12月2日 数据库
    000
  • SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑

    SQLSERVER:PREEMPTIVE_OS_GETPROCADDRESS等待类型的困惑 翻译自: PREEMPTIVE_OS_GETPROCADDRESS等待类型在SQLSERVER2008里是一个新的等待类型 这个等待类型的作用是当GetProcAddress跟踪SQLSERVER实例调用扩展…

    数据库 2025年12月2日
    000
  • 2014 OLTP Memory Database lock 测试

    根据微软的说法,由于内存数据库使用了乐观并发控制,所以事务不需要锁来锁定资源保证一致性。微软认为在内存数据库的事务中冲突和失败是非常少的情况,所以假定 name size name size dbo20480 ix_Int_Val10240   [Description]  request_sess…

    2025年12月2日
    000
  • SQLSERVER数据库快照的工作方式

    SQLSERVER数据库快照的工作方式 翻译自:how database snapshots work 最近有一个帖子《errorlog中的异常信息rolled forward 和rolled back》 里面说到: 每周六凌晨1点会出现以下信息,服务器及数据库未出现重启,节点未切换,filestr…

    2025年12月2日 数据库
    000

发表回复

登录后才能评论
关注微信