MySQL5.6にてperformance_schemaを停止したところ、メモリの使用量が圧倒的に減少した




投稿日:

MySQLの負荷が大きくなっていたので負荷を下げる方法を探していたところ、
灯台元暗し、performance_schemaがONになっていたことに気付きました。今回のサーバはこれはOFFにできるため、実施することに。

最後にある参照のリンクにもあるように、performance_schemaは随時ログを書き込みしているため負荷が大きいです。これを停止すれば少々パフォーマンス向上が見込めるようです。
また、今回導入しているのは、MySQL5.6。デフォルトでperformance_schemaは ONになっているんですね。MySQL5.5までは、デフォルトでOFFでした。


事前の状態チェック

ログインして、パフォーマンススキーマ設定の確認

mysql> SHOW VARIABLES LIKE 'perf%';
+--------------------------------------------------------+--------+
| Variable_name                                          | Value  |
+--------------------------------------------------------+--------+
| performance_schema                                     | ON     |
| performance_schema_accounts_size                       | 100    |
| performance_schema_digests_size                        | 10000  |
| performance_schema_events_stages_history_long_size     | 10000  |
| performance_schema_events_stages_history_size          | 10     |
| performance_schema_events_statements_history_long_size | 10000  |
| performance_schema_events_statements_history_size      | 10     |
| performance_schema_events_waits_history_long_size      | 10000  |
| performance_schema_events_waits_history_size           | 10     |
| performance_schema_hosts_size                          | 100    |
| performance_schema_max_cond_classes                    | 80     |
| performance_schema_max_cond_instances                  | 4900   |
| performance_schema_max_file_classes                    | 50     |
| performance_schema_max_file_handles                    | 32768  |
| performance_schema_max_file_instances                  | 404853 |
| performance_schema_max_mutex_classes                   | 200    |
| performance_schema_max_mutex_instances                 | 11000  |
| performance_schema_max_rwlock_classes                  | 40     |
| performance_schema_max_rwlock_instances                | 4800   |
| performance_schema_max_socket_classes                  | 10     |
| performance_schema_max_socket_instances                | 2020   |
| performance_schema_max_stage_classes                   | 150    |
| performance_schema_max_statement_classes               | 168    |
| performance_schema_max_table_handles                   | 262144 |
| performance_schema_max_table_instances                 | 12500  |
| performance_schema_max_thread_classes                  | 50     |
| performance_schema_max_thread_instances                | 2100   |
| performance_schema_session_connect_attrs_size          | 512    |
| performance_schema_setup_actors_size                   | 100    |
| performance_schema_setup_objects_size                  | 100    |
| performance_schema_users_size                          | 100    |
+--------------------------------------------------------+--------+
31 rows in set (0.00 sec)

現在は、ONになっていることを確認


設定ファイルの準備

バックアップ

# cp -rp /etc/my.cnf /etc/my.cnf.bak

編集

# vi /etc/my.cnf

以下を追加します。
[mysqld]
performance_schema=off

これで再起動。
その後、OFFになったのかを確認。


mysql> SHOW VARIABLES LIKE 'perf%';
+--------------------------------------------------------+-------+
| Variable_name                                          | Value |
+--------------------------------------------------------+-------+
| performance_schema                                     | OFF   |
| performance_schema_accounts_size                       | -1    |
| performance_schema_digests_size                        | -1    |
| performance_schema_events_stages_history_long_size     | -1    |
| performance_schema_events_stages_history_size          | -1    |
| performance_schema_events_statements_history_long_size | -1    |
| performance_schema_events_statements_history_size      | -1    |
| performance_schema_events_waits_history_long_size      | -1    |
| performance_schema_events_waits_history_size           | -1    |
| performance_schema_hosts_size                          | -1    |
| performance_schema_max_cond_classes                    | 80    |
| performance_schema_max_cond_instances                  | -1    |
| performance_schema_max_file_classes                    | 50    |
| performance_schema_max_file_handles                    | 32768 |
| performance_schema_max_file_instances                  | -1    |
| performance_schema_max_mutex_classes                   | 200   |
| performance_schema_max_mutex_instances                 | -1    |
| performance_schema_max_rwlock_classes                  | 40    |
| performance_schema_max_rwlock_instances                | -1    |
| performance_schema_max_socket_classes                  | 10    |
| performance_schema_max_socket_instances                | -1    |
| performance_schema_max_stage_classes                   | 150   |
| performance_schema_max_statement_classes               | 168   |
| performance_schema_max_table_handles                   | -1    |
| performance_schema_max_table_instances                 | -1    |
| performance_schema_max_thread_classes                  | 50    |
| performance_schema_max_thread_instances                | -1    |
| performance_schema_session_connect_attrs_size          | -1    |
| performance_schema_setup_actors_size                   | 100   |
| performance_schema_setup_objects_size                  | 100   |
| performance_schema_users_size                          | -1    |
+--------------------------------------------------------+-------+
31 rows in set (0.00 sec)

OFFになりました。

これで様子見したところ、CPU、メモリ共劇的にパフォーマンスは下がりました。これは必要用件に合わせて、OFFにするのはありですね!

参考
Yoshinori Matsunobu’s blog: Another reason to disable performance schema