web-dev-qa-db-ja.com

大きな挿入は3ノードのMySQLデータベースクラスターをクラッシュさせますか?

Perconaで実行するよりも、3ノードのMySQLデータベースクラスターがあります。 1つのヒットに多数の行を挿入するストアドプロシージャがあります。

これは(私たちのDBAによって)警告されましたが、これによりクラスターがクラッシュする可能性がありますが、これに関してオンラインで何かを見つけることができません。

誰かが洞察を提供できますか?

2
Ashley

いくつかの一般的な考慮事項、最初に:

  1. MySQL、特にInnoDBについて話していますが、OLTPロード、特にポイントSELECTSと書き込みのパフォーマンスを向上させるために最適化されています。これは、バルク挿入を実行できないことを意味しません(600デスクトップグレードSSDで000行挿入/秒)ですが、主にトランザクション処理/インデックスのマージなどで追加のロックと追加のリソースを取得することにより、他の操作のパフォーマンスに影響を与えます。

  2. 密なクラスタリングソリューション(MySQLモデルの場合)でネットワークを介して分散する場合、大規模なトランザクション処理のオーバーヘッドが悪化します。複数のノードにまたがって多数の行を同期的にロードする必要があるという事実は、通常、大量のメモリを必要とし、NDBやGaleraなどの堅固に接続されたノードソリューションではそれらを問​​題にします。

今ガレラの詳細に:

  • 最初に直面する制限は、デフォルトではws_max_size_rowsが128K(128 000行)であり、wsrep_max_ws_sizeが1GBであることです。これらの値は構成可能ですが、トランザクションが構成された値よりも大きい場合、ロードプロセスは直接失敗します。
  • クラスターがクラッシュしても驚くことはありません-特定の問題が後で修正されたとしても、 インポート中に発生した2つのノードでOOMが発生する例 が表示されます。実際に実行する前に、すべてのノード間ですべてのトランザクションを認証するために、追加のメモリが必要です。
  • クラスターを適切に機能させる場合は、いくつかのトランザクションを使用して、ファイルをチャンクにロードすることをお勧めします。 [pt-fifo-split][1]のようなイベントツールがあります。別の方法として、これらのファイルを一時的に非同期にしながら、一度に1つずつ各ノードに個別にロードすることもできます。

これは議論すべきではない1つの質問です-本番クラスターがある場合、あなたが最初に論文を試すことができるテストクラスターが必要です。最良のシナリオでは、恐ろしいパフォーマンス/デッドロックが発生します。通常、メモリが不足し、1つ以上のノードがクラッシュし、クラスター全体がクラッシュします。

ガレラの動作の背後にある理由、およびパフォーマンスを犠牲にしてダウンタイムを回避する方法について詳しく知るには、以下をお読みください。

2
jynus