Linux下硬盘测试命令dd
本文于 640 天前发布,最后更新于 53 天前

一、文档目的

规范使用 dd 命令测试磁盘的真实物理读写性能,特别是针对数据库场景(模拟 Redo Log 同步写入、Data File Direct I/O),为数据库选型、性能调优和故障排查提供准确的数据基准。

二、测试前的环境准备

  • 测试目录:务必在数据库数据目录或挂载点下执行(如 /data/),避免测试系统盘 /root 或 /home 产生干扰。
  • 预留空间:确保测试文件(通常 1~2GB)不会写满磁盘。
  • 清理缓存(可选,更精准):测试前可执行 sync && echo 3 > /proc/sys/vm/drop_caches 清空系统缓存(需 root 权限),防止脏数据干扰读取测试。
  • 测试文件清理:测试完成后记得 rm -f ./test.sdf,避免占用空间。

三、核心参数说明

oflag=direct:直接 I/O,绕过系统页缓存写入磁盘。读/写测试必备,模拟数据库 Data File 直接写入。
iflag=direct:直接 I/O,绕过系统页缓存从磁盘读取。读/写测试必备,模拟数据库 Data File 直接读取。
oflag=dsync:同步 I/O,确保每次写入完全落盘后才返回。模拟数据库 Redo Log(重做日志) 的严格持久化要求。
conv=fdatasync:测试结束后显式调用 fsync,确保全部落盘。模拟批量导入或表空间文件写入,比 dsync 吞吐量更高

四、基准测试命令模板

以下命令均以 bs=32k 为例。如果您的数据库页大小不同(如 8K、16K),请相应调整 bs 参数,保持大小与业务实际 I/O 特征一致

4.1 写入性能测试

目标:测试极端严苛的同步写入性能。

# 写入 1.3GB 数据(bs=32k, count=40k),强制每次 I/O 同步落盘
dd if=/dev/zero of=./test.sdf bs=32k count=40k oflag=dsync

结果解析:输出的末尾如 263 MB/s 即为写入速度。

4.2 写入性能测试

目标:测试数据库 Checkpoint 或批量 ETL 场景。

# 写入 1.3GB,最后统一调用 fsync 落盘(吞吐量通常比 dsync 高)
dd if=/dev/zero of=./test.sdf bs=32k count=40k conv=fdatasync

命令

dd if=/dev/zero of=/dmdata/test.sdf bs=32k count=40k oflag=dsync

等待测试完成即可

[root@dameng ~]# dd if=/dev/zero of=/dmdata/test.sdf bs=32k count=40k oflag=dsync
40960+0 records in
40960+0 records out
1342177280 bytes (1.3 GB, 1.2 GiB) copied, 101.031 s, 13.3 MB/s

命令详解:

  • dd用于复制,从if读出,写到of。
  • if=/dev/zero不产生IO,因此可以用来测试纯写速度。
  • 同理of=/dev/null不产生IO,可以用来测试纯读速度。
  • bs是每次读或写的大小,即一个块的大小,count是读写块的数量。

注意
bs设置的大小可以用来模拟数据库的页大小,即4K,8K,16K,32K。便可用于测试数据库服务器磁盘读写能力。

暂无评论

发送评论 编辑评论


|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