磁盘问题定位与解决

摘要:
内存不足会导致与磁盘频繁交互。通常需要从磁盘读取大量冷数据,或者一次通常会向磁盘写入大量脏页。这不能满足业务需求。要解决磁盘问题,首先诊断内存中是否存在瓶颈。请参阅上一篇文章-内存问题的位置和解决方案。如果内存没有问题,请分析语句压力,以及是否存在需要从磁盘读取的未优化语句。当数据库压力较低或磁盘资源紧张时,可以进行适当的整合。
磁盘问题定位基本流程:
磁盘问题定位与解决第1张
 
 

磁盘的压力分析,主要使用下面几个性能计数器 (针对单独的物理盘,每个物理磁盘都会有一组):

  1. Avg. Disk Read Queue Length   读队列(越小越好,理想值 2 以下,队列越高说明一个操作的响应时间越长)
  2. Avg. Disk Write Queue Length  写队列(越小越好,理想值 2 以下,队列越高说明一个操作的响应时间越长)
  3. Avg. Disk sec/Read  
  4. Avg. Disk sec/Write
  5. Disk Read Bytes/sec
  6. Disk Write Bytes/sec
 
注:常规判断系统磁盘压力,通过读写队列即可判断,后面4个主要用于磁盘是否自身性能存在问题,本文不介绍。
 
 
步骤1.排除其他因素影响
    磁盘IO一般是整个数据库的瓶颈,磁盘写入速度的快慢直接影响着数据库的性能,一般推荐数据库服务器不要与其他应用共用服务器,同时也要尽量避免在数据库服务器上做大的文件处理工作。
 
步骤2.磁盘问题定位
磁盘队列计数器持续很高(Avg. Disk Read Queue Length、Avg. Disk Write Queue Length)

磁盘问题定位与解决第2张

磁盘问题定位与解决第3张

磁盘响应时间很长(磁盘队列很高,请求需要排队完成,所以表现为响应时间长)

磁盘问题定位与解决第4张

磁盘队列波动

磁盘问题定位与解决第5张

磁盘问题定位与解决第6张


 
步骤3.磁盘问题分析与解决(通用步骤)

 首先有哪些情况会对磁盘造成压力?

    1. 内存不足导致需要频繁和磁盘交互  (一般为主因)
    2. 经常有大量冷数据需要从磁盘读取,或经常有大批量脏页一次写入(checkpoint触发)
    3. 磁盘读写速度,不能满足业务需要
 
 
解决磁盘问题首先请诊断内存是否存在瓶颈,参照上一篇 -----内存问题定位与解决
如果内存不存在问题,请分析语句压力,是否有不优化的语句(要查询大量数据)需要从磁盘读取。
并查看系统的文件磁盘规划:

看一下这个系统的磁盘及数据库文件分布

   磁盘问题定位与解决第7张

   可以看到这个服务器只配置了一块物理磁盘

  

   数据库1

   磁盘问题定位与解决第8张

   

数据库2

   磁盘问题定位与解决第9张

   tempDB

   磁盘问题定位与解决第10张

 2个业务频繁的大数据库,数据文件、日志文件和系统tempDB都在同一个磁盘上!这样磁盘的读写速度势必不能满足业务要求。

 
磁盘规划建议:

       规划磁盘分配的好处:假设你有两个数据库,业务操作都很繁忙,且读/写量都很大对磁盘的压力都很大,那么你自然会想到把他们分散到不同的磁盘上,这样每个库针对自己的磁盘读/写,不会互相影响且压力相当于原来的1/2,从而可以提升磁盘操作的响应时间。

   数据库磁盘该怎么划分? 不同系统不同环境可能都不相同,下面给出一些简单建议:

    1. 按照文件类型划分:数据文件、日志文件、tempDB文件、备份文件,分别放在一个物理磁盘
    2. 按照数据库划分:不同的业务数据库(压力大的)分别放在一个物理磁盘,tempDB和备份文件各一个物理磁盘。

   上面的两种分法是基本的划分方式,但是根据系统压力系统配置,均有不同情况。

   当你的数据库压力较小,或磁盘资源紧张可以做适当的合并。当你的数据库特别大,并且有多个文件组,也可以选择把文件组更进一步细分。

   类似于做了分区表,不同分区放在不同磁盘上,当需要多个分区数据时,可以利用IO并行提升效率。

免责声明:文章转载自《磁盘问题定位与解决》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇threejs- z-fighting 问题(模型的重叠部位便不停的闪烁起来。这便是Z-Fighting问题)Django模型Model之数据控制详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python读取数据库表数据并写入excel

一个简单的使用python读取mysql数据并写入excel中实例 1、python连接mysql数据库 conn = pymysql.connect(user='root',host='127.0.0.1',port=3306,passwd='root',db='python',charset='utf8') #连接数据库 cur = conn.cur...

[Influxdb]记录

1. Centos使用yum安装 wget https://repos.influxdata.com/rhel/6/x86_64/stable/influxdb-1.7.2.x86_64.rpm sudo yum localinstall influxdb-1.7.2.x86_64.rpm 2. 图片如下 3.在/usr/bin 目录下会有如下文件 in...

VS中关于数据库的操作

1.数据库迁移 第一步: 第二步: 在窗口中选择项目中的EntitiyFramwork项目(与数据库连接的文件集) 第三步: 输入update-database    二:数据对比 第一步:    第二步:选择需要对比的源数据库和目标数据库 第三步:选择需要对比的表、字段或视图 第四步: 第五步: 三、数据架构对比(当表结构发生改变时) 第一步:...

sql2000数据库置疑造成的原因以及如何解决置疑

造成数据库置疑一般有以下几点: 1)电脑非法关机或者意外停电; 2)磁盘有坏道或者损坏; 3)数据库感染病毒,日志文件损坏; 4)非正常情况下移动数据库文件 5)系统,硬盘,经常强制性关机(如断电)类似情况都会 建议:电网不稳定的地区配备UPS电源,电脑禁止非法关机,做数据库维护计划定期自动备份,电脑定期做好病毒查杀。   解决步骤: 解决由于sql200...

Sqli-labs 学前准备 搭建SQL注入平台

sqli-labs是一款学习sql注入的开源平台,共有75种不同类型的注入。 搭建步骤: 1.在Windows系统中安装WAMP 下载地址:https://pan.baidu.com/s/1HY0hFnj6ywKjwHhB1vlOfg 解压密码:ms08067.com 双击安装即可 2.从github上(https://github.com/Audi-...

MySQL笔记——用户管理

MySQL服务的默认端口是3306 用户权限管理 关于mysql数据库中的user表:   user表是MySQL最重要的权限表之一,在用户登录就是匹配user表中的Host、User、Password这三个字段,当三个字段同时匹配时才能允许登陆。   user表中以priv结尾的字段就是决定了用户的权限,这些字段默认都是N。 关于mysql数据库中的u...