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