シングルドライブと複数のドライブ
-
16-10-2019 - |
質問
通常、RDBMSのボトルネック(私はMySQLユーザーです)パフォーマンスはディスクアクセスです。 SSDは、従来のスピンドルドライブと比較して優れたパフォーマンスを提供します。
質問:縮小されたスペースの複数のドライブを接続することでパフォーマンスを改善することは可能ですか?
2TB 7.2K rpmドライブを4 500GB 7.2K rpmドライブに置き換えるように?
解決
これは、ストレージエンジンに大きく依存する可能性があります。
Myisamにとって、あなたが望むほど隣接するデータを作ることができるので、それは素晴らしいアイデアだと思います。これは、バルク操作と広範な範囲スキャンを含むクエリに役立つでしょう。 Myisamを圧縮および修理してテーブル形式を改善するためのツールセットも、アクセスを少し良くすることができます。 IMHOの同時インサートは、このようなディスク環境で繁栄する可能性があります。
Innodbはまったく異なる話です。
あなたが持っている場合 innodb_file_per_table 無効にすると、データはIBDATA1全体に散乱する可能性があり、したがって複数のディスクに散在します。 InnoDBテーブルに対して最適化テーブルを実行し、データとインデックスページを隣接するものにすることができますが、2つの問題を引き起こす可能性があります。
- IBDATA1を成長させます
- 時間の経過とともにパフォーマンスが悪化します
IBDATA1に存在する4種類のデータを忘れないでください:
- テーブルメタデータ
- テーブルデータページ
- インデックスデータページ
- MVCC データ
データの整合性を保護するためのMVCCデータの絶え間ない書き込みがあります。また、ib_logfile0およびib_logfile1(redo logs)との一定の相互作用もあります。 InnoDBバッファープールから10秒ごとに一定のデータが流れます。全体として、IBDATA1内に十分な断片化が得られるまで、複数のディスクとI/Oパフォーマンスに基づくデータの拡散がわずかなパフォーマンスの改善を示すことができると言っても安全です。
現在、Innodb_file_per_tableが有効になっている場合、物事は少し厄介なものになる可能性があります。ここにあります:
IBDATA1をクリーンアップし、すべてのINNODBテーブルをIBDATA1から分離したら, 、IBDATA1が小さくなります。ただし、INNODBテーブルへの各アクセスには、テーブルメタデータを介して常にIBDATA1を介して使用する必要があります。文字通り、テーブルメタデータ(IBDATA1)をテーブル(.IBD)から意味的に分離することはできません。 IBDATA1が住んでいるところはどこでも、ディスクI/Oは常にIBDATA1を通過する必要があります。
全体的な効果:テーブルの断片化は.IBDファイルに限定されており、最適化テーブルで削減および再編成できますが、追加のI/Oパフォーマンスの向上は実際には達成されません。
すべての.ibdファイルをIBDATA1以外のディスクセットに入れてSymlinksを使用するのはどうですか? Perconaによると、それはより多くの騒乱を生み出します.
結論
単一のドライブで複数のドライブを使用することになると、InnodbよりもMyisamを非常に好みます。
他のヒント
はい、複数のドライブは、私たちがRAIDと呼ぶ素晴らしいテクノロジーのおかげで、より良いスループットを提供します。データベースの場合、Raid 10(ストライプミラー)が必要です。
4(n)ドライブを使用すると、書き込み速度と4倍(n)シーケンシャル読み取りスループットを2倍(n/2)します。しかし、シーク時間はほぼ同じままであり、ミラーリングのスペースの半分を失います。