DM8达梦数据库磁盘 I/O 性能诊断 您所在的位置:网站首页 查看磁盘性能参数 DM8达梦数据库磁盘 I/O 性能诊断

DM8达梦数据库磁盘 I/O 性能诊断

2024-07-12 10:24| 来源: 网络整理| 查看: 265

我们在 Linux 服务器排查问题时,一般会通过 top、vmstat、free、netstat、df -h 等命令排查 CPU、内存、网络和磁盘等问题。有的时候我们需要更进一步了解磁盘 I/O 的使用情况。本文介绍常用 I/O 性能分析命令和性能诊断方法。

I/O 性能分析命令iostat

iostat 是 Linux 最常见的磁盘 I/O 监控工具。

基本用法 $iostat -d -x -k 1 10

-d 表示:显示设备(磁盘)使用状态。

-k 表示:某些使用 block 为单位的列强制使用 Kilobytes 为单位。

1 10 表示:数据显示每隔 1 秒刷新一次,共显示 10 次。

-x 参数:我们可以获得更多统计信息。

iostat命令

参数含义

rrqm/s:每秒进行 merge(多个 io 的合并)读操作的数量。

wrqm/s:每秒进行 merge(多个 io 的合并)写操作的数量。

rsec/s:每秒读取的扇区数。

wsec/s:每秒写入的扇区数。

rKB/s:每秒读多少k字节,在 kernel 2.4 以上,rkB/s=2×rsec/s,因为一个扇区为 512 bytes。

wKB/s:每秒写多少k字节,在 kernel 2.4 以上,wkB/s=2×wsec/s,因为一个扇区为 512 bytes。

avgrq-sz:平均请求扇区的大小。

avgqu-sz:是平均请求队列的长度。毫无疑问,队列长度越短越好。

await:每一个 IO 请求的处理的平均时间(单位是微秒毫秒)。这里可以理解为 IO 的响应时间,一般地系统 IO 响应时间应该低于 5 ms,如果大于 10 ms 就比较大了。这个时间包括了队列时间和服务时间,也就是说,一般情况下,await 大于 svctm,它们的差值越小,则说明队列时间越短,反之差值越大,队列时间越长,说明系统出了问题。

svctm:表示平均每次设备 I/O 操作的服务时间(以毫秒为单位)。如果 svctm 的值与 await 很接近,表示几乎没有 I/O 等待,磁盘性能很好,如果 await 的值远高于 svctm 的值,则表示 I/O 队列等待太长,系统上运行的应用程序将变慢。

%util:在统计时间内所有处理 IO 时间,除以总共统计时间,该参数暗示了设备的繁忙程度,如果该参数是 100% 表示设备已经接近满负荷运行了(当然如果是多磁盘,即使 %util 是 100%,因为磁盘的并发能力,所以磁盘使用未必就到了瓶颈)。

iotop

iotop 是一个用 python 编写的类似 top 界面的磁盘 I/O 监控工具。

基本用法 iotop

iotop命令

参数含义

DISK READ 和 DISK WRITE 字段:代表块设备在采样时间内的 I/O 带宽。

SWAPIN 和 IO 字段:表示当前进程或线程花费在页面换入和等待 I/O 的时间。

PRIO 字段:表示 I/O 优先级。

Total DISK READ 和 Total DISK WRITE 字段:表示总的 I/O 读写情况。

常用参数 \-o --only 只显示实际具有I/O操作的进程或线程。可以通过快捷键o进行控制\-b --batch 非交互式模式,可以用于保存输出结果\-n 刷新次数\-d 刷新间隔时间\-P 只显示进程,不显示线程\-p 监控指定进程或线程\-k 使用KB表示I/O带宽。默认情况下,iotop使用B/s,K/s,M/s表示I/O带宽。\-u 监控指定用户的I/O操作情况\-t 在每行输出加上时间戳\-q 只在第一次输出时显示列名称\-qq 不显示列名称\-qqq 不显示总的I/O信息I/O 性能诊断

用 vmstat 命令了解系统状况

[root@dm8 ~]# vmstat 1 10procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 0 0 0 2074352 93616 732548 0 0 41 25 77 82 0 1 99 0 0 0 0 0 2074600 93616 732548 0 0 0 8 128 194 0 0 100 0 0 0 0 0 2074432 93616 732548 0 0 0 8 193 234 0 1 99 0 0 0 0 0 2074416 93616 732548 0 0 0 8 121 194 0 0 100 0 0 0 0 0 2074424 93616 732548 0 0 0 24 136 194 0 0 100 0 0 0 0 0 2074700 93624 732540 0 0 0 80 771 721 0 2 98 0 0 0 0 0 2074796 93624 732552 0 0 0 4 100 180 0 0 100 0 0 0 0 0 2074672 93624 732552 0 0 0 8 107 179 0 0 100 0 0 0 0 0 2074860 93624 732552 0 0 0 8 164 224 0 0 100 0 0 0 0 0 2074596 93624 732552 0 0 0 8 114 187 0 0 100 0 0

如果 b 的值为 2~3 倍 CPU 数量,bi 和 bo 的值很大(有时 bi 和 bo 值很小,但 in 和 cs 很大,也会引起磁盘 IO 负载重),wa 的值持续很高,如高于 40,id 也持续高于 70,这些现象都表明系统的 IO 可能出现性能问题。可以进一步通过 iostat 命令分析,如下所示:

[root@dm8 ~]# iostat -x 1 5Linux 2.6.32-642.kb5.ky3.x86_64 (dm8) 2020年11月02日_x86_64_ (4 CPU)avg-cpu: %user %nice %system %iowait %steal %idle 0.09 0.00 0.72 0.03 0.00 99.17Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s avgrq-sz avgqu-sz await r_await w_await svctm %utilsda 3.04 19.26 3.90 4.33 312.06 188.78 60.85 0.02 2.07 0.36 3.61 1.70 1.40dm-0 0.00 0.00 6.67 23.60 309.97 188.77 16.48 0.08 2.64 0.54 3.24 0.46 1.40dm-1 0.00 0.00 0.07 0.00 0.57 0.00 8.00 0.00 0.22 0.22 0.00 0.13 0.00

查看 iostat 的结果时注意事项如下:

首先看 %util(服务 IO 的时间占总时间的百分比),如果这个值接近 100%,表示 IO 的请求很多(表示任务服务的所有时间几乎都用在 IO 上),这种现象表明磁盘 IO 性能出现瓶颈。 再看 await(表示每次io设备等待时间)和 svctm(表示每次 IO 设备服务时间,一般性能越好的磁盘,这个值越小)。

如果 svctm 接近 await ,说明 IO 几乎没有等待,每个 IO 设备都得到及时的响应。

如果 svctm 远小于 await ,说明 IO 等待队列可能很长,IO 的得到服务的时间将延长(排队+服务时间)。

avgqu-sz:表示 IO 排队的现象,如果排队过长会影响 IO 的响应时间。 r/s+w/s:可以计算当前系统的 iops(可以结合硬盘的测试或者硬件参数来衡量是否超过磁盘的 iops 最大值)。

通过 iostat 了解到如果磁盘 I/O 出现性能瓶颈,我们可以借助 pidstat ,定位出导致瓶颈的进程,分析进程的 I/O 行为,结合应用程序的原理,分析这些 I/O 的来源。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有