RAID 5の書き込みパフォーマンスは時として恐ろしいものになると聞いています。私はそれが提供する冗長性を望んでいますが、データベースの挿入/更新時間を犠牲にしたくありません。
これは私が心配する必要があるものですか?もしそうなら、冗長性を得るには何が推奨されますかwith優れた書き込みパフォーマンス?
I/Oは非常にランダムであるため、通常はRAID 10をお勧めします。ここに例があります。計算は少し簡略化されていますが、かなり代表的です。
6つのドライブアレイがあり、ドライブが1秒あたり100 I/O(IOPS)を実行できるとします。読み取りが100%の場合、6つのドライブすべてが使用され、RAID 10とRAID 5の両方で約600 IOPSになります。
最悪のシナリオは100%書き込みです。そのシナリオでは、RAID 10のパフォーマンスは半分になり(各書き込みが2つのドライブに送信されるため)、300 IOPSになります。 RAID-5は、各書き込みを2回の読み取りとそれに続く2回の書き込みに変換するため、パフォーマンスは1/4、つまり約150 IOPSになります。それはかなり大きなヒットです。
実際の読み取り/書き込みパターンは、この2つの極端な中間のどこかになりますが、これが通常、データベースにRAID 10が推奨される理由です。
ただし、使用中のデータベースサーバーがない場合は、RAID-6を使用することもできます。 RAID 10やRAID 5よりもはるかに安全であるため、データベースがボトルネックにならないことがわかっている場合は、よく行います。
トランザクションデータベース
RAID-5は、書き込み時にパリティを再計算するために十分なデータをコントローラーにロードする必要があるため、書き込みに比較的時間がかかります。書き込み操作では、少なくとも4つのディスク操作が発生します。
パリティブロックの読み取り
古いブロックを読み込んで(まだキャッシュにない場合)、XORパリティブロックの値を使用します。
新しいパリティブロックの書き込み(古いパリティブロックXOR古いデータブロックXOR新しいデータブロック))
新しいデータブロックを書き込みます。
システムがライトバックキャッシュを使用しない場合、これらの操作はすべてI/O完了のクリティカルパス上にあることを意味します。多くの場合、これはデータベース書き込みの場合に当てはまります-実際、Microsoft(たとえば)は、ベンダーがこの動作を保証することを必要とする、SQLサーバーで使用するSAN機器用の認定プログラムを持っています。 RAID-5機器はこの最適化を使用せず、ストライプ全体からパリティを再計算する必要がありました。
RAID-1は、すべてのドライブにミラーを備えており、パリティを計算するために追加のデータを読み取る必要はありません。これは、書き込みに必要な物理I/Oがはるかに少ないことを意味します。
RAID-5は中央に配置され、ボリュームは複数のRAID-5ボリュームに分割され、それらは順にストライプ化されます。 3 + 1スキームでストライプ化されたグループから作成されたRAID-50では、書き込みは最大3つの追加のディスクI/O要求を生成します。 RAID-5とRAID-10をRAID-50の特殊なケースとして見ることができます。 RAID-50は主に、多くの物理ディスクに大容量のボリュームを提供するために使用されます
RAID-6(セットごとに2つの冗長ディスクを使用するパリティスキーム)などの他のパリティスキームも存在します。最近のディスクは、アレイの再構築にかなりの時間がかかるほど十分に大きい-中に2番目のディスク障害のリスクが生じるほど長い再構築は非常に重要です。 RAID-6は、2番目のパリティディスクを使用することでこのリスクを軽減します。データの損失を引き起こすには3つのディスク障害が必要です。 RAID-50スキームを作成するために、RAID-50スキームと同様のトリックを使用できます。
最後に、単一のミラーリングされたペア(RAID-1と呼ばれる)は、一部のタスクに冗長性と十分なパフォーマンスを提供できます。特に、RAID-1を使用すると、大量のデータベースログトラフィックに十分なスループットが得られることがおそらくわかります。これについては、以下で詳しく説明します。
書き込みが多いワークロードがある場合は、おそらくRAID-10ボリュームからパフォーマンスが向上します。ディスクに十分なスペースがあると仮定すると、おそらく少数の物理ディスクから必要なスループットを得ることができるため、これは成功する可能性があります。データベースサーバーのログや一時領域などの一部の項目は、大量の書き込みトラフィックを取得するため、RAID-1またはRAID-10ボリューム上にある必要があります。
ログ
ログボリュームは、ほぼシーケンシャルなデータアクセスパターンが特徴であり、本質的には「このデータをこのブロックに書き込む」という行に沿ったコマンドで構成されるリングバッファーです。これらは、コアDBMSエンジンによってプロデューサーとして書き出され、コンシューマーとして処理されます。ログリーダー機能による。ミラーリングされた1つのペアは、実際にはかなり大量のログトラフィックを処理します。
読み取りが多いシステムとファイルサーバー
データウェアハウスなどの読み取りが多いシステムでは、1つ以上のRAID-5ボリュームを使用することができます。ファイルサーバーでは、ディスクアクセスは主にファイル全体で行われるため、書き込みはおそらくとにかくパリティブロックを構成するほとんどのブロックを書き出します。この場合、RAID-5のパフォーマンスペナルティは軽くなります。
過去には、ディスクのコスト削減はかなりのものであったかもしれませんが、これは現在、問題になる可能性は低いです。
ライトバックキャッシュとRAID-5
SANまたはバッテリバックアップ式キャッシュを備えた内部RAIDコントローラでは、「ライトバック」キャッシュを有効にできる場合があります。これにより、書き込みがキャッシュされ、制御がアプリケーションに返されます。I/ Oはコントローラーは完了したと報告します。ただし、必ずしもデータをディスクにすぐに書き込むとは限りません。この機能により、RAID-5パリティの読み取り/書き込み操作を大幅に最適化でき、RAID-5xボリュームの書き込みパフォーマンスのペナルティを緩和できます。
ただし、これにはまだデータの整合性の問題の小さなリスクがあります。ホストシステムは、実際にはそうではないときにこの書き込みが完了したことを通知されました。ハードウェア障害により、データベースサーバー上の(たとえば)ログとデータボリュームの間にデータの不整合が生じる可能性があります。このため、トランザクションシステムではライトバックキャッシングはお勧めしませんが、ETLプロセスなどではパフォーマンスが向上する可能性があります。
概要
ディスクspaceは今日では非常に安価であるため、トランザクションシステムではログボリュームにRAID-1またはRAID-10、データボリュームにRAID-10を使用する必要があります。物理ディスクのサイズはデータベースよりもはるかに大きくなる可能性が高く、RAID-10は同じ数のディスクでより多くの書き込みスループットを可能にし、システムをサポートするために必要なディスクボリュームの数を減らす可能性があります。
データウェアハウスのような場合でも、インデックスが大きく作成された大きなファクトテーブルを使用してスペースをかみ砕くことができるため、RAID-5またはRAID-50のデータボリュームを使用すると、価格を少し下げることができます。ただし、ログとtempdbは、ETL処理中に多くの作業を行うため、RAID-10ボリュームに配置する必要があります。ただし、ディスクのコスト削減はかなり小さいと思われます。
あなたが書いている量に依存します。
それがかなり軽量の「Webアプリ」である場合、RAID5でパフォーマンスに影響が出る可能性はほとんどありません。
大きなETLを備えたマルチGBのデータウェアハウスを構築している場合、RAID 5の書き込みバッファーはすぐにオーバーフローし、RAID 5の「不十分な書き込みパフォーマンス」に直結します。
すべてのRAID5書き込みは、少なくとも3回の書き込み(およびCRC計算)を引き起こします。バッファリングされている場合、これは問題なく高速です(アクティビティの小さな短いバースト-単一レコードの更新と挿入)。これが持続的な書き込み(大量の一括挿入/更新)である場合は、そのことが通知されます。
パフォーマンスとスペースのバランスです。 RAID 10(ストライプドライブのミラー)は、パフォーマンスと復元力の両方を提供しますが、容量は50%削減されます。
RAID5は、より高い容量、良好な読み取りパフォーマンスを提供しますが、不十分な(大きな)書き込みパフォーマンスを提供します。
まあ、それはあなたのフォールト/リスク許容度に大きく依存します。 RAID5には 多くの問題 があります。私のDBサーバーには現在2つのミラーリングされたドライブがあり、それをスケールアップする場合は、おそらくRAID6またはRAID10のような、よりパリティのあるものを使用します。
また、アプリケーションが稼働時間を重視する場合は、代わりにレプリケーションを備えた2つのデータベースサーバー(マスターマスターまたはホットスペアなど)を使用することをお勧めします。 RAIDはディスク障害に対してのみ役立ちますが、サーバー上で失敗する可能性のある問題は他にもたくさんあります:)
短い答え:いいえ。
長い答え:データベースが非常に小さいか、最小限の要件でない限り、いいえ。データの取得は1秒あたりのディスクI/O操作に大きく依存しており、ストライピングのオーバーヘッドにより、時間の経過とともにディスクアクセスが消費されます特に長いクエリ実行します。ほとんどのデータベースは、RAID 10スタイルのセットアップ、またはデータのパーティションを保持する特定のボリュームで実行されます。はい、RAID 10は書き込みにコストがかかりますが、(適切な設定で)読み取りパフォーマンスは上がります。
「ほんとうに」というかなりの数のガイドにとって、これは私が一緒に働いたOracle DBAに常に非常に人気がありました...
レイドファイブとの戦い- http://www.miracleas.com/BAARF/
RAID 1、それが私の最後の答えです
理由:
ミラーリングされたペアは、故障したディスクに適切な冗長性を提供し、RAIDは最後のディスクまで機能し続けます。
ミラーリングされたペアは、データとインデックスを注意深く配置すると、読み取りのI/Oパフォーマンスが向上します... [ヒント:データとそのインデックスには別々のボリュームを使用してください]。コントローラを二重化することで、さらに高いパフォーマンスを得ることができます。
優れた書き込みパフォーマンスで冗長性を得るための推奨事項は何ですか?
大きなライトバックキャッシュ。ハードウェアRAIDコントローラーのRAMまたはソフトウェアRAIDソリューションで使用可能なRAM未使用のシステムRAM)。このアドバイスは、「大きな」の特定の値に当てはまります-頻繁に(時間の5%か?)書き込みキャッシュがどれほど大きくても、書き込みキャッシュはいっぱいになります。
本当にそれはあなたのデータファイル、ログファイルをあなたのOSファイルから分離することについてです。ログは連続して書き込みますデータはランダムな読み取りといくつかのランダムな書き込みが大量に発生します
これらの特性をサポートするRAID構成を構築することで、パフォーマンスが大幅に向上します
RAID 1-ミラーリングはログファイルに最適です。RAID10はデータファイルに適しています。 TempbDBとバックアップを別々のドライブに分離することも検討する価値があります。ファイルグループの追加は、パフォーマンスを向上させるもう1つの方法です。 SANに関しては、これは明確ではありません。各LUNに特定のRAID構成を構築するのか、スピンドルの数に依存するのかによって異なります。
最近のStackOverflowブログ記事 の精神に基づいて、インターネットですでに利用可能な回答を再提示するべきではないと述べました this
RAID-5は、提供する冗長性において独自のものではなく、いくつかの代替品よりも少ない追加のディスクを消費しながら実行します。同等またはより優れた冗長性とより優れた書き込みパフォーマンスで他のものを選択できます
RAID5を使用せずにデータベースを実行することは、通常、誤りです。私はそれが2つのケースでのみ行われるのを見ました-書き込みが少なく読み取り集中型であるよく設計されたデータベースと、RAID5のために「スペースを無駄にする」ことが政治的に実行可能ではなかったデータベース。
RAID5はトランザクションのパフォーマンスを破壊します。
また、RAID5を検討している場合は、RAID6が機能するかどうかを確認してください。理論的な信頼性ははるかに優れていますが、実装が未成熟なため、実際の信頼性はしばしば悪化します。