とある日、MySQLにてクエリが溜まる事象が発生。
うーん、スロークエリにも結構出力されており、INDEXにも原因があるようだが、
データ件数がそこまで多くないので、他にも原因がありそう ということで調査を続行。
「SHOW GLOBAL STATUS \G」にてMySQLの各種ステータス情報を確認したところ、
Opened_tablesの値が大変なことに。。。。
mysql> SHOW GLOBAL STATUS LIKE 'Opened_tables';
+---------------+----------+
| Variable_name | Value |
+---------------+----------+
| Opened_tables | 4644624 |
+---------------+----------+
table_open_cache値が小さかったことにより、テーブルキャッシュがうまく使われていないことも原因でした。OSのファイルディスクリプタの上限 と table_open_cache値を大きくし、クエリの滞留も解消されました。
めでたし、めでたし。
下記、table_open_cacheについて、まとめます。
【table_open_cache】
■説明
・テーブルキャッシュに保持できる上限値。
■注意事項
・OSのファイルディスクリプタの上限にも関係します。
・max_connectionsと関係する。
・設定値を大きくすると使用メモリ量も増える。
・MyISAMストレージエンジンでは1つのテーブルごとに2つのファイルディスクリプタが必要。
■チューニングポイント
- 「SHOW GLOBAL VARIABLES LIKE 'table_open_cache';」にて、table_open_cacheの値を確認する。
- 「SHOW GLOBAL STATUS LIKE 'Opened_tables';」にて、Opened_tablesの値を確認する。
- 判定する。
判定条件:「Opened_tables」の値が、「table_open_cache」の値よりも大きくなっているか否か。
※「table_open_cache」の値が小さいと 新たにオープンするテーブルの数が増えるので 「Opened_tables」の値が増えます。
⇒ 「Opened_tables」の値が大きい場合は、table_open_cacheの値を増やしてください。
設定する推奨値 : max_connections * 1クエリで使用する最大テーブル数
※「table_open_cache」の値を変更する際は、下記に問題がないことを確認してください。
・メモリに空きがあること。
・OSのファイルディスクリプタの上限に問題がないこと。
投稿者プロフィール
最新の投稿
- AWS2021年12月2日AWS Graviton3 プロセッサを搭載した EC2 C7g インスタンスが発表されました。
- セキュリティ2021年7月14日ゼロデイ攻撃とは
- セキュリティ2021年7月14日マルウェアとは
- WAF2021年7月13日クロスサイトスクリプティングとは?