web-dev-qa-db-ja.com

書き込みキャッシュを適切に処理するSATAディスク?

データベースに使用される個々のディスクの書き込みキャッシュを無効にするアドバイスを参照することはかなり一般的です。それ以外の場合、一部のディスクはまだディスクサーフェスに書き込まれていない書き込みを確認するためです。

これは、一部のディスクはディスク表面に到達するまで書き込みを承認しないことを意味します(更新:またはキャッシュをフラッシュするように求められたときに正確にレポートします。そのようなディスクはどこにありますか、または信頼できる情報をどこで探すことができますか?そのようなディスクをどこで見つけるのですか?

書き込みキャッシュを使用することで本当にメリットがあるいくつかのDBサーバーをセットアップしていますが、アプリケーションは価格に敏感であり、十分な情報がないため、一部のキャッシュRAIDコントローラーのディスクサブシステムのコストを2倍にしたくありません各ドライブのキャッシュを信頼できるかどうかを確認します。

15
eas

一般的に言って、あなたの質問に直接答えると、SATAドライブの主要なブランドで、ドライブ自体に書き込みキャッシュを有効にした状態での適切な操作に関連するバグがあったことは知りません。つまり、ドライブの観点からのみ、ドライブはキャッシングの観点から想定されていることを実行します。 でも書き込みキャッシュisが有効になっていること、ディスクからの遅延が物理的に更新されている回転メディアへのSATAケーブルでの書き込みはまだ非常に短いです(通常50〜100ミリ秒)。これは、ダーティキャッシュデータが一度に数秒間保持されるだけではないようです。ドライブは、 cache からダーティデータを物理メディアに取得しようとし続けます。 。これは単なるデータの安全性の問題ではなく、遅延なく将来の書き込みを受け入れる準備ができていることの1つです(つまり、書き込みポスティング)。

キャッシュが有効になっているときに発生する問題は、SATAケーブルを介したドライブへの書き込み順序と回転メディアへの書き込み順序が同じでないことです。キャッシュのすべての内容がディスクに保存される前に電源が失われたり、システムがクラッシュしたりしない限り、これが問題を引き起こすことはありません。どうして? ->

ここで発生する可能性のある問題は、ファイルシステムおよび/またはデータベースファイルの内容のトランザクションの堅牢性に関連して、これらの順序が失われた書き込みが失われることに関連しています。実際、順序が正しくない書き込みが失われる可能性があると、メディアへの非常に特定の順序で発生するディスク書き込みによって保証されていたはずのトランザクションロジックの整合性が理論的に損なわれる可能性があります。

もちろん、ファイルシステム、データベース、RAIDコントローラーなどの設計者は、書き込みキャッシュに関連するこの現象を認識しています(または認識しているはずです)。書き込みキャッシュは、ほとんどのランダムアクセスタイプのI/Oシナリオにおけるパフォーマンスの観点から非常に望ましいものです。実際、書き込みキャッシュを利用できるようにすることは、サポートされているより高度なネイティブコマンドキューイング( [〜#〜] ncq [〜#〜] )に真のメリットをもたらすことができるという重要な要素です。新しいSATAとPATA実装の最後の数世代。したがって、このような特定の重要なタイミングで物理メディアへの順序を保証するために、ファイルシステムやアプリケーションなどは、メディアへの書き込みキャッシュのフラッシュを明確に要求できます。この同期要求が完了すると、(潜在的に)ファイルバッファー、OSディスクキャッシング、物理ディスクキャッシングなどから保留中のすべてのものが、トランザクションシステムの設計に従って適切な重要な操作でメディアに出力されます。つまり、これは、プログラマーが最上部で正しい呼び出しを行い、このソフトウェアおよびハードウェアレイヤーのチェーンのすべての要素が正しく機能した場合に正しく行われます。つまり、ドライブ、RAIDコントローラー、ディスクドライバー、OSキャッシュ、ファイルシステム、データベースエンジンなどに、この点でバグはありません。これは、すべてが正しく動作する必要のある多くのソフトウェアです。さらに、ほとんどすべての状況で通常書き込み順序はまったく関係ないので、この点について正確性を検証することは非常に困難です。また、電源障害やクラッシュのシナリオは、構築するのが難しいテストです。したがって、結局のところ、さまざまな層の1つ以上で「書き込みキャッシュをオフにする」か、この用語の意味、あるいはその両方が特定の種類の問題を「修正」するという評判があります。実際には、RAIDコントローラーやOSディスクキャッシュ、ドライブなどの書き込みキャッシュ動作を停止することで、システムの1つ以上のバグを回避し、そのような伝承の原因を回避できます。

とにかく、質問の核心に立ち返ります:SATAでは、すべてのディスク読み取り/書き込みコマンドとフラッシュキャッシュコマンドの特定の処理は SATA仕様 によって適切に定義されています。さらに、ドライブの製造元は、各ドライブモデルまたはドライブファミリについて、この実装のようなこれらのルールへの実装とコンプライアンスを Seagate Barracuda ドライブについて説明する詳細なドキュメントを用意する必要があります。特に、ドライブの動作モードを制御するSATA SET FEATURESコマンドの詳細を参照してください。特にオプション82hを使用すると、ドライブレベルでディスクキャッシュを無効にできます。これは、デフォルトですべてのドライブで書き込みキャッシュが有効になっているためです。知っている。本当にキャッシュを無効にしたい場合、このコマンドは各ドライブのリセットまたは電源投入時に開始する必要があり、通常はオペレーティングシステムのディスクドライバーの制御下にあります。 OSドライバーがIOCTLやレジストリ設定タイプを使用してこのモードを設定するように促すことができるかもしれませんが、これはさまざまです。

15
Tall Jeff

バッテリーでバックアップされたキャッシングディスクコントローラーがオンドライブキャッシュを無効にするのは、私の経験です。それ以外の場合にディスク上のキャッシュを無効にする方法を知りません。ディスク上のキャッシュを無効にできたとしても、パフォーマンスは大幅に低下します。

低コストのオプトインの場合は、システムに正常なシャットダウンを通知できる安価なUPSを使用できます。

3
kevintechie

ディスクライトバックキャッシュの誤解の1つは、停電時にのみデータが失われるということです。これは、特にsATAデバイスでは、必ずしもそうとは限りません。 sATAデバイスにエラー(コーナーケースのFWバグやコントローラーのバグなど)があり、リセットまたは外部でリセットされた場合、ハング後もライトバックキャッシュ内のデータが引き続き使用できるという保証はありません。

これにより、デバイスに一時的なエラーが発生し、リセットされ、ダーティキャッシュが失われるとデータの損失が発生し、ドライバーのブロックレベルより上では無音になるシナリオが発生する可能性があります。

さらに悪いことに、OSツールを介してドライブキャッシュを無効にすると、デバイスのリセット時にも失われるため、1日の初めにデバイスのキャッシュが無効になっている場合でも、デバイスをリセットすると、ライトバックキャッシュが再び有効になります。別のリセットで、デバイスはデータを失います。

SCSI/SASドライブと一部のsATAドライブには、ライトバックプロファイルの状態を保存して、リセットしてもプロパティが失われないようにする機能がありますが、実際にはほとんど使用されません。

ブロックレイヤーを上位レイヤーに統合するRAIDコントローラーは、ドライブのリセットに気付き、ライトバックキャッシュを再び無効にすることができます-ただし、標準のsATAおよびSASコントローラーはこれを行いません。

この制限は、パフォーマンスと信頼性のために構成されている他のSET FEATUREおよび同様のパラメーターにも当てはまります。

2
Jon Brauer

キャッシュを維持するために、バッテリではなく スーパーキャパシタ を使用したRAIDシステムを使用しています。電池は消耗し、監視し、交換する必要があり、これらの点で潜在的な障害点を表しています。コンデンサは、起動時に充電され、UPSからの電源に障害が発生した場合にキャッシュをフラッシュし、実質的に永久に持続し、監視を必要としません。ただし、貧困ラインでビジネスを運営しているのでない限り(最近では珍しくありません)、UPS障害時にシステムを完全にシャットダウンするソフトウェア-電源が回復した場合、シャットダウンする前に通常5〜15分(UPSの負荷と使用可能なバッテリーによって異なります)を与えます。

雷雨の最中、ライトがちらつくのを確認することができます(または電源システムが改善されている場合もあります)。これはリクローザーと呼ばれるデバイスです。これは、過負荷が一時的である場合にトリップしたときに開いたスイッチを閉じようとするサーキットブレーカーです。 3回試行しても閉じたままにならない場合、開いたままになります。一部の貧しい男は、雨の中で外に出て、それに対処しなければなりません。あなたと私がすることの2倍だけ、残業の場合は2倍にするのは危険な仕事です。

2
Richard Rankin

あなたが言うように、適切なバッテリーバックアップRAIDコントローラーは高価ですが、Dell Perc5/iコントローラーはeBayで100ポンド(150ドル)で見つけることができます。特にRAID5では、Perc5/iのようなコントローラーの速度があなたを驚かせます。 Perc5/isと6つのディスクRAID5アレイを備えたサーバーがいくつかあり、それらは私が今まで見た中で最速のディスクの1つです。特にデータベースアプリケーションの場合、高速ディスクを使用するとパフォーマンスが大幅に向上します。

私は弾丸を噛んでRAIDコントローラを購入しました。

JR

1
John Rennie

私が理解している限り、fsync()の偽装は、バッテリバックアップRAIDコントローラのプロパティであり、ドライブではありません。 RAIDコントローラーにはバッテリーが搭載されており、ドライブの電源が回復し、書き込みが安全にディスクにコミットされるまで、書き込みキャッシュに電力を供給することができます。これにより、書き込みがディスクに書き込まれることがある程度保証されるため、コントローラーはすぐにOSに戻ることができます。

ドライブのライトバックキャッシュがいっぱいになると、キャッシュがドライブに書き戻されるまで書き込みはブロックされます。これは、キャッシュが持続的な書き込みでは一般にそれほど効果的でないことを意味します。

アプリケーションにはいくつのIOPSが必要ですか?ドライブの書き込みキャッシュによって制限されていることを確信していますか、それともドライブの小さな(サーバーのメモリと比較して)のほうがメリットがありますか?

1
Dave Cheney