buffer poolの使用量抑制について
初めて投稿させていただきます。
・buffer poolを食いつぶさないように設定する方法を探しております。
現状の環境は下記となります。
アイテム数:約8万
1秒あたりの監視項目数:約1500
DB:MySQL5.6
ストレージエンジン:Innodb
割り当て物理メモリ:128GB
InnoDB_file_per_table=1
MySQL buffer pool size:93GB
InnoDB data size / buffer pool: 98.5G/93.0G
Zabbixのhistory_uint.ibdが100GBオーバーとなっており、
おそらくbuffer poolをhistory_uintにて食いつぶしているのだと思います。
ヒストリのDBサイズが非常に大きいですが、
ヒストリの保存期間を7日に設定してからはInnoDB data sizeの拡張も
緩やかになりましたが、buffer poolを無駄に消費していると思います。
history_uint.ibdが増えることはデータ蓄積上問題ないのですが
それらがbuffer poolを食いつぶさないように設定することは可能でしょうか。
どうか皆様のお知恵をお借り出来れば幸いです。
- status.png (12.73 KB)
- bufferPoolsize.png (151.93 KB)
TNK - 投稿数: 4744
テーブルが大きいからといって、テーブルのすべてをメモリに読み
込んで処理するわけではありません。
監視の各アイテムでデータを取得して保存するだけであれば、デー
タを保存したり変更したりするために必要なページのみにアクセス
するので、それよりも大きなメモリが確保されていれば、高速に処
理することができます。
buffer poolを多く消費する原因として考えられることとしては、
例えば、長期間のデータを参照するようなグラフの表示を多く行っ
たりしていませんか?
過去の大量なデータを頻繁にアクセスされているのであれば、それ
らのアクセスを効率化するため、buffer poolを多く利用するよう
になってしまうはずです。
MySQLで、
show engine innodb status\G
を実行して「FILE I/O」や「BUFFER POOL AND MEMORY」あたりの値
もご確認ください。
アクセスが多くてディスクへのI/Oが間に合わず、読み書きのペン
ディングが発生してしまうような状態でないかもご確認ください。
あと、利用されているZabbixのバージョンが古かったりしませんか?
Zabbix 2.2では、発行するSQLを大幅に見直したり、DBへのアクセ
ス回数を削減したりすることで、DBに対する負荷を大幅に軽減する
ようになっているようです。
古いバージョンのZabbixを利用されている場合は、新しいバージョ
ンへの移行もご検討ください。
ご参考:
14.2.12.4. SHOW ENGINE INNODB STATUS and the InnoDB Monitors
http://dev.mysql.com/doc/refman/5.6/en/innodb-monitors.html
MySQL 5.5 Guide to InnoDB Status
http://www.slideshare.net/billkarwin/mysql-55-guide-to-innodb-status
Zabbix Conference Japan 2013 (P.9 - Zabbix 2.0より2~5倍高速)
http://www.zabbix.com/jp/img/zabconf2013/presentations/01-zabbix-sia.pdf
Room - 投稿数: 2
TNK様
アドバイスありがとうございます。
小生はデータベースに詳しくないためこのような質問になってしまいました。
BufferPoolにすべてのデータを格納するわけではないということ認識しました。
調べてみると、至極当然の量のデータが、history_uint.ibdにたまっており
他のデータはまだまだ少量で、history_uintばかりがBufferPoolを
食いつぶしていると考えてしまいました。
あと利用しているZabbixのバージョンは、2.2.1を使用しており
このデータ量に対してのレスポンスには満足しておりますので
問題は発生していないと思います。
ご教授いただき、ありがとうございます。
今後ともよろしくお願い致します。