SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

最新イベントはこちら!

Security Online Day 2025 春の陣(開催予定)

2025年3月18日(火)オンライン開催

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けの講座「EnterpriseZine Academy」や、すべてのITパーソンに向けた「新エバンジェリスト養成講座」などの講座を企画しています。EnterpriseZine編集部ならではの切り口・企画・講師セレクトで、明日を担うIT人材の育成をミッションに展開しております。

お申し込み受付中!

EnterpriseZine(エンタープライズジン)

EnterpriseZine編集部が最旬ITトピックの深層に迫る。ここでしか読めない、エンタープライズITの最新トピックをお届けします。

『EnterpriseZine Press』

2024年秋号(EnterpriseZine Press 2024 Autumn)特集「生成AI時代に考える“真のDX人材育成”──『スキル策定』『実践』2つの観点で紐解く」

あたらしいSQL Server/Denaliの世界

あまり知られていないSQL Server 2012の機能強化点(前編)

3. Advanced Format Disk (512 Emulation)に関するサポート

Advanced Format Disk (512 Emulation)について

 従来のハード ディスク ドライブは、512 バイトのセクタを基にしており、物理ディスクのアクセスは、この単位を基にしてアドレス指定されました。しかし、ハードディスク サイズがより大きくなると、セクタ数が増えて、ボトルネックになることがあります。そのため、近年、ハード ディスク ベンダーが、4096バイト (4 KB) のセクタ サイズを使用する新しいディスクへの移行を開始しています。これは、ディスクサイズの増加に伴う、セクタ数の増加という問題を解決しますが、アプリケーションや、デバイス ドライバ、オペレーティング システムとの互換性に大きな問題を引き起こすことがあります。

  このような、大きなセクタを持つディスクへの移行の負担を軽減させるために、ハードウェア ベンダーは、”Advanced Format Disk”、"512 Emulation" または、 "512E"とよばれるソリューションを提供しています。この512Eディスクの場合、実際は4096バイトの物理セクタをもっているのですが、ハードディスクのファームウェアが、512バイトの論理セクタをエミュレートし、それぞれを4096バイトの物理セクタにマップします。そして、このディスク ドライブは、OSに対してセクタ サイズは512バイトであるとレポートし、ファームウェアは、512バイトのI/O要求をドライバから受け取って、4096バイトの物理セクタに対して、read-modify-write操作*を行います。

* 詳細は、以下のHow Emulation Works: Read-Modify-Write (RMW)の項を参照のこと
512-byte Emulation (512e) Disk Compatibility Update

SQL Serverへの影響とその対応について

  SQL Serverのトランザクション ログ マネージャのコードは、データベースが配置されているディスクのセクタ サイズに依存しています。なぜなら、トランザクション ログ マネージャは、セクタ サイズにアラインされたI/Oを発行することで、発行したI/Oが必ずディスクに書き込まれたことを保証しているからです。しかし、512Eディスクによって、実際は4096バイトの物理セクタをもっているディスクをSQL Serverが512バイトであると認識してしまうとどうなるでしょうか。この場合、以下の2点に関する懸念点が考えられます。

 • データ消失の問題
 たとえば、SQL Serverが、4096バイトの1物理セクタ内にあるいくつかの論理セクタに対して書き込みを行っていたとします。しかし、N回目の書き込みでエラーが発生しました。このとき、SQL Serverは、N回目の書き込みが失敗したことは認識しますが、直前のN-1回目に行った書き込みは成功したと認識しています。しかし、実際には同一セクタで発生したエラーであるために、それ以前に発行した書き込みまでもがエラーのときに消えてしまっている可能性があります。

 • パフォーマンスの問題
 512Eディスク ドライブの場合、ファームウェアは、4096バイトの物理セクタに対して、read-modify-write操作を行います。read-modify-write操作は、あきらかに、単純なwrite操作よりも遅い操作です。また、論理パーティションが物理セクタの境界にアラインされていないことが原因で、ログ ファイルへの書き込み要求の多くが4096バイトのセクタにアラインされていないと、ログファイルへの書き込みのスループットが全体的に低下します。アプリケーションの多くは、トラクション ログへの書き込み時間にパフォーマンスが左右されるため、ログ書き込みが遅延するとアプリケーションのパフォーマンス低下を引き起こす可能性があります。

 この問題については、以下のブログでも紹介されています。

  Windows オペレーティング システムは、この512Eディスクをサポートするために、QFEをリリースしています。このQFEを適用することで、物理セクタのサイズが取得できるようになります。

 Windowsの512Eディスク ドライブに関するサポート ポリシーについては、以下にまとめられています。

 Windows APIの観点からいえば、このQFEを適用することで、DeviceIOControlのIOCTL_STORAGE_QUERY_PROPERTY control codeを通して物理セクタサイズを取得できるようになります。

 前述の、KBを参照していただくとわかりますが、セクタ サイズを表示するユーティリティ ツールであるfsutil.exeもあわせて更新されていますので、このツールを使用して、512Eディスクであるかどうかが確認できます。

 QFEを適用する前に、fsutilの出力結果を確認してみると、論理セクタのサイズのみが出力されます。

