Movatterモバイル変換


[0]ホーム

URL:


yoku0825, profile picture
Uploaded byyoku0825
PDF, PPTX12,434 views

MySQLステータスモニタリング

2017/07/14

Embed presentation

Download as PDF, PPTX
MySQLステータスモニタリング〜それ、Perlで(も)できるよ〜2017/07/14yoku0825吉祥寺.pm 11
Chiba.pmの⽅から来ました1/54
Chiba.pmの “m” は2/54
MySQLの”M” :)3/54
※諸説あります4/54
Ichikawa.pmまだ⾏ってなくてごめんなさい5/54
\こんに千葉/ (c)hokke̲mirinyoku0825オラクれない-ポスグれない-マイエスキューエる-⽣息域Twitter: @yoku0825-Blog: ⽇々の覚書-MyNA ML: ⽇本MySQLユーザ会-MySQL Casual: Slack-6/54
MySQLステータスモニタリング #とは7/54
MySQLステータスモニタリング #とはZabbixとかCloudWatch的な⾔い回しで “メトリクス監視”と呼んでるやつのつもり俺はCactiスキー(単に他のを知らないとも)おや、そういえば今⽇はMackerelの中の⼈が…︖8/54
ステータスモニタリングで思うこと有意義な 情報がほしいなるべく ⼿間はかけたくない平たく⾔うとデータソース取得メソッドは⾃分で書きたくないもっと⾔うと SHOW ENGINE INNODB STATUS を正規表現でパースしたくない-ビバ エコシステム-しなくていいなら 運⽤したくないどうせなら フロントエンドはイケてる⽅がいい9/54
PMP for Cacti10/54
PMM11/54
Mackerel12/54
話変わるけど、中国地⽅にい る ないエンジニアのそーだいさんという⽅は凄く優秀そうな⽅だし、13/54
家族思いだし、14/54
尊敬するエンジニアの⼀⼈です。15/54
閑話休題16/54
ステータスモニタリングで思うこと(again)有意義な 情報がほしいなるべく ⼿間はかけたくない平たく⾔うとデータソース取得メソッドは⾃分で書きたくないもっと⾔うと SHOW ENGINE INNODB STATUS を正規表現でパースしたくない-ビバ エコシステム-しなくていいなら 運⽤したくないどうせなら フロントエンドはイケてる⽅がいい17/54
だがしかし18/54
気に⼊るものがなかったら19/54
我々はどうやって戦えばいいんだろう20/54
MySQLのステータスはどこで⾒る︖SHOW ステートメント派SHOW GLOBAL STATUS-SHOW PROCESSLIST-SHOW ENGINE INNODB STATUS-SHOW SLAVE STATUS-SHOW TABLE STATUS-information_schema, performance_schema 派i̲s.tables, i̲s.innodb̲metrics, i̲s.global̲status, ..-p̲s.table̲io̲waits̲summary̲by̲table, p̲s.threads,p̲s.events̲statements̲summary̲by̲digest, ..-21/54
SHOW ステートメント⼀応SQL結果セットはカラムと⾏から成るフツーのSQLと同じ結果セットフツーに⽣DBIでもORMでもアクセスできる-ただし SHOW ENGINE INNODB STATUS は 1⾏3カラムの結果セットで、“Status” カラムの中にテキストで⼊ってるからパース地獄-細かいことを⾔うと information̲schema の仲間22/54
SHOW vs i̲s / p̲si̲s, p̲sへのアクセスは完全なSQLSHOW にも LIKE や WHERE が書けるけど、 ORDER BY, GROUP BY には対応していない-SELECTアクセスが基本な奴らだから(︖)変にパースを要求するものが あんまり ないたまにある-23/54
SHOW vs i̲s / p̲sSHOW GLOBAL STATUSinformation̲schema.GLOBAL̲STATUS(*),performance̲schema.global̲statusSHOW PROCESSLISTinformation̲schema.PROCESSLIST, performance̲schema.threadsSHOW ENGINE INNODB STATUSinformation̲schema.INNODB̲METRICSSHOW SLAVE STATUSperformance̲schema.replication̲connection̲configuration,replication̲applier̲status̲by̲coordinator, ..SHOW TABLE STATUSinformation̲schema.TABLES24/54
information̲schema vs performance̲schemainformation̲schemaSQLでアクセスする時に情報が集められる。運が悪いと刺さるperformance̲schema既に情報は蓄積されていて、SQLでアクセスする時は引っ張り出すだけ。少しずつオーバーヘッドが載る25/54
SHOW GLOBAL STATUSinformation̲schema.GLOBAL̲STATUSグローバルのステータスカウンターと、今⽣きている全てのthdのステータスカウンターを ⾜し合わせて 表⽰するperformance̲schema.global̲status各thdがステータスカウンターをインクリメントする時ついでにp̲sがインクリメントされる26/54
SHOW PROCESSSLISTinformation̲schema.PROCESSLIST各thdを1個ずつロックしてステータスを表⽰するperformance̲schema.threads各thdがStateを変更するたびにp̲sが更新される27/54
performance̲schema #とはイベントベースのプロファイラーインストゥルメントを通過するたびに performance_schemaスキーマのテーブルに情報が蓄積される機能の名前としての「パフォーマンススキーマ」、スキーマの名前空間として「performance̲schemaスキーマ(データベース)」、パフォーマンススキーマの情報を格納する専⽤の「performance̲schemaストレージエンジン」があるのがややこしいオンメモリーストレージエンジンなので永続化はしない-記録に特化しているので参照は地味に遅い(MySQL 8.0で良くなるらしい)-i̲sだったら「刺さったか︕︖」と思うくらい待たされても、p̲sは刺さってなくて単に重いだけの場合が多い-28/54
information̲schema vs performance̲schemai̲sはMySQL 5.1のInnoDB Plugin以降だんだん便利にINNODB̲TRXとかINNODB̲LOCK̲WAITSとかべんり-地味にMySQL 5.6とそれ以降で追加されているものは⾊々楽しい-p̲sは5.6で急に開花した実装としてはMySQL 5.5からあったけど5.5のp̲sは(我々目線では)使いようがなかった-5.6から低オーベーヘッド、省メモリーで「ジャンキー向け機能」から「⼀般的なモニタリングに使えるように」MySQL 5.5まではエージェント型だったMySQL Enterprise Monitorも5.6とそれ以降はp̲sを使ってエージェントレスになったことだし-29/54
たとえばテーブルサイズinnodb_stats_on_metadata= 0 にすること︕ (5.6とそれ以降はデフォルトで0)LIMITはお好みで。⼤概、トップ20とか30とか取って置けば⾜りると思うi̲sだからもちろん誤差はある。リアルタイムな値じゃなくてデイリーやウィークリーで⼗分30/54
たとえばテーブルサイズmysql> SELECT CONCAT(table_schema, '.', table_name) AS table_name,-> table_rows, data_length + index_length AS table_size,-> data_free, COALESCE(auto_increment, 0) AS auto_increment-> FROM information_schema.tables-> ORDER BY table_size DESC-> LIMIT 10;+-------------+------------+------------+-----------+----------------+| table_name | table_rows | table_size | data_free | auto_increment |+-------------+------------+------------+-----------+----------------+| fe.bbb18c90 | 25224307 | 4578082816 | 7340032 | 27979876 || fe.34579d37 | 18991963 | 2065661952 | 4194304 | 19482172 || fe.61c622dc | 21195791 | 1474297856 | 7340032 | 21744792 || fe.78e73102 | 4285220 | 1121239040 | 5242880 | 4179815 || fe.4b581bb9 | 4167617 | 706543616 | 5242880 | 4179816 || fe.faaafde9 | 4588106 | 538378240 | 5242880 | 4598839 || fe.5ae66d4a | 4117296 | 501055488 | 4194304 | 4127825 || fe.652f200b | 4169485 | 453672960 | 5242880 | 0 || fe.8363482f | 4169357 | 432095232 | 6291456 | 0 || fe.9287128c | 2127303 | 265158656 | 7340032 | 2132172 |+-------------+------------+------------+-----------+----------------+10 rows in set (0.04 sec)31/54
たとえばテーブルサイズ32/54
たとえばspin̲roundsmysql> SELECT name, count-> FROM information_schema.innodb_metrics-> WHERE name LIKE '%spin%';+------------------------------+------------+| name | count |+------------------------------+------------+| innodb_rwlock_s_spin_waits | 0 || innodb_rwlock_x_spin_waits | 0 || innodb_rwlock_sx_spin_waits | 381205234 || innodb_rwlock_s_spin_rounds | 1865126843 || innodb_rwlock_x_spin_rounds | 9173666588 || innodb_rwlock_sx_spin_rounds | 6758611710 |+------------------------------+------------+6 rows in set (0.00 sec)33/54
たとえばspin̲rounds34/54
たとえばInnoDBバッファプールの内訳information̲schema.innodb̲buffer̲page,innodb̲buffer̲page̲lruで⾒られるけれどこのクエリーInnoDBバッファプールが⼤きければ⼤きいほど負荷⾼いので、流⾏ってるところでは常⽤には向かないと思うsys.innodb̲buffer̲stats̲by̲schema,innodb̲buffer̲stats̲by̲table,schema̲table̲statistics̲with̲bufferあたりもこのテーブルに触るので注意だ35/54
たとえばInnoDBバッファプールの内訳mysql> SELECT table_name, index_name,-> SUM(number_records) AS records, SUM(data_size) AS data_size-> FROM information_schema.innodb_buffer_page-> WHERE table_name NOT LIKE 'mysql%'-> GROUP BY table_name, index_name-> ORDER BY data_size DESC-> LIMIT 10;+-----------------+------------+---------+-----------+| table_name | index_name | records | data_size |+-----------------+------------+---------+-----------+| `7f`.`c3bc5a32` | e428d370 | 9841761 | 226620867 || `7f`.`c3bc5a32` | 54c2815f | 8066893 | 104999661 || `7f`.`c3bc5a32` | 88540e9a | 6926166 | 131772542 || `7f`.`c3bc5a32` | 462a1d8a | 4406127 | 83872645 || `7f`.`5af9ce85` | d52e82c1 | 3528078 | 60115390 || `7f`.`c3bc5a32` | PRIMARY | 3213476 | 115271756 || `7f`.`c3bc5a32` | 44c576bb | 3148514 | 59895974 || `7f`.`303a176f` | 1cbc573f | 2307297 | 43961563 || `7f`.`303a176f` | 25b1bd38 | 2067966 | 43606310 || `7f`.`dd50ab9f` | 88f49848 | 1816568 | 34545024 |+-----------------+------------+---------+-----------+10 rows in set (2.44 sec)36/54
たとえばテーブルアクセスの読み書きレイテンシーこれ累計なので、累計のままストアするか差分にしてストアするかは好みMackerelは累計値で投げてもグラフ側で差分描写にできていいなあ37/54
たとえばテーブルアクセスの読み書きレイテンシーmysql> SELECT CONCAT(object_schema, '.', object_name) AS object,-> count_read, count_write, avg_timer_read, avg_timer_write-> FROM performance_schema.table_io_waits_summary_by_table-> WHERE object_schema NOT IN ('mysql', 'performance_schema', 'sys')-> ORDER BY count_star DESC-> LIMIT 10;+-------------+------------+-------------+----------------+-----------------+| object | count_read | count_write | avg_timer_read | avg_timer_write |+-------------+------------+-------------+----------------+-----------------+| fe.3dbf1566 | 18869612 | 17539638 | 13651880 | 20003808 || fe.5cf383d7 | 6068739 | 6069827 | 23701018 | 62976298 || fe.61c622dc | 0 | 3632649 | 0 | 41433832 || fe.34579d37 | 0 | 3328275 | 0 | 116323548 || fe.3b92ebab | 1071450 | 1089281 | 22963248 | 66586982 || fe.8363482f | 671311 | 1122995 | 41658716 | 97360142 || fe.5ae66d4a | 467985 | 1095348 | 48890534 | 102864366 || fe.bbb18c90 | 6 | 1153540 | 31729962 | 143108570 || fe.ee11cbb1 | 466088 | 468043 | 45651870 | 49815150 || fe.faaafde9 | 0 | 769627 | 0 | 125484436 |+-------------+------------+-------------+----------------+-----------------+10 rows in set (0.01 sec)38/54
たとえばテーブルアクセスの読み書きレイテンシー39/54
たとえばテーブルごとのRead/Write回数Perlでも⼗分マカレる40/54
たとえばクエリーダイジェストmysql> SELECT SUBSTR(digest_text, 1, 20) AS digest_text,-> count_star, sum_timer_wait, sum_rows_examined, sum_rows_sent-> FROM performance_schema.events_statements_summary_by_digest-> WHERE DIGEST IS NOT NULL AND-> count_star > 500-> LIMIT 10;+----------------------+------------+------------------+-------------------+---------------+| digest_text | count_star | sum_timer_wait | sum_rows_examined | sum_rows_sent |+----------------------+------------+------------------+-------------------+---------------+| SELECT @@`version_co | 137289 | 25436857660000 | 0 | 137289 || SHOW SLAVE STATUS | 366546 | 112342782225000 | 0 | 0 || BEGIN | 13485295 | 575528569805000 | 0 | 0 || INSERT INTO `user_el | 627445 | 89789157785000 | 0 | 0 || SHOW MASTER LOGS | 229235 | 27056745066000 | 0 | 0 || SHOW PROCESSLIST | 229243 | 14607003138000 | 0 | 0 || SHOW ENGINE `INNODB` | 229239 | 123289626548000 | 0 | 0 || INSERT INTO `history | 525090 | 158209504507000 | 0 | 0 || INSERT INTO `user_di | 338137 | 121445307222000 | 0 | 0 || INSERT INTO `history | 3328275 | 1085911891224000 | 0 | 0 |+----------------------+------------+------------------+-------------------+---------------+10 rows in set (0.00 sec)41/54
たとえばクエリーダイジェストごとのrows̲examined42/54
たとえば更新系のクエリーダイジェストごとの発⾏数推移43/54
SQLで引けるということは44/54
Perlで(も)引けるということ45/54
今使ってるヤーツ46/54
今のヘーシャのステータスモニタリング(?)メインはPMP for Cacti深く監視するにはお⼿製スクリプト(Perl)データはそれ⽤のMySQLに格納してあるので、必要に応じてre:dashでグラフにする-⼀周回って「これをCactiに⾷わせればいいんじゃないか」とか「パージするデータはrrdtoolに⼊れちゃえばいいんじゃないか」とか思ってきた-ショットでモニタリングしたい時はPMMPMM ServerはDocker image-PMM Agentはrpmで⼊れる-47/54
それぞれに思うことPMP for Cactiフロントエンドとデータソースメソッドが両⼊りなので⼿間のかからなさと網羅率はいい。拡張が⾯倒お⼿製Perlフロントエンドを別に⽤意しなければいけないのがちょっと⾯倒。おとなしくre:dashを真⾯目に運⽤すればいいのかも知れないanemo eat erステータス監視じゃないけどスローログを⾷って可視化するヤーツPMMワンショットで使う分には最⾼。容量効率とPMM Serverがブラックボックス過ぎるのがネック余談だけどお⼿製Perlの記録⽤MySQLは8.0にしたくて、8.0にして窓関数使えれば⾃分で差を取らなくてもSQL(re:dash側)だけで捗りそう48/54
気に⼊っているところどれも吊るしのMySQLから情報が取れるperformance̲schemaはMySQL 5.6以降デフォルトでONパラメーター何もいじらなくてもそれなりに情報が取れる-innodb̲metricsをガリガリ使いたいならinnodb_monitor_enable = allだがしかしどちらも実質5.6から49/54
おかげさまで+---------+-------+| version | count |+---------+-------+| 4.0 | 2 || 5.0 | 38 || 5.1 | 17 || 5.5 | 22 || 5.6 | 126 || 5.7 | 106 |+---------+-------+50/54
ほら51/54
それ、Perlで(も)できるでしょ52/54
みんな楽しいステータスモニタリングライフを53/54
Questionsand/orSuggestions?54/54

Recommended

PDF
MySQL 5.7が魅せる新しい運用の形
PDF
わかった気になるMySQL
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
PDF
わたしを支える技術
PDF
MySQLerの7つ道具
PDF
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
PDF
今から備えるMySQL最新バージョン5.7
PDF
ペパボ de MySQL
PDF
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
PDF
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
MySQL 5.7の次のMySQLは
PDF
ぐだぐだInnoDB
PDF
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
PDF
How to backup your mroonga database?
PDF
MySQLerの7つ道具 plus
PDF
Devsの常識、DBAは非常識
PDF
紹介 of Anemometer
PDF
Handlerさんコンニチワ
PPTX
MySQL clients
PDF
MySQLチューニング
PDF
MySQLを割と一人で300台管理する技術
PDF
雑なMySQLパフォーマンスチューニング
PDF
MySQLの全文検索に関するあれやこれや
PDF
光のMySQL 5.7
PDF
MySQL Fabricでぼっこぼこにされたはなし
PDF
MySQL Partition Engine
PDF
What's New in MySQL 5.7 Security
PDF
MySQL 5.5 Update #denatech
KEY
道具を磨くことのススメ

More Related Content

PDF
MySQL 5.7が魅せる新しい運用の形
PDF
わかった気になるMySQL
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
PDF
わたしを支える技術
PDF
MySQLerの7つ道具
PDF
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
PDF
今から備えるMySQL最新バージョン5.7
PDF
ペパボ de MySQL
MySQL 5.7が魅せる新しい運用の形
わかった気になるMySQL
MySQL 5.7にやられないためにおぼえておいてほしいこと
わたしを支える技術
MySQLerの7つ道具
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
今から備えるMySQL最新バージョン5.7
ペパボ de MySQL

What's hot

PDF
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
PDF
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
PDF
ヤフー社内でやってるMySQLチューニングセミナー大公開
PDF
MySQL 5.7の次のMySQLは
PDF
ぐだぐだInnoDB
PDF
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
PDF
How to backup your mroonga database?
PDF
MySQLerの7つ道具 plus
PDF
Devsの常識、DBAは非常識
PDF
紹介 of Anemometer
PDF
Handlerさんコンニチワ
PPTX
MySQL clients
PDF
MySQLチューニング
PDF
MySQLを割と一人で300台管理する技術
PDF
雑なMySQLパフォーマンスチューニング
PDF
MySQLの全文検索に関するあれやこれや
PDF
光のMySQL 5.7
PDF
MySQL Fabricでぼっこぼこにされたはなし
PDF
MySQL Partition Engine
PDF
What's New in MySQL 5.7 Security
[D14] MySQL 5.6時代のパフォーマンスチューニング *db tech showcase 2013 Tokyo
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
ヤフー社内でやってるMySQLチューニングセミナー大公開
MySQL 5.7の次のMySQLは
ぐだぐだInnoDB
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
How to backup your mroonga database?
MySQLerの7つ道具 plus
Devsの常識、DBAは非常識
紹介 of Anemometer
Handlerさんコンニチワ
MySQL clients
MySQLチューニング
MySQLを割と一人で300台管理する技術
雑なMySQLパフォーマンスチューニング
MySQLの全文検索に関するあれやこれや
光のMySQL 5.7
MySQL Fabricでぼっこぼこにされたはなし
MySQL Partition Engine
What's New in MySQL 5.7 Security

Similar to MySQLステータスモニタリング

PDF
MySQL 5.5 Update #denatech
KEY
道具を磨くことのススメ
PPT
Maatkit で MySQL チューニング
PDF
Osc2015北海道 札幌my sql勉強会_波多野_r3
ODP
Performance Schema @ MySQL Casual #2
PDF
MySQL 5.7 トラブルシューティング 性能解析入門編
PPTX
PostgreSQL使いのエンジニアから見たMySQL
PDF
Index shotgun on mysql5.6
PDF
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
PPTX
【基礎編】社内向けMySQL勉強会
PPTX
dimSTATから見るベンチマーク
PDF
MySQLをプロファイる(仮)
PDF
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
PDF
MySQL 初めてのチューニング
PDF
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
PDF
InnoDBのすゝめ(仮)
PDF
さいきんのMySQLに関する取り組み(仮)
PDF
ふくよかなモデル
PDF
Enter the-dolphine
PDF
MySQL57 Update@OSC Fukuoka 20151003
MySQL 5.5 Update #denatech
道具を磨くことのススメ
Maatkit で MySQL チューニング
Osc2015北海道 札幌my sql勉強会_波多野_r3
Performance Schema @ MySQL Casual #2
MySQL 5.7 トラブルシューティング 性能解析入門編
PostgreSQL使いのエンジニアから見たMySQL
Index shotgun on mysql5.6
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
【基礎編】社内向けMySQL勉強会
dimSTATから見るベンチマーク
MySQLをプロファイる(仮)
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
MySQL 初めてのチューニング
[data analytics showcase] B12: サーバー1,000台を監視するということ by 株式会社インサイトテクノロジー 小幡 一郎
InnoDBのすゝめ(仮)
さいきんのMySQLに関する取り組み(仮)
ふくよかなモデル
Enter the-dolphine
MySQL57 Update@OSC Fukuoka 20151003

More from yoku0825

PDF
逝くぞ最新版、罠の貯蔵は十分か
PDF
MySQLレプリケーションあれやこれや
PDF
MySQL 8.0で憶えておいてほしいこと
PDF
片手間MySQLチューニング戦略
PDF
Dockerイメージで誰でも気軽にMroonga体験
PDF
MySQLアンチパターン
PDF
MHAの次を目指す mikasafabric for MySQL
PDF
5.7の次のMySQL
PDF
mikasafabric for MySQL
PDF
とあるイルカの近況報告
PDF
MySQLと正規形のはなし
PDF
MySQLおじさんの逆襲
PDF
地雷職人の朝は早い
PDF
MySQL5.7で遊んでみよう
逝くぞ最新版、罠の貯蔵は十分か
MySQLレプリケーションあれやこれや
MySQL 8.0で憶えておいてほしいこと
片手間MySQLチューニング戦略
Dockerイメージで誰でも気軽にMroonga体験
MySQLアンチパターン
MHAの次を目指す mikasafabric for MySQL
5.7の次のMySQL
mikasafabric for MySQL
とあるイルカの近況報告
MySQLと正規形のはなし
MySQLおじさんの逆襲
地雷職人の朝は早い
MySQL5.7で遊んでみよう

MySQLステータスモニタリング


[8]ページ先頭

©2009-2025 Movatter.jp