地方エンジニアの学習日記

興味ある技術の雑なメモだったりを書いてくブログ。たまに日記とガジェット紹介。

MySQLで計器を追加で有効化する

UPDATE performance_schema.setup_instruments SET ENABLED = 'YES', TIMED = 'YES' WHERE NAME LIKE 'memory/innodb/fts%'

こうやれば有効化できる。ちなみに上記はmemoryなのでTIMEDは無視される

SELECT * FROM performance_schema.setup_instruments where NAME LIKE 'memory/innodb/fts%';
+--------------------------+---------+-------+
| NAME                     | ENABLED | TIMED |
+--------------------------+---------+-------+
| memory/innodb/fts0ast    | YES     | NO    |
| memory/innodb/fts0config | YES     | NO    |
| memory/innodb/fts0fts    | YES     | NO    |
| memory/innodb/fts0opt    | YES     | NO    |
| memory/innodb/fts0pars   | YES     | NO    |
| memory/innodb/fts0que    | YES     | NO    |
| memory/innodb/fts0sql    | YES     | NO    |
+--------------------------+---------+-------+

こんなんで確認できる

SELECT event_name,COUNT_ALLOC,HIGH_NUMBER_OF_BYTES_USED FROM performance_schema.memory_summary_global_by_event_name where event_name like '%ft%';
+-----------------------------------+-------------+---------------------------+
| event_name                        | COUNT_ALLOC | HIGH_NUMBER_OF_BYTES_USED |
+-----------------------------------+-------------+---------------------------+
| memory/innodb/fts0ast             |          26 |                       745 |
| memory/innodb/fts0config          |           0 |                         0 |
| memory/innodb/fts0fts             |           0 |                         0 |
| memory/innodb/fts0opt             |           0 |                         0 |
| memory/innodb/fts0pars            |           0 |                         0 |
| memory/innodb/fts0que             |          14 |                       159 |
| memory/innodb/fts0sql             |          16 |                        70 |
| memory/innodb/row0ftsort          |           0 |                         0 |
| memory/myisam/MI_INFO::ft1_to_ft2 |           0 |                         0 |
| memory/myisam/FTB                 |           0 |                         0 |
| memory/myisam/FT_INFO             |           0 |                         0 |
| memory/myisam/FTPARSER_PARAM      |           0 |                         0 |
| memory/myisam/ft_memroot          |           0 |                         0 |
| memory/myisam/ft_stopwords        |           0 |                         0 |
| memory/myisam/SORT_FT_BUF         |           0 |                         0 |
+-----------------------------------+-------------+---------------------------+

最近作ったツールたち

GoにハマってるのでGoで色々小さいツールを書いていたので一気に紹介してみる

エラーバジェットをMackerelで見るやつ

github.com

指定したSLOの違反件数とエラーバジェットをいい感じに見れる。shimesabaというツールを参考に作ってみた。違いとしてはyamlなしでCLIのオプションから実行する形にしてある。

techblog.kayac.com

Mackerelからメトリクスを取得してリソースの使用率をいい感じに出すやつ

github.com

ホストごとのCPU使用率やロードアベレージの数値を指定された期間でmax, min, avg, med, p90と出してくれるやつ。使用率が低いVMなりコンテナがあればそこからリソース削減に繋がりそうなので作ってみた。自宅サーバもMackerelで監視しているのでガンガン不要なVMを消して電気代の削減を期待している。

MackerelでMySQLのロングトランザクションの数を監視するやつ

github.com

ロングトランザクションはUNDO領域を消費するなど色々と困ったことになる。History Lengthとかでも監視できるが閾値超えのトランザクションがどれくらいあったのかを知りたいので作った。

RDSのスナップショットが正しく取れているかを監視するやつ

github.com

エラー発生時に通知する仕組みが欲しかったので作った。

RDSのスロークエリログをいい感じに整形して検索性を上げるやつ

github.com

S3にあるスロークエリログをJSONかつHIVE形式で保存するのでAthenaとかから検索が容易になる。ただデータサイズが大きすぎるとAthenaだけだとちょっと使い勝手が悪いので代替手段が必要そう。Lambda対応もしている。

指定した回数DNSサーバへクエリを投げてレスポンスタイムを測るやつ

github.com

100回クエリ投げてp90とかp99とかを出してくれるやつ。

MySQLでクエリを投げずにトランザクションIDを振る

beginとかstart transactionしただけではmysqlだとトランザクションIDが振られる何らかのDMLを投げる必要がある。トランザクションの開始などを監視したいコードを書いてるときにこれは面倒だったので調べたらSTART TRANSACTIONにWITH CONSISTENT SNAPSHOTをつけることでIDが振られることがわかった。通常の運用で使う機会は無いだろうけどこれは便利

dev.mysql.com