TL;DR
- エラーログに吐くのと同じくらいのサイズを使っている気がする
- ところでこの機能、OFFにできないような気がするので、エラーログがグングン育つ環境だとメモリー危ないんじゃ…
- MySQL :: MySQL 8.0 Reference Manual :: 26.12.19.1 The error_log Table
- MySQL :: MySQL 8.0 Reference Manual :: 5.4.2.1 Error Log Configuration
Error_log_expired_events
なるステータス変数があるので、どこかでEXPIREされてテーブルから消えてくれることを期待している(が、それを制御できそうなサーバー変数は見当たらない…)- 【2020/10/26 19:21】追試お待ちしております
— yoku0825 (@yoku0825) October 26, 2020
実験したメモ。
MySQL 8.0.22から performance_schema.error_log が導入されて、エラーログをSQLで、MySQLプロトコルに載せて確認できるようになった。
これ自体はすごく嬉しい機能なんだけど、 performance_schema
ということは当然オンメモリにデータを持つわけで、昔から(吊るしのコンフィグで調整せずに使うと)メモリ食いで足りなくなる要因になりがちだった。
それが、エラーログもRSSに乗っけちゃうって大丈夫なんだろうかと思ったり思わなかったりしたので実験してみた。
実験。
- 存在するスキーマ(d1)に対して接続して “quit” を投げる(特にエラーログは吐かない)
while true ; do
mysql80 d1 -e "quit" 2> /dev/null
done
- 存在しないスキーマ(slap)に対して接続しようとして “quit” を投げる(
log_error_verbosity=3
に設定しているのでNOTEをエラーログに吐く)
while true ; do
mysql80 slap -e "quit" 2> /dev/null
done
時間と ps auxwww
の結果だけログに取りながら雑にドーン。
左の縦赤線が「エラーログを吐かないぶん回し」を始めた時刻、右の縦赤線が「エラーログを吐くぶん回し」を始めた時刻。
この差はたかだか1MBなのでどこかで頭打ちが来るの鴨わからない。
ちなみに増えたエラーログも約1MBなので「どこかで頭打ちは来るかもしれないけれどエラーログのサイズと同じくらいずつ実メモリーを削りにかかる」で合ってるような気がします。
$ sed -n '15628,$p' /usr/mysql/8.0.22/data/error.log | wc
10287 82296 936117
p_sのメモリーを一旦解放(というか再利用可能)にする TRUNCATE
も使えないようだし、頭打ちがあるのかどうかを調べたい気分(なぜなら、 p_s.error_log
はOFFにできないようなので!!!
$ mysql80 performance_schema -e "TRUNCATE error_log"
ERROR 1142 (42000) at line 1: DROP command denied to user 'root'@'localhost' for table 'error_log'
0 件のコメント :
コメントを投稿