私はInnodbのパフォーマンスの最適化に関する記事を読んだことがあります。その投稿では、著者が「バッテリーバックアップキャッシュ」という名前のことについて繰り返し言及していました。彼が何を話していたのか私には明確ではなく、グーグルも助けにはならなかった。私の推測では、これは停電が発生した場合のバックアップストレージのようなものです。私は正しいですか?
私はInnodbのパフォーマンスの最適化に関する記事を読んだことがあります。その投稿では、著者が「バッテリーバックアップキャッシュ」という名前のことについて繰り返し言及していました。彼が何を話していたのか私には明確ではなく、グーグルも助けにはならなかった。私の推測では、これは停電が発生した場合のバックアップストレージのようなものです。私は正しいですか?
回答:
RAIDアレイはバッテリーバックアップ式キャッシュを使用するため、データを書き込むよりも高速にデータを処理できます。バッテリーがなければ、停電中にデータが失われるリスクなしにキャッシュを行うことができませんでした。
それは、特にバッテリーでバックアップされたキャッシュが必要になると私が考えることができる唯一のインスタンスです。揮発性メモリをサポートしている場合は、問題になりません。
これは、プロフェッショナルグレードのハードウェアRAIDセットアップの機能であり、ソフトウェアまたはコンシューマーグレードの「オンボード」RAIDではないことに注意してください。電池はアルトイドの缶とほぼ同じ大きさです。それらは4〜5年ごとに悪くなる傾向があり、キャッシュを殺し、バッキングストアにパフォーマンスの打撃を与えます。
磁気ストレージは遅いため、その前にキャッシュを配置することをお勧めします。それがどのように読み取りを高速化するかは簡単にわかりますが、書き込みも高速化できますか?
writethroughtキャッシュは、それが(それ以降の読み取りのために)キャッシュに書き込まれたデータのコピーを保持しますが、それは本当のストレージ(「ヒット酸化鉄」)になるまで、それは成功したように、操作を確認しないので、しません。
キャッシュ上にあるとすぐに操作が終了したことをホストに通知するため、ライトバックキャッシュが行います。バックグラウンドで、やがて永続的な(磁気)ストレージに書き込みます。
最初は、ライトバックキャッシュの方が音は良くなりますが、脆弱性ウィンドウが導入されます。停電が発生すると、確認済みだがまだ書き込まれていないデータは失われます。ファイルシステムやデータベースはこれを防ぐことはできません。ジャーナリング、スケジューラのバリア、操作の順序などが書き込み確認に依存しているため、データはすでに安全に書き込まれています。
解決策は、キャッシュに小さなバッテリーを追加して、停電に耐えられるようにすることです。電源が回復するとすぐに、保留中の書き込みはすべて完了します(ホストが起動する前でも)。
他にも2つの選択肢があります。
RAMキャッシュを不揮発性ストレージに置き換えます。SSDは同じコストではるかに大きくなる可能性がありますが、RAMほど高速ではありません。それでも、多くの場合、データリンクよりも高速であるため、十分な速度が得られます。
小さな不揮発性メモリをキャッシュに追加します。停電が発生した場合、非常に小さなバッテリー(またはスーパーキャパシタ)により、保留中のキャッシュエントリをフラッシュに保存するのに十分な時間を確保できます。RAMを不確定な時間存続させる必要はありません。
キャッシングは、操作を高速化するために使用されます。ユーザーの一般的な使用パターンは、同じレコードに数回アクセスすることです。読んだり、レビューしたり、詳細を取得したりします。基盤となるシステムがメモリ内のレコードを保持している場合でも、ユーザーが次にそのレコードを操作しようとすると、そのレコードをロードするよりも数千倍高速にアクセスできます。再びディスク。
問題は、エンジニアがシステムパフォーマンスを改善するために、ユーザーがレコードに追加したものをしばらくの間メモリに置くという明るい考えを得るときに発生します。キャッシュがフラッシュされるまでデータはディスクに書き込まれません。これは数秒または10秒になる可能性がありますが、キャッシュが小さく、多くの変更が収まらないため、一部の変更がディスクに書き込まれる可能性があります。他の人は一時的に書き込みキャッシュに残ります。これが不安定な状態で電源が切れると、ファイルまたはデータベースシステムの整合性が損なわれる可能性があります。
そのため、一部のシステムでは、変更の日付を記録したり、キャッシュされた変更をログに記録したり、あらゆる風変わりなものをログに記録したりして、ソフトウェアに論理保護スキームを実装します。ただし、バッテリバックアップ式の書き込みキャッシュがある場合は、これらのことを省いて安全に知ることができます。書き込みキャッシュは常にを介して書き込まれます。