質問: MySQLに関しての質問です。 様々なプログラムから1つのDB(同じテーブル)に対して大量のinsertを投げています。 show fullprocess を見ると、多くのinsertがsleepになっているのですが、 これは1DBあたりのクエリ受付可能数(?)がキャパシティを超えているからでしょうか? Sleepを解消する事で、さらに大量のデータを高速にinsertする事は可能でしょうか? その方法やアイデアなどあれば教えてください。 ちなみにバルクインサートはしていますが、そもそもDBにアクセスしている端末数が多い為、このような状態になっているのかもしれません。
回答: 大量のデータってピークの単位時間にどの程度のデータがINSERTされて、その多重度は? ひとつのテーブルへの書き込みが集中しているのがボトルネックになってるのなら、hash partition で分散を図ることも考えらます。 以前、OracleでLOBの書き込みがボトルネックになっていて、LOBを別テーブルにしてTABLESPACEも変えたら?ってアドバイスしたこともあります。それでどの程度パフォーマンスが改善されたかのレスはありませんでしたが。 現状で許容時間内に処理が終わればSLEEPがあってもとりあえず良しとして、将来データ量が増えた時の対応点としてグループで認識できていれば良いでしょう。 時々とっても非力なハードウェアで大量のデータを処理しようとしているお客様がいて、1トントラックに10トンの荷物を積むような真似は止めましょう、って言わざるを得ないこともあります。