当前位置: 首页 > news >正文

记一次Sqlserver数据库性能分析

说明

SQL Server数据库近两天异常卡顿,严重影响程序使用。

评估过程

一、获取当前性能情况

使用SQL server运维工具箱获取巡检报告
人为补充运维工具箱没获取到的内容

二、分析

1、CPU使用率超高

28041743675988_.pic.jpg
该图可详见巡检报告,近7天以来CPU的使用率都超高,故去看巡检报告第六大项的第一项,TOP慢语句,如下图:
image.png
由上图可见,该系统中的慢语句还是比较多的,尤其上图中的红框显示,执行次数竟然达到5000多次,由于巡检报告展示原因,这里只显示SQL标识,现在查询消耗较大的程序语句(查询语句见附录),如下图:
28061743676063_.pic.jpg
这里为了我们这份报告的直观性,我这里将慢语句及其对应的SQL语句都查询出来了,可见,大于1s的语句竟然超过1万行,这明显降低了服务器的性能。
同时,我们观察篮框所示语句,可以清楚的看到基本都是同一个select语句,只是where条件不同罢了,故猜想,肯定是该查询表缺失了索引导致,现在查询该服务器缺失索引情况
28071743676093_.pic.jpg
上图显示为缺失索引影响较大的前10条,尤其是第一行显示的表,添加该索引会有显著性提高,所以,综合以上来看,导致CPU居高不下的原因是由于缺失索引的慢语句所致。

2、内存使用情况

28081743676174_.pic.jpg
上图所示,内存使用在正常范围内,但是根据该服务器的整体特性看,还可以做进一步优化
查询服务器总内存,服务器总内存为24G
28131743991609_.pic.jpg
查询分配给SQL server的使用内存,为16G
image.png
查询当前SQL server已经使用的内存
image.png
根据上图可见,服务器分配给SQL server16G,SQL server目前已经使用16G,虽然整体内存在合理范围内,但是不可避免的会使用一点交换空间,所以,建议分配给SQL server的内存是服务器内存的90%左右,大概20G.

3、数据库使用情况

查询上次(4月1日)巡检和今天(5月27)巡检概况
数据库大小
28151743991779_.pic.jpg
根据以上显示,近两个月数据库增长1G多一点

查询数据文件大小
28161743991806_.pic.jpg

4、文件系统资源

28171743991832_.pic.jpg
根据上图可知,D盘的剩余空间仅剩5G
再看数据库在磁盘上的分布
WeChat0ea598ce81b7a05be199af38ed2e7921.jpg
可见,重要数据库分布在D盘,这是很危险的,虽然数据文件增长较慢,但是可能会因为日志或者其他原因导致D盘空间撑爆,届时SQL server也会由于数据文件或日志文件无法写入而停止运行。

5、会话资源

28191743991894_.pic.jpg
根据上图所示,该服务器的整体会话连接很少,但是这么少的会话就有10个未提交,在结合上边第一条提到的有关缺失索引的语句,极有可能因为占用资源而导致死锁,建议养成一个良好的操作习惯,事务完成之后及时提交。

总结

建议:
1、 根据慢语句、索引缺失添加相关的索引,降低CPU使用率;
2、 增加SQL server的可利用内存,合理分配不浪费;
3、 清理SQL server的日志大小或者清理D盘的空间,防止D盘撑爆;
4、 空闲事务及时提交,避免死锁。

附录:
根据SQL标识查询对应的SQL语句,查询脚本为

SELECT SUBSTRING(st.text, (qs.statement_start_offset/2) + 1,
((CASE statement_end_offset
WHEN -1 THEN DATALENGTH(st.text)
ELSE qs.statement_end_offset END
- qs.statement_start_offset)/2) + 1) 
FROM
sys.dm_exec_query_stats AS qs CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) st
WHERE
qs.sql_handle=sql_handle
--sql_handle 为上图中的sql标识

hhh6.jpg

相关文章:

  • 剑指Offer(数据结构与算法面试题精讲)C++版——day8
  • 一文详解OpenCV环境搭建:Ubuntu20.4使用CLion配置OpenCV开发环境
  • SQL 函数概述
  • Vue3实战四、项目布局及布局功能实现
  • 晋城市电子健康证上传照片尺寸要求及手机拍照制作方法
  • PyCharm使用Flask启动项目后,如何修改文件,开启启动加载或是热启动,不用重启项目,直接生效。
  • 双引擎驱动:解密音视频体验的QoS技术底座与QoE感官革命
  • ElasticSearch迁移数据
  • “剪贴板劫持“攻击:黑客利用虚假验证码通过入侵网站窃取数据
  • 自动化框架及其设计搭建浅谈(三)--自动化测试框架设计最佳实践
  • Elasticearch数据流向
  • Qt添加资源文件
  • APP应用为什么要选择使用游戏盾?从攻防本质到技术突围
  • 6.2 利用yaml进行参数的保存
  • PEM格式证书 = 域名证书.crt + 根证书(root_bundle).crt 含义解析
  • Linux(CentOS10) gcc编译
  • 大疆无人机系列知识
  • HTTP 308 错误永久重定向 (Permanent Redirect)
  • Java BigInteger 详解
  • 从云计算到算网融合:未来已来的算力革命
  • html5做网站好吗/百度提交入口网址是指在哪里
  • 跨境电商平台有哪些可以加盟/富阳seo关键词优化
  • wordpress网址的域名怎么改/沈阳seo整站优化
  • 北京的做网站的公司/重庆百度推广排名
  • 网站开发合同 保密条款/营销网站优化推广
  • 网站链群怎么做/十大网站平台