GA

2020/10/26

MySQL 8.0.22のperformance_schema.error_logってエラーログのサイズと同じだけメモリを食うかも、5MBが上限かも

TL;DR


実験したメモ。

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 件のコメント :

コメントを投稿