PHPerKaigi 2021 でトークしてきた話です。
これは yt-healthcheck の話で、ウチの環境ではこれを5分に1回、crondからキックしています。
喋っていた他にもいくつかひねりがあって、でも再集録の時間が取れなくて断念したネタもあります。
yt-healthcheck
(というか、ytkit
全部そうのはず)が実行するクエリーは全て/* ytkit <関数名> */ SELECT ..
のようにコメントが入っている- ジェネラルログとかで除外したいのでグレッパビリティのあるキーワードを埋め込んでおく
innodb_stats_on_metadata=ON
でinformation_schema.tables
に触るとパフォーマンスに影響が出ることがある! …というわかりきっているものは回避するようなロジックがある- 1週~1月に1回くらいのペースで、「テーブルに入っている行の数」や「あるテーブルから読んだ行の数」を集計して通知していたりもします(これは yt-healthcheck の機能ではないんですが、ytkitのスクリプトを組み合わせてやっています)
- Perl側の機能に頼らずMySQL 8.0の再帰CTEとWindow関数にゴリゴリに頼っていて、それを書くのがまた楽しかったりする
- https://github.com/yoku0825/ytkit/blob/add_yt-admin/lib/Ytkit/AdminTool/DDL.pm#L536-L555
- https://github.com/yoku0825/ytkit/blob/add_yt-admin/lib/Ytkit/AdminTool/DDL.pm#L579-L598
セッションのあと、Ask The Speakerで話しかけてくださったみなさまありがとうございました!
いつもこういう時ぼっちになるので助かりました!
Q. 「RDSではread_onlyの監視は要らない」って言ってたけどそれは何故?
A. RDSはRDSの基盤側で勝手にread_onlyを切り替えてユーザー側では指定できないので監視する必要はないのです
Q. SHOW ENGINE INNODB STATUS
をもっと統一しようみたいな動きはないの?
A. アレは「InnoDBチームが自分たちのために出している出力」みたいなところがあるので、エンドユーザーが使っていることは知っていてもそういう流れにはならなさそう。一つの別解がMySQL 5.6から使える information_schema.innodb_metrics
なんだと思う
Q. コネクション監視の閾値ってどれくらい?
A. デフォルトで70%がワーニングになってますけど、これ「そもそも平常状態のピーク * 2 = max_connection 」で普段設定していて、この前提の上で70%だと「想定していたピークの1.4倍くらいコネクションが来た」とか「オートスケールでコネクションプールが増えた」みたいなのが良い感じで引っ掛かります
【2021/03/29 11:31】
Q. AUTO_INCREMENTが40億行くってどういうケース?
A. 主にログ系。バッチで数か月分とか消し込みがかかっていてもAUTO_INCREMENTは巻き戻らないので、毎日100万とか1000万の単位で書き込まれると案外あふれる。あとはINSERT .. SELECT .. でバンバン連番を払い出すやつとか