D:\>fsutil fsinfo ntfsinfo G:
NTFS Volume Serial Number : 0x025881ce5881c141
Version : 3.1
Number Sectors : 0x00000000aea867ff
Total Clusters : 0x0000000015d50cff
Free Clusters : 0x0000000014aeaa33
Total Reserved : 0x0000000000000000
Bytes Per Sector  : 512
Bytes Per Cluster : 4096
Bytes Per FileRecord Segment    : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length : 0x0000000000480000
Mft Start Lcn  : 0x00000000000c0000
Mft2 Start Lcn : 0x0000000000000002
Mft Zone Start : 0x00000000000c0480
Mft Zone End   : 0x00000000000cc840
RM Identifier: 4B0A3EEF-72AA-11E0-9257-000FFEE506A7

 一方、QFEを適用した後のfsutilの出力結果を確認すると、論理セクタのサイズに加えて、物理セクタのサイズも出力されるようになっていることがわかります。

D:\>fsutil fsinfo ntfsinfo G:
NTFS Volume Serial Number : 0x025881ce5881c141
Version : 3.1
Number Sectors : 0x00000000aea867ff
Total Clusters : 0x0000000015d50cff
Free Clusters : 0x0000000014aeaa33
Total Reserved : 0x0000000000000000
Bytes Per Sector  : 512
Bytes Per Physical Sector : 4096
Bytes Per Cluster : 4096
Bytes Per FileRecord Segment    : 1024
Clusters Per FileRecord Segment : 0
Mft Valid Data Length : 0x0000000000480000
Mft Start Lcn  : 0x00000000000c0000
Mft2 Start Lcn : 0x0000000000000002
Mft Zone Start : 0x00000000000c0480
Mft Zone End   : 0x00000000000cc840
RM Identifier: 4B0A3EEF-72AA-11E0-9257-000FFEE506A7
 

 SQL Server 2012では、前述のQFEがOSに適用されていると、実際のセクタ サイズを認識することができます。実際のセクタ サイズを認識できると、SQL Serverは512Eディスク ドライブの論理セクタ サイズではなく、物理セクタのセクタ サイズをI/Oに使用します。

 なお、この対応については、SQL Server 2012だけではなく、SQL Server 2008 R2 Service Pack 1にも含まれています。詳細については、以下を参照ください。

  ***

  次回もひきつづき、あまり知られていないけれども使えるSQL Server 2012の機能強化点について紹介します。おたのしみに!

この記事は参考になりましたか?

  • Facebook
  • X
  • Pocket
  • note
あたらしいSQL Server/Denaliの世界連載記事一覧

もっと読む

この記事の著者

古賀 啓一郎(コガ ケイイチロウ)

日本マイクロソフト株式会社勤務。きままなエンジニア。
謎があると解決せずにはいられない性格。
週末は家事に従事。 

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

EnterpriseZine(エンタープライズジン)
https://enterprisezine.jp/article/detail/3950 2012/05/14 00:00

Job Board

AD

おすすめ

アクセスランキング

アクセスランキング

イベント

EnterpriseZine(エンタープライズジン)編集部では、情報システム担当、セキュリティ担当の方々向けに、EnterpriseZine Day、Security Online Day、DataTechという、3つのイベントを開催しております。それぞれ編集部独自の切り口で、業界トレンドや最新事例を網羅。最新の動向を知ることができる場として、好評を得ています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング