Random IOPSとSequential IOPSの違いと、ベンチマーク結果の読み方
公開日 2026-08-13 · 更新日 2026-08-13 · 最終検証日 2026-08-13
結論
RandomとSequentialの違いはアクセス位置の連続性です。HDDではシーク時間と回転待ちが加わるためRandomとSequentialの差が桁で開き、SSD/NVMeでは差は大幅に縮みますが消えません(書き込みではガベージコレクションとライトアンプリフィケーションの影響も加わります)。そしてIOPSという数値は、I/Oサイズ・キュー深度・read/write比・direct I/Oの有無を書かない限り比較できません。ベンチマーク結果を読むときは、まずこの4条件が明示されているかを確認します。
この文書の適用条件
| 対象製品 | ストレージ全般(HDD / SATA SSD / NVMe SSD / ネットワーク接続ストレージ) |
|---|---|
| 確認バージョン | fio 3.x、sysstat(iostat)、nvme-cli、Linux(2026-08-13 時点の公開仕様に基づく) |
| 適用環境 | オンプレミス、EC2、Azure VM |
| 必要権限 | fioは対象ファイル/デバイスへのアクセス権(デバイス直接指定時は root)。`nvme list` は root 権限が必要な場合がある |
| 実行影響 | fioはI/O負荷を発生させる。iostat・lsblk・nvme listは参照のみ |
| 再起動 | 不要 |
| 最終検証日 | 2026-08-13 |
そのまま実行できるコマンド
- 対象
- Linux + fio 3.x
- 権限
- 対象ファイルへの読み書き権限(デバイス直接指定なら root)
- 変更作業
- なし(読み取りのみ)だが I/O 負荷が発生する
- Production実行
- 非推奨。検証環境、または本番と共有しないストレージで実行すること
# 対象: Linux + fio 3.x
# 権限: 対象ファイルへの読み取り権限(デバイス直接指定なら root)
# 変更作業: なし(読み取りのみ)だが実行中は他処理の I/O 性能に影響する
# Production 実行: 非推奨。検証環境で実行すること
fio --name=rand_read_4k \
--filename=/mnt/testdir/fio_testfile \
--size=64G \
--rw=randread \
--bs=4k \
--ioengine=libaio \
--direct=1 \
--iodepth=32 \
--numjobs=4 \
--runtime=300 \
--time_based \
--ramp_time=30 \
--group_reporting`--ramp_time=30` は最初の30秒を集計から外す指定で、キャッシュのウォームアップやスケジューラの立ち上がりを除外できます。`--iodepth` と `--numjobs` を変えると数値は大きく変わります。1つの数値だけを見ず、iodepthを変えた複数点で測ってください。
- 対象
- Linux + fio 3.x
- 権限
- 対象ファイルへの読み取り権限
- 変更作業
- なし(読み取りのみ)だが I/O 負荷が発生する
- Production実行
- 非推奨。検証環境で実行すること
# 対象: Linux + fio 3.x
# 権限: 対象ファイルへの読み取り権限
# 変更作業: なし(読み取りのみ)だが I/O 帯域を占有する
# Production 実行: 非推奨。検証環境で実行すること
fio --name=seq_read_1m \
--filename=/mnt/testdir/fio_testfile \
--size=64G \
--rw=read \
--bs=1M \
--ioengine=libaio \
--direct=1 \
--iodepth=8 \
--numjobs=1 \
--runtime=300 \
--time_based \
--group_reportingシーケンシャルではIOPSではなく帯域(BW)を見ます。I/Oサイズが大きいためIOPSの値は小さく出ますが、これは遅いという意味ではありません。IOPSとブロックサイズの積が帯域になるという関係を押さえておけば誤読を避けられます。
- 対象
- Linux + fio 3.x
- 権限
- 対象ファイルへの読み書き権限
- 変更作業
- あり(テストファイルへの書き込みが発生する)
- Production実行
- 実行しないこと。書き込みを伴うため専用の検証領域で行う
# 対象: Linux + fio 3.x
# 権限: 対象ファイルへの読み書き権限
# 変更作業: あり(テストファイルに書き込む。既存データを指定しないこと)
# Production 実行: 不可。専用の検証領域でのみ実行すること
fio --name=rand_rw_70_30 \
--filename=/mnt/testdir/fio_testfile \
--size=64G \
--rw=randrw \
--rwmixread=70 \
--bs=8k \
--ioengine=libaio \
--direct=1 \
--iodepth=32 \
--numjobs=4 \
--runtime=600 \
--time_based \
--ramp_time=60 \
--group_reporting書き込みを含む測定では、実行時間を十分に長く取ってください。SSDでは短時間だと空き領域が潤沢な状態の値しか出ず、ガベージコレクションが効き始めた後の定常状態を測れません。`--filename` には必ず専用のテストファイルを指定し、既存のデータファイルを指定しないでください。
- 対象
- Linux(sysstat / nvme-cli)
- 権限
- 一般ユーザー(nvme list は root 権限が必要な場合がある)
- 変更作業
- なし(参照のみ)
- Production実行
- 可能
# 対象: Linux(sysstat / nvme-cli)
# 権限: 一般ユーザー(nvme list は root が必要な場合がある)
# 変更作業: なし(参照のみ)
# Production 実行: 可能
lsblk -o NAME,SIZE,TYPE,ROTA,MOUNTPOINT,MODEL
sudo nvme list
iostat -x 1 10`lsblk` の `ROTA` は回転メディアかどうかの表示です(1=回転あり)。`iostat -x` の `r/s`・`w/s` が実測IOPS、`rareq-sz`・`wareq-sz` が平均I/Oサイズ、`r_await`・`w_await` がレイテンシ、`aqu-sz` が平均キュー長です。ベンチマーク結果を読む前に、実際のワークロードがどの条件で動いているかをこれで把握します。
結果の読み方
| 列 | 意味 | 確認するポイント |
|---|---|---|
| fio: IOPS | 1秒あたりのI/O完了数 | bs・iodepth・numjobs・rwの4条件とセットでなければ他の測定値と比較できない |
| fio: BW(帯域) | 1秒あたりの転送量 | IOPS × ブロックサイズにほぼ等しい。シーケンシャル測定ではこちらが主指標 |
| fio: clat(completion latency) | I/O完了までの待ち時間 | 平均だけでなく99パーセンタイル以上を見る。IOPSが高くてもテール遅延が大きければ体感は悪い |
| fio: slat / lat | 発行遅延と全体遅延 | slatが大きい場合はデバイスでなくカーネル側の発行経路が疑わしい |
| fio: iodepth分布 | 実際に維持されたキュー深度 | 指定した iodepth まで積み上がっていなければ、負荷生成側が律速している |
| iostat: r/s, w/s | 実測の読み書きIOPS | ベンチマークではなく実ワークロードの値。ここがベンチ条件とかけ離れていればベンチの前提が違う |
| iostat: rareq-sz, wareq-sz | 平均I/Oサイズ(KB) | 実ワークロードのI/Oサイズ。fioの `--bs` はこの値に合わせる |
| iostat: r_await, w_await | 要求あたりの平均待ち時間(ms) | IOPSに余裕があるのに大きい場合、キュー待ちか下位層の遅延 |
| iostat: aqu-sz | 平均キュー長 | 小さいまま遅いならストレージは律速ではない。大きいならデバイスが捌ききれていない |
| lsblk: ROTA | 回転メディアか(1=HDD相当) | 測定対象がHDDかSSDかを取り違えていないかの確認 |
こういう状況で使います
- 製品カタログのIOPS値と、自分で測った値が大きく違う
- 同じストレージなのに、測る人によって数値が何倍も変わる
- ベンチマークでは速いのに、データベースの処理が期待ほど速くならない
- SATA SSDからNVMe SSDに替えたが、体感が変わらない
- NVMeを多数搭載した構成にしたのに、本数に比例して性能が伸びない
- シーケンシャルの数値とランダムの数値のどちらを見るべきか分からない
考えられる原因(可能性の高い順)
01
IOPSという数値が単独では定義されていない
IOPSは「1秒あたりのI/O回数」でしかなく、1回のI/Oのサイズ、同時に発行しているI/Oの数(キュー深度)、読み書きの比率、キャッシュを迂回しているかどうかが決まって初めて意味を持ちます。この4つが揃っていない数値同士は比較できません。
02
HDDでは物理動作がランダムアクセスを支配する
回転メディアでは、1回のランダムI/Oごとにヘッドの移動(シーク)とセクタが回ってくるまでの待ち(回転待ち)が発生します。シーケンシャルアクセスではこれがほぼ発生しないため、同じデバイスでもランダムとシーケンシャルで桁違いの差が出ます。
03
SSD/NVMeでも差はゼロにならない
機械動作が無いためランダムとシーケンシャルの差はHDDより大幅に小さくなりますが、フラッシュのページ/ブロック構造、ライトアンプリフィケーション、ガベージコレクション、マッピングテーブルの参照コストがあるため差は残ります。特に書き込みでは、空き領域が減った定常状態と、初期状態とで数値が変わります。
04
SATA(AHCI)とNVMeではキュー構造が違う
AHCIは基本的に単一のコマンドキューを持つ設計で、同時に発行できるコマンド数が限られます。NVMeは多数の深いキューをCPUコアごとに持てる設計です。この差が効くのは高並列時であり、キュー深度1の逐次アクセスでは差は小さくなります。「NVMeにしたのに速くならない」場合、測定条件が低並列である可能性があります。
05
ベンチマークがキャッシュを測っている
`direct=1` の指定が無い、テストサイズがRAMより小さい、実行時間が短くウォームアップだけで終わっている、といった条件では、測っているのはページキャッシュやコントローラのライトバックキャッシュです。
06
データベースのアクセスパターンと測定条件が合っていない
データベースのデータファイルへのアクセスは一般にランダム寄り、トランザクションログへの書き込みはシーケンシャルかつ同期的です。ログ書き込みはIOPSやスループットではなく書き込みレイテンシが効きます。シーケンシャルリードの数値が良くても、この2つの性能は保証されません。
確認手順
- 1
実ワークロードのI/O特性を先に測る
参照のみ`iostat -x` で `rareq-sz`・`wareq-sz`(平均I/Oサイズ)、`r/s`・`w/s`、`aqu-sz`(キュー長)を取得します。ベンチマークの条件はこれに合わせます。
- 2
デバイス構成を確認する
参照のみ`lsblk -o ...,ROTA,MODEL` と `nvme list` で、測定対象が何なのか(HDDかSSDか、ローカルかネットワーク接続か)を確定します。
- 3
測定条件を明記した状態でfioを流す
低`--bs`・`--iodepth`・`--numjobs`・`--rw`・`--direct=1` を明示し、条件をそのまま記録します。条件の記録がないベンチ結果は後から解釈できません。
- 4
キュー深度を変えた複数点で測る
低iodepthを変えながらIOPSとレイテンシの両方を記録します。IOPSが頭打ちになった後もレイテンシだけが伸びる点が、実用上の上限です。
- 5
書き込みは定常状態まで走らせる
中SSDでは短時間の測定だと初期状態の値しか出ません。`--runtime` を長く取り、`--ramp_time` で立ち上がりを除外します。
- 6
多数デバイス構成では層ごとに切り分ける
低単体デバイス、RAID/ボリューム層、ファイルシステム層、アプリケーション層の順に測り、どこで頭打ちになるかを特定します。
対応方法
すぐに実施できる低リスクの対応
比較しようとしている2つの数値の測定条件を揃える
参照のみI/Oサイズ、キュー深度、並列数、read/write比、direct指定、ワーキングセットサイズを揃えます。揃わないなら比較を諦め、自分の条件で測り直します。
見るべき指標を目的から決める
参照のみ応答時間が問題ならレイテンシ(clatのパーセンタイル)、バッチの所要時間が問題なら帯域、同時実行数が問題ならIOPSを見ます。3つは別々の問いです。
事前検討が必要な変更
実ワークロードに合わせた測定プロファイルを作る
低`iostat` で得た平均I/Oサイズとキュー長を `--bs`・`--iodepth` に反映した測定条件を作り、以後はその条件で継続的に測ります。
並列度を上げてNVMeの特性を活かす
中NVMeの利点は高並列時に出ます。アプリケーション側が逐次I/Oしか発行していないなら、デバイスを替えるより並列度を上げるほうが効果があります。
ログ書き込みとデータ書き込みを分離する
中シーケンシャルかつ同期的なログ書き込みと、ランダムなデータアクセスを同じデバイスに同居させると互いに干渉します。分離の可否を検討します。
再起動・サービス影響を伴う変更
ストレージ層の構成を変更する
高RAIDレベル変更、ストライプサイズ変更、ファイルシステム再作成はデータの移行を伴います。事前バックアップと切り戻し手順が必須です。
専門家のレビューが必要な作業
多数デバイス構成のボトルネックを設計段階で洗い出す
専門家レビュー必須NVMeを多数搭載する構成では、律速はデバイス単体性能ではなく上位の経路に移ります。候補は、CPU/プラットフォームが提供するPCIeレーン数と世代、HBA・エキスパンダ・バックプレーンの構成、外付け筐体(DAS)のリンク帯域、割り込みとI/O処理に使えるCPUコア数、ファイルシステムやソフトウェアRAID層の処理、そして最終的にアプリケーション側の並列度です。どれが効くかは構成ごとに違うため、層ごとに順番に測って特定します。
!注意事項
- この文書では特定製品のIOPS値・帯域値・レイテンシ値を一切示しません。製品の性能値はモデル・ファームウェア・構成・測定条件に依存します。必要な数値はご自身の環境での実測か、メーカーが測定条件を明示している公表値から取得してください。
- fioは実際にI/O負荷を発生させます。本番ストレージや、本番と帯域を共有する経路では実行しないでください。
- 書き込みを含む測定(`randrw`・`randwrite`)は、`--filename` に指定した領域を上書きします。既存のデータファイルやデバイスを指定しないでください。
- `--direct=1` の無い測定、およびRAM容量より小さいワーキングセットでの測定は、ストレージではなくキャッシュを測っています。
- SSDの書き込み性能は短時間の測定では実運用の値になりません。空き領域が減りガベージコレクションが動く定常状態まで走らせる必要があります。
- IOPSが同じでもレイテンシ分布は全く異なることがあります。平均レイテンシだけでなく、99パーセンタイル以上のテール遅延を必ず確認してください。
バージョン・環境による違い
これで解決しない場合に確認すること
CPUが飽和していないか確認する
高IOPSの測定では割り込み処理とI/O発行でCPUを使い切ることがあります。`iostat`と併せて`mpstat`でCPU使用率を確認してください。
I/Oスケジューラの設定を確認する
NVMeでは`none`が適切な場合が多く、回転メディア向けスケジューラのままだと不要な並べ替えが入ります。
ファイルシステムのアライメントを確認する
パーティションやストライプの境界がずれていると、1回の論理I/Oが複数の物理I/Oに分割されます。
アプリケーションの同時実行数を確認する
ストレージが上限に達していないのに遅いなら、律速はアプリケーション側の並列度かロック競合です。
比較対象の測定条件を入手する
他所の数値と比べる場合、その測定のbs・iodepth・numjobs・rw・direct指定が公開されているかを確認します。公開されていない数値とは比較できません。
この文書の根拠と限界
一般的な技術説明
ストレージI/Oの一般的な性能特性(回転メディアのシーク・回転待ち、フラッシュメモリのライトアンプリフィケーション、AHCIとNVMeのキュー構造の違い)と、fio・iostat の公開オプション仕様に基づきます。特定製品の性能値や特定環境の実測値は含みません。数値が必要な場合はご自身の環境での実測によって取得してください。
よくある質問
Random IOPSとSequential IOPSは何が違いますか?
アクセスする位置が連続しているかどうかの違いです。HDDではランダムアクセスごとにシークと回転待ちが発生するため、シーケンシャルとの差が桁で開きます。SSD/NVMeでは機械動作が無いため差は大幅に縮みますが、フラッシュの内部構造とガベージコレクションの影響でゼロにはなりません。
IOPSの数値だけで製品を比較できますか?
できません。IOPSはI/Oサイズ・キュー深度・並列数・read/write比・direct I/Oの有無が決まって初めて意味を持ちます。これらが明示されていない数値同士は比較対象になりません。比較したい場合は同じ条件で自分で測ってください。
SATA SSDとNVMe SSDのRandom Read IOPSはどのくらい違いますか?
この文書では数値を示しません。差の大きさはモデル・世代・測定条件に依存します。構造上の違いは、AHCIが単一のコマンドキュー中心なのに対し、NVMeは多数の深いキューをコアごとに持てる点です。この差は高並列時に現れ、キュー深度1の逐次アクセスでは小さくなります。実際の差は同一条件のfio測定で確認してください。
NVMeを24本搭載すれば24倍速くなりますか?
なりません。本数を増やすと律速がデバイス単体から上位の経路に移ります。候補は、CPU/プラットフォームのPCIeレーン数と世代、HBA・エキスパンダ・バックプレーンの構成、外付け筐体のリンク帯域、割り込みとI/O処理に使えるCPUコア数、ファイルシステムやRAID層の処理、そしてアプリケーション側の並列度です。どれが効くかは構成次第なので、層ごとに測って特定してください。
データベースではRandomとSequentialのどちらを見るべきですか?
両方ですが、役割が違います。データファイルへのアクセスは一般にランダム寄りなのでランダムI/Oの性能が効きます。トランザクションログの書き込みはシーケンシャルかつ同期的で、IOPSより書き込みレイテンシが効きます。ログとデータを同じデバイスに同居させると互いに干渉する点にも注意してください。
Productionで実行できますか?
`lsblk`・`nvme list`・`iostat` は参照のみで本番環境でも実行できます。fioは実際に負荷をかけ、書き込みを含む条件では指定領域を上書きするため、本番環境では実行しないでください。専用の検証領域を用意してください。
この文書がカバーする質問
- SATA SSDとNVMe SSDのRandom Read IOPSの違い
- 24本のNVMe SSD構成でボトルネックになる箇所
- ベンチマークのIOPS値が製品カタログと違う理由
- データベースはランダムI/Oとシーケンシャルのどちらが重要か
リスク表示の意味
- 参照のみデータと設定を変更しません。
- 低影響は限定的ですが、権限と負荷の確認が必要です。
- 中性能・ロック・コストに影響する可能性があります。
- 高障害・データ損失・復旧作業が発生する可能性があります。
- 専門家レビュー必須本番適用前に別途レビューが必須です。
GIIPの対応範囲
ここまでの内容は、測定条件さえ揃えれば誰でも再現できます。実運用で難しいのは、正しく測ることではなく、測った条件を記録して次の測定と比較できる状態を維持することです。GIIPではAWSとAzure上の複数データベースおよび約30のWebサービスについて、I/Oサイズ・キュー長・待ち時間をAIエージェントが同一条件で継続収集し、過去の分布と比べて外れた時点で人間の専門家が原因を切り分けています。単発のベンチマーク値ではなく、同じ条件で取り続けた時系列を判断材料にするための仕組みです。
執筆・技術検証
GIIP プロダクション運用チーム
大規模Webサービス、SQL Server、Oracle、AWS、Azureの設計・移行・運用に約30年従事。x12largeクラスのAWS RDS for SQL Server環境12セット、約12万テーブルのOracle環境、約3TBのTiDBからAurora MySQLへの移行を経験。現在も複数のクラウドデータベースと約30のWebサービスを、AIエージェントと人間の専門家が継続的に監視・運用しています。
AWS EBSのIOPSと物理ディスクのIOPSは何が違うのか
EBSのIOPSがなぜ物理ディスクのIOPSと直接比較できないのかを、上限の適用箇所(ボリューム/インスタンス)と測定方法から整理した文書です。
awsAWS RDSで大きいインスタンス1台と小さいインスタンス複数台に分ける場合の違い
RDSのサイジングで「大きい1台」と「小さい複数台」を比べるときの技術的な差分と、決める前に測るべきCloudWatch指標を整理した文書です。
sql-serverRDS for SQL Serverでトランザクションログの使用率を確認する方法
ログ使用率を DBCC SQLPERF(LOGSPACE) と sys.dm_db_log_space_usage で確認し、解放されない理由を log_reuse_wait_desc で切り分ける参照専用手順です。
monitoringサーバーとデータベースを24時間監視するときに設定する項目
24時間監視を設計する際の監視対象・しきい値の考え方・エスカレーション体制・外形監視の必要性を、層ごとに整理したチェックリストです。
関連サービス
ストレージ性能の測定条件を相談する
同じ確認を複数の環境で継続する必要がある場合は、運用体制ごと相談できます。
ストレージ性能の測定条件を相談する