質問: Webアプリケーション経由でDBにデータをinsertしているのですが、 ある日からinsertが遅くなりました。同じくらいの量のデータでも以前は、 30秒から1分ほどで終わっていた処理が今は10分以上かかります。 (一応処理は、時間がかかりますが成功します。) 一方、同じDBをdumpしてローカルの仮想環境に簡易構築した同じWebアプリケーションでは、 実働のものよりメモリ等もスペックは低いですが、1分ほどでinsertの処理が終了します。 このような場合、どういったことが原因として考えられるのでしょうか。 my.cnfの設定? HDDなどのI/Oの問題? ネットワークの問題? 調査する方法・解決策等を教えていただけますと幸いです。
回答: 質問にあるように、DBをダンプして別環境に再構築して速度向上が見られるのであれば、 DBの断片化が発生していると考えられます。 この場合、「`OPTIMIZE TABLE テーブル名`」を実行すると、事象が改善すると思います。 #mariadbは専門ではないので、机上調査の上での回答です。 以下、補足です。 一般的に、SQL文の実行が遅い時の調査方法は「`EXPLAIN`」による実行計画の確認があります。 SQL文の部分(例えば、`WHERE`句の条件式の1つ)ごとに処理時間が見えると思うので、それを 確認する方法があります。 (この場合、SQL文を見直すことになります) また、`INSERT`が遅くなる場合、インデックスの更新に時間がかかっていることもあります。 多数のインデックスを張っている、多量のレコードを格納している、等を確認する方法があります。 (この場合、テーブル設計を見直すことになります)