古いサーバーが機能しなくなったため、Oracleデータベースを備えたWebアプリケーションを新しいサーバーに移動しました。古いサーバーには、2つのミラーリングされたハードディスクと、Oracleデータファイル用の個別の非ミラーリングSSD(REDOおよびUNDOログなし)がありました。新しいサーバーの構成はほぼ同じですが、SSDが2つあり、それらもミラーリングされています。
残念ながら、SSDを搭載したソフトウェアRAID-1のランダム書き込みパフォーマンスは非常に劣っていました。大量のデータがデータベースにマージされる夜間、ログエントリの追加などの単純な挿入操作に20秒以上かかったため、Webアプリケーションはほとんど機能しなくなりました。 RAID-1は、夜間のジョブ(データファイルへのランダムアクセス)によって引き起こされるOracleの書き込み要求に対応できませんでした。
次に、構成を古い構成に戻しました。RAIDはなく、データファイル用のSSDは1つだけです。これでパフォーマンスの問題はなくなり、Webアプリケーションは常に高速になり、夜間のジョブはRAIDの場合よりも約10倍高速になります(古いサーバーとほぼ同じです)。
ソフトウェアRAIDは、RAIDのない同じドライブよりも少なくとも10倍遅くなる可能性がありますか?
ハードウェア:
RAIDをセットアップするコマンド:
# mdadm –-create –-name=3 /dev/md/3 --level=raid1 --raid-devices=2 /dev/sda1 /dev/sdb1
# mkfs.ext4 /dev/md3
ところで:新しいサーバーを生産的に設定するよう圧力がかかっていたため、新しいサーバーで実験を実行することはできません(古いサーバーは死にかけていました)。
Oracleに支払うのに十分なお金はありますが、テスト環境には十分なお金がありませんか?
答えはありませんが(コメントには少し長いですが)、いくつかの所見があります:
SSDは、物理的なブロックサイズ(これは実際には消去ブロックサイズです)について嘘をついています。これは巨大です。
ほとんどのディスクもそのジオメトリについて嘘をついています(MS-DOSからフォーマットできます)-しかし、これ本当にはデータストライピングRAIDレベルのパフォーマンスを損ないます(しかしミラーリングにあまり影響を与えるとは思っていませんでした)。
それらがどのように分割されたか、またはどのジャーナリングを構成したかを示していません。
RAID構成についてextに伝える -が必要ですが、IIRCでも、これはミラーリングよりもストライピングの問題です。
ミラーでの書き込み操作は、単一のディスクよりも速くなることはありません(20%程度であることが多いですが、最大2倍遅くなる可能性があります)。
SSDの問題は書き込み摩耗です。ミラーでは、回転するRustディスクが、同じバッチからでも同時に失敗することは珍しいです。OTOHの大規模な場合、2つのSSDが同時に失敗する可能性が高くなります。1つの解決策は次のとおりです。ディスクの寿命を意図的にずらすためですが、このハードウェアミックスを使用してマシンを設定する場合は、mdadmを使用してSSDとHD間のミラーセットを構成していました ハイブリッドストレージ 。
問題はファイルシステム層にあると思われます。本番環境にない場合は、Oracleにミラーデバイスへのアクセスを rawパーティション として許可し、パフォーマンスを確認することをお勧めします。
Redhatは、SSDおよびmdadmを使用したRAID1を推奨していません。
これらのRAIDレベルの初期化段階で、一部のRAID管理ユーティリティ(mdadmなど)は、チェックサムが正しく動作することを確認するために、ストレージデバイス上のすべてのブロックに書き込みます。これにより、SSDのパフォーマンスが急速に低下します。
同様の懸念が他の場所でも表明されています。
TRIM( https://en.wikipedia.org/wiki/TRIM )は、ハードウェアコントローラー上のSSD上のRAIDではサポートされておらず、LinuxのほとんどのディストリビューションはRAID上のTRIMをサポートしていません。ソフトウェアRAIDを実行している場合はボックスを使用するため、ディスクに1回の書き込みを実行すると、パフォーマンスが岩のように急落します。多くのRAID構成では、フォーマット時にディスク全体をゼロ書き込みするため、パフォーマンスは最初から低下します。