SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

SQL Server ベースの環境の各種操作とアクセスの I/O (ブロック) サイズについて

leave a comment

SQL Server ベースの環境で使用するストレージの性能検証をする際ですが、

  • SQL Server をインストールせずに検証を行う場合には、DISKSPD を使用する
  • SQL Server をインストールしてクエリを実行して検証を行う

を組み合わせて計測を行うのが、一般的な方法となるのではないでしょうか。

この方法の中で、DISKSPD を使用して検証を行う場合には、I/O サイズ (ブロックサイズ) をどのように設定をすれば、SQL Server の I/O として妥当な検証となるかを考慮する必要があります。

SQL Server で発生する各種操作の基本的な I/O がまとめれている資料は様々なものがあるのですが、その中の一つとして、What is SQL Server’s IO Block Size? があります。

この記事の中では、次のような記載があり、SQL Server の I/O のブロックサイズについて調査すると同様の情報を探すことができます。

image

DISKSPD で性能検証を実施する際には、これらの I/O サイズを参考にして負荷をかけることで、SQL Server の I/O をエミュレートしてテストを実施することになります。

上述のサイズについては、一例となり、SQL Server の機能によって、サイズは異なります。

どのようなサイズで検証を実施すればよいかについて、最新の情報を確認していたところ、Long Sync IO: Scheduler 6 had 1 Sync IOs in nonpreemptive mode longer than 1000 ms という Q/A があり、この情報が最新の情報として参考になりました。

ベースとなる情報としては、次の情報となるようです。

SQL Server I/O Reliability Program Review Requirements の SQL Server I/O Patterns 3.00 として、I/O パターンについてまとめられています。

I/O Action Common I/O Sizes
Database page reads (mdf/ndf) 8K to 512K and may not be block aligned.
Accessed in either allocation and index/data order
depending on query plan selection
Read over write patterns leveraged by SQL Server.
Database page writes (mdf.ndf) 8K to 128K and may not be block aligned
Ex: Eager Writes (select into), Checkpoint, Lazy writer
Database initialization writes 8K (may not be block aligned) to 8MB. Zero’ed 8K
buffer posted multiple times (WriteFileGather) for
multiple offsets.
Log writes 512 (smallest sector size) to 60K, always sector aligned
Log reads 512 (smallest sector size) to 480K
Backup reads/writes Default 4MB (based on buffer size calculations)
Restore reads/writes Default 4MB (based on buffer size calculations)
In-Memory Database Checkpoint files
(reads/writes)
256K, serial access pattern goals and file reuse
In-Memory Database Delta files
(reads/writes)
4K, serial access pattern goals
File Stream (T-SQL) access (reads/writes) 8K
File Stream external access (reads/writes) Application dependent
T-SQL Blob reads 8K to 512K, total outstanding 2048 pages
Column Store (reads/writes) 8K to 16MB, uses T-SQL blob reads, total outstanding
40,000 pages
T-SQL BULK INSERT 64K
Sparse file writes 8K
Sparse file reads See ‘database page reads’
Buffer Pool Extension writes 8K to 128K
Buffer Pool Extension reads 8K

 

これらのサイズを参考として、DISKSPD で負荷をかけることで、SQL Server の I/O をエミュレートすることができます。

ディスクベーステーブルの基本的な I/O パターンとしては、

  • 8KB
  • 64 KB
  • 128 KB
  • 256 KB
  • 512 KB

を確認しておくとよいのではないでしょうか。

他の方法としては、Process Monitor で SQL Server のプロセス (sqlservr.exe) のデータベースのファイルのアクセスの Detail から確認することもできます。

image

ストレージ性能の検証をする際には、これらの情報から、どのような I/O サイズで検証を実施すればよいかを検討するとよいのではないでしょうか。

Share

Written by Masayuki.Ozawa

12月 26th, 2021 at 10:23 pm

Posted in SQL Server

Tagged with

Leave a Reply