はじめまして。
職場でRedmineを使用しております。
カスタムクエリで問題が発生したのでご相談させてください。
【環境】
- Cent OS 6.9 (64bit)
- CPU 2 Core
- Mem 2GB
- HDD 30GB
- Redmine 3.4.3
- MySQL 5.9
- Ruby 2.4.2
【現象】
特定のカスタムクエリを作成してチケット一覧を表示しようとすると
応答が返ってこなくなります。
その際のCPU使用率は100%になります。メモリには余裕があります。
【再現方法】
- カスタムフィールドを全種類作成する。特にユーザー型は5つ作る。
- バグ・機能などのトラッカーに全て紐付ける。
- プロジェクトを作成して作成したカスタムフィールド全てを使用する設定にする。
- 新しいカスタムクエリのフィルタ条件に、作成したカスタムフィールドを5~6個指定する。
特にユーザー型は2つ3つ入れる。(条件は何でも良い) - プロジェクトにチケットを3つ程度作成する(内容は無くてもかまわない)
- 作成したクエリを適用するとレスポンスが返ってこない(または遅くなる)
⇒ カスタムフィールドをたくさんフィルタ条件に指定すると発生します。
⇒ 特定のカスタムフィールドに起因するわけではなさそうです。
⇒ たとえば4つではさくさく動作しても、5つにすると固まります。
⇒ 問題の発生するSQLと発生しないSQLを共にExplainで見てみましたが、おかしいようには見えませんでした。
いろいろ調べるとMySQL 5.7(5.6でも)が大きめのSQLを投げられた時にCPU100%に張り付くようです。
InnpDBのチューニングや、Memory, CPUの増強など試しましたが改善しませんでした。
PostgreSQLに変更すると快適に動作します。
同じような現象が起きている方はいらっしゃいますか?
(MariaDBでも同じようです)
また、今後大量のサーバーのRedmineをMySQLからPostgreSQLに移行しなければなりません。
yaml_dbが便利そうですがその他に便利なツールや確実な移行方法があればご教示ください。
以上、よろしくお願いいたします。