SlideShare a Scribd company logo
1 of 16
Download to read offline
MySQL をプロファイる ( 仮 )
2014/04/14
yoku0825
MyNA 会 2014 年 4 月
I'm yoku0825
● とある企業の DBA
●
オラクれない
● ポスグれない
● マイエスキューエる
● 家に帰ると
●
嫁の夫
●
せがれの父
● My role in MyNA is sliding.
        ⊂ ( ゚ Д ゚⊂⌒`つ≡≡≡
会場提供
LINE++
@studio3104++
今日のコンセプト
● みなさん MySQL のご機嫌をうかがう時何使って
ます?
● 私はこんなの使ってますので、他にも「こんなのあ
るよ」ってあったら教えろください
How to profile your MySQL?
● dstat -apr
●
他のサーバーと比べる時に便利
● SET GLOBAL する時は一緒に流しておく
● 定常値的なものを把握するのに
●
カーネルによっては -r 使えない
● iostat -mx
●
await, svctm あたり
●
I/O なのかそれ以外なのか…というあたり
●
top -iH -p `pidof mysqld`
● 見るのは State くらい
● "f"=> "J"(CPU 番号 ), "P"(SWAP)
How to profile your MySQL?
● perf top -p `pidof mysqld`
●
役に立ったことはないけど紳士のたしなみ
● pt-ioprofile --cell sizes --run-time 10
● どのファイルに対して I/O したか見る
● 中身は strace を整形する bash スクリプト
●
Mroonga は mmap 使ってるから見られないことに最
近気が付いた
●
短いスパンで乱打するとハングすることが
How to profile your MySQL?
● innotop
●
Query List("Q")
● InnoDB Row Ops("R")
● InnoDB Txns("T")
●
InnoDB Lock Waits("K")
●
Locks("L")
●
Variables & Status("S")
– Choose a set of values("s")
– Enter variables for commands("e")
– 自分でカスタムできるっぽいけどやってない
● InnoDB I/O Info("I")
How to profile your MySQL?
● mysqladmin ex -r -i 2 | grep ..
●
差分だけちゃきちゃき流しっぱにする
● そこにだけ気を取られて他の数値が跳ね上がったり
すると orz
●
mysql -Ee "SHOW ENGINE INNODB STATUS" |
tee >(grep --color -i pending)
● pending なんちゃらだけ見ていたいけど、 pending
なんちゃらが出てた時には他の出力も見たい
●
gdb -ex "set pagination 0" -ex "thread
apply all bt" -batch -p `pidof mysqld`
● 世界が止まるので注意
●
perf top と同じくたしなみ
How to profile your MySQL?
● SELECT table_name, index_name,
SUM(number_records) AS record,
SUM(data_size) AS datasize FROM
information_schema.innodb_buffer_page
GROUP BY 1, 2;
● 使ってるはずなのに載ってないインデックスとかあ
ると泣ける
● SELECT free_page_clock, count(*) FROM
information_schema.innodb_buffer_page
GROUP BY 1;
●
何回そのページが free されたか
● ずっと載りっぱなしの領域と、どんどん LRU Flush
される領域の数の把握
How to profile your MySQL?
● pager grep -v Sleep からの SHOW FULL
PROCESSLIST;
● だいたい State 見る
● Waiting for query cache lock に出会うこと多い
● cmake -DENABLE_GPROF=ON
● gprof をオンにしてコンパイル
●
複数スレッドの劣化が激しすぎて微妙だった
●
正常終了時、 datadir に gmon.out を作るの
で、 gprof bin/mysqld data/gmon.out で食わせる
How to profile your MySQL?
● cmake -DWITH_VALGRIND=ON
●
valgrind --tool=massif mysqld .. ヒープ周り
● valgrind --tool=callgrind mysqld.. コールグラ
フ取れるらしいけど使ったことない
●
strace -f -p `pidof mysqld` 2>&1 | grep ..
● ソケット周りの I/O を見るときに使うことが多い
● 標準エラー出力に吐いちゃうのでリダイレクト忘れ
ると泣きそうになる
● gdb -p `pidof mysqld`
● ステップ実行最強説
● パフォーマンスのプロファイルには使わない。マ
ニュアルよくわからん時とか
How to profile your MySQL?
● SET profiling= 1; <Query>; SHOW PROFILE;
●
問題のクエリーが判ってて、再現性がある場合
● Status の意味が判らないときはソースコードから
探す
●
EXPLAIN ..
● 「ある程度判ってる人」が見た後でも key_len と
Extra は見ておく
● possible_keys が見づらくなるから、インデックス
にはわかりやすい名前を付けてほしいなー
How to profile your MySQL?
● SET SESSION optimizer_trace= 'enabled=on';
<Query>; SELECT * FROM
information_schema.optimizer_traceG
●
実はあんまり見たことない
● ps_helper(sys schema)
●
statements_with_full_table_scans とか
statements_with_temp_tables とか
statements_with_sorting とか
schema_unused_indexes とか、名前を聞くだけでス
テキそうでしょ?
● https://github.com/MarkLeith/mysql-sys
How to profile your MySQL?
● MySQL Workbench 6.1
●
ps_helper の後継になる sys スキーマを作れる
– sys スキーマには i_s を食う VIEW も追加されてる
● しかもマウスでポチポチできて見やすい
●
perfornamce_schema
● SELECT event_name, source, timer_wait/ 1000/
1000/ 1000 AS timer_wait FROM
events_stages_history WHERE thread_id= (SELECT
thread_id FROM threads WHERE processlist_id=
310) ORDER BY timer_start;
●
profiling が deprecated になってしまったのでそ
の代替えぽく思ってるやつ
● http://bugs.mysql.com/bug.php?id=72130
Any Suggestions?
Suggestions
● mysqladmin ex -r -i 2 | grep -v ' | 0'
●
Suggested by Ronald Bradford
● ↑ だと、 2 秒ごとの SHOW GLOBAL STATUS の差分の
結果のうち、「変化のあったもの (= 0 でないも
の ) 」だけをひっかける
●
xperf(Windows Only)
●
MySQL サポートチームの横道さん
● 使うには SDK 入れる必要があります、だそう
● http://msdn.microsoft.com/en-us/library/window
s/hardware/hh162920.aspx

More Related Content

What's hot

MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
Hitoshi Asai
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
学 松崎
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
moai kids
 
はてなのNagios - モニカジ#3
はてなのNagios - モニカジ#3はてなのNagios - モニカジ#3
はてなのNagios - モニカジ#3
Shoichi Masuhara
 

What's hot (20)

Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
MHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQLMHAの次を目指す mikasafabric for MySQL
MHAの次を目指す mikasafabric for MySQL
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
 
MySQL clients
MySQL clientsMySQL clients
MySQL clients
 
MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2MySQL Casual Talks in Fukuoka vol.2
MySQL Casual Talks in Fukuoka vol.2
 
カジュアルにバックアップ - MySQL Casual Talks 福岡
カジュアルにバックアップ - MySQL Casual Talks 福岡カジュアルにバックアップ - MySQL Casual Talks 福岡
カジュアルにバックアップ - MySQL Casual Talks 福岡
 
sysloadや監視などの話(仮)
sysloadや監視などの話(仮)sysloadや監視などの話(仮)
sysloadや監視などの話(仮)
 
binary log と 2PC と Group Commit
binary log と 2PC と Group Commitbinary log と 2PC と Group Commit
binary log と 2PC と Group Commit
 
サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)
 
MySQLerの7つ道具
MySQLerの7つ道具MySQLerの7つ道具
MySQLerの7つ道具
 
MongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasualMongoDB on EC2 #mongodbcasual
MongoDB on EC2 #mongodbcasual
 
TokuDB試してみる
TokuDB試してみるTokuDB試してみる
TokuDB試してみる
 
MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編MySQLやSSDとかの話・後編
MySQLやSSDとかの話・後編
 
MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編MySQLやSSDとかの話 後編
MySQLやSSDとかの話 後編
 
Open VZ
Open VZOpen VZ
Open VZ
 
AWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストールAWSのRedHatにMySQL最速インストール
AWSのRedHatにMySQL最速インストール
 
Casual Compression on MongoDB
Casual Compression on MongoDBCasual Compression on MongoDB
Casual Compression on MongoDB
 
MySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLはMySQL 5.7の次のMySQLは
MySQL 5.7の次のMySQLは
 
MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編MySQLやSSDとかの話・前編
MySQLやSSDとかの話・前編
 
はてなのNagios - モニカジ#3
はてなのNagios - モニカジ#3はてなのNagios - モニカジ#3
はてなのNagios - モニカジ#3
 

Viewers also liked

実録 Oracle ace詐欺 2nd season
実録 Oracle ace詐欺 2nd season実録 Oracle ace詐欺 2nd season
実録 Oracle ace詐欺 2nd season
yoku0825
 
理解したつもりになるGit入門
理解したつもりになるGit入門理解したつもりになるGit入門
理解したつもりになるGit入門
Yoshihiro Sasaki
 
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
Ryosuke IWANAGA
 
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
goccy
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_irc
rarere
 

Viewers also liked (20)

実録 Oracle ace詐欺 2nd season
実録 Oracle ace詐欺 2nd season実録 Oracle ace詐欺 2nd season
実録 Oracle ace詐欺 2nd season
 
5.7の次のMySQL
5.7の次のMySQL5.7の次のMySQL
5.7の次のMySQL
 
Plack::Request with Encoding
Plack::Request with EncodingPlack::Request with Encoding
Plack::Request with Encoding
 
テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」テーマ「なんでもないようなこと」
テーマ「なんでもないようなこと」
 
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopmGames::* - Perlで 「ゲーム」しよう #hokkaidopm
Games::* - Perlで 「ゲーム」しよう #hokkaidopm
 
YAPCレポートの舞台裏
YAPCレポートの舞台裏YAPCレポートの舞台裏
YAPCレポートの舞台裏
 
理解したつもりになるGit入門
理解したつもりになるGit入門理解したつもりになるGit入門
理解したつもりになるGit入門
 
Using Dancer
Using DancerUsing Dancer
Using Dancer
 
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
"Ops Tools with Perl" 2012/05/12 Hokkaido.pm
 
Currying in perl
Currying in perlCurrying in perl
Currying in perl
 
YAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pmYAPC::AsiaとHokkaido.pm
YAPC::AsiaとHokkaido.pm
 
Use Carton
Use CartonUse Carton
Use Carton
 
Asset Pipeline for Perl
Asset Pipeline for PerlAsset Pipeline for Perl
Asset Pipeline for Perl
 
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)これからのPerlプロダクトのかたち(YAPC::Asia 2013)
これからのPerlプロダクトのかたち(YAPC::Asia 2013)
 
PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416PHPカンファレンス北海道_20160416
PHPカンファレンス北海道_20160416
 
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使うYAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
YAPC::Asia 2013 - CPAN Testers Reports の情報を上手に使う
 
Takao.mt 2013
Takao.mt 2013Takao.mt 2013
Takao.mt 2013
 
テーマ「最適化」
テーマ「最適化」テーマ「最適化」
テーマ「最適化」
 
Google trends to_irc
Google trends to_ircGoogle trends to_irc
Google trends to_irc
 
CPAN/便利モジュール
CPAN/便利モジュールCPAN/便利モジュール
CPAN/便利モジュール
 

Similar to MySQLをプロファイる(仮)

tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
Ryosuke IWANAGA
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
2bo 2bo
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
外道 父
 

Similar to MySQLをプロファイる(仮) (20)

etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
etckeeperをopenSUSEの公式リポジトリに入れたいぞ! Ver.2
 
What's New in MySQL 5.7 Replication
What's New in MySQL 5.7 ReplicationWhat's New in MySQL 5.7 Replication
What's New in MySQL 5.7 Replication
 
分散Key/Valueストア Kai 事例紹介
分散Key/Valueストア Kai事例紹介分散Key/Valueストア Kai事例紹介
分散Key/Valueストア Kai 事例紹介
 
tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
ログ解析基盤におけるストリーム処理パイプラインについて
ログ解析基盤におけるストリーム処理パイプラインについてログ解析基盤におけるストリーム処理パイプラインについて
ログ解析基盤におけるストリーム処理パイプラインについて
 
Djangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込むDjangoとweb2pyをapacheに組込む
Djangoとweb2pyをapacheに組込む
 
MySQLトラブル解析入門
MySQLトラブル解析入門MySQLトラブル解析入門
MySQLトラブル解析入門
 
Osc2013 tokyospring
Osc2013 tokyospringOsc2013 tokyospring
Osc2013 tokyospring
 
今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!今更GWTで遊ぶぜ!
今更GWTで遊ぶぜ!
 
最近の身の回りの電力事情
最近の身の回りの電力事情最近の身の回りの電力事情
最近の身の回りの電力事情
 
俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり) 俺のZabbixがこんなに可愛いわけがない(おかわり)
俺のZabbixがこんなに可愛いわけがない(おかわり)
 
Drupal補完計画
Drupal補完計画Drupal補完計画
Drupal補完計画
 
クラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーククラウド時代だからSpring-Retryフレームワーク
クラウド時代だからSpring-Retryフレームワーク
 
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
ビビッド・パワポ・オペレーションβ ~エンジニアのための、ゆるふわパワポ術~(qpstudy 2013.01 LT)
 
Redis & Redis HA design with Keepalived
Redis & Redis HA design with KeepalivedRedis & Redis HA design with Keepalived
Redis & Redis HA design with Keepalived
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾OpenStackでつくる開発環境と外道塾
OpenStackでつくる開発環境と外道塾
 
これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)これからのコンピューティングとJava(Hacker Tackle)
これからのコンピューティングとJava(Hacker Tackle)
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
 
使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!使ってみた!ioMemoryで実現する噂のAtomic write!
使ってみた!ioMemoryで実現する噂のAtomic write!
 

More from yoku0825

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

More from yoku0825 (20)

逝くぞ最新版、罠の貯蔵は十分か
逝くぞ最新版、罠の貯蔵は十分か逝くぞ最新版、罠の貯蔵は十分か
逝くぞ最新版、罠の貯蔵は十分か
 
MySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれやMySQLレプリケーションあれやこれや
MySQLレプリケーションあれやこれや
 
MySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいことMySQL 8.0で憶えておいてほしいこと
MySQL 8.0で憶えておいてほしいこと
 
片手間MySQLチューニング戦略
片手間MySQLチューニング戦略片手間MySQLチューニング戦略
片手間MySQLチューニング戦略
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリング
 
わかった気になるMySQL
わかった気になるMySQLわかった気になるMySQL
わかった気になるMySQL
 
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろうMySQL 5.7の次のMySQL 8.0はどんなものになるだろう
MySQL 5.7の次のMySQL 8.0はどんなものになるだろう
 
MySQLアンチパターン
MySQLアンチパターンMySQLアンチパターン
MySQLアンチパターン
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plus
 
mikasafabric for MySQL
mikasafabric for MySQLmikasafabric for MySQL
mikasafabric for MySQL
 
とあるイルカの近況報告
とあるイルカの近況報告とあるイルカの近況報告
とあるイルカの近況報告
 
MySQL Fabricでぼっこぼこにされたはなし
MySQL FabricでぼっこぼこにされたはなしMySQL Fabricでぼっこぼこにされたはなし
MySQL Fabricでぼっこぼこにされたはなし
 
MySQLと正規形のはなし
MySQLと正規形のはなしMySQLと正規形のはなし
MySQLと正規形のはなし
 
MySQLおじさんの逆襲
MySQLおじさんの逆襲MySQLおじさんの逆襲
MySQLおじさんの逆襲
 
地雷職人の朝は早い
地雷職人の朝は早い地雷職人の朝は早い
地雷職人の朝は早い
 
ペパボ de MySQL
ペパボ de MySQLペパボ de MySQL
ペパボ de MySQL
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
紹介 of Anemometer
紹介 of Anemometer紹介 of Anemometer
紹介 of Anemometer
 
MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形MySQL 5.7が魅せる新しい運用の形
MySQL 5.7が魅せる新しい運用の形
 

MySQLをプロファイる(仮)

  • 1. MySQL をプロファイる ( 仮 ) 2014/04/14 yoku0825 MyNA 会 2014 年 4 月
  • 2. I'm yoku0825 ● とある企業の DBA ● オラクれない ● ポスグれない ● マイエスキューエる ● 家に帰ると ● 嫁の夫 ● せがれの父 ● My role in MyNA is sliding.         ⊂ ( ゚ Д ゚⊂⌒`つ≡≡≡
  • 4. 今日のコンセプト ● みなさん MySQL のご機嫌をうかがう時何使って ます? ● 私はこんなの使ってますので、他にも「こんなのあ るよ」ってあったら教えろください
  • 5. How to profile your MySQL? ● dstat -apr ● 他のサーバーと比べる時に便利 ● SET GLOBAL する時は一緒に流しておく ● 定常値的なものを把握するのに ● カーネルによっては -r 使えない ● iostat -mx ● await, svctm あたり ● I/O なのかそれ以外なのか…というあたり ● top -iH -p `pidof mysqld` ● 見るのは State くらい ● "f"=> "J"(CPU 番号 ), "P"(SWAP)
  • 6. How to profile your MySQL? ● perf top -p `pidof mysqld` ● 役に立ったことはないけど紳士のたしなみ ● pt-ioprofile --cell sizes --run-time 10 ● どのファイルに対して I/O したか見る ● 中身は strace を整形する bash スクリプト ● Mroonga は mmap 使ってるから見られないことに最 近気が付いた ● 短いスパンで乱打するとハングすることが
  • 7. How to profile your MySQL? ● innotop ● Query List("Q") ● InnoDB Row Ops("R") ● InnoDB Txns("T") ● InnoDB Lock Waits("K") ● Locks("L") ● Variables & Status("S") – Choose a set of values("s") – Enter variables for commands("e") – 自分でカスタムできるっぽいけどやってない ● InnoDB I/O Info("I")
  • 8. How to profile your MySQL? ● mysqladmin ex -r -i 2 | grep .. ● 差分だけちゃきちゃき流しっぱにする ● そこにだけ気を取られて他の数値が跳ね上がったり すると orz ● mysql -Ee "SHOW ENGINE INNODB STATUS" | tee >(grep --color -i pending) ● pending なんちゃらだけ見ていたいけど、 pending なんちゃらが出てた時には他の出力も見たい ● gdb -ex "set pagination 0" -ex "thread apply all bt" -batch -p `pidof mysqld` ● 世界が止まるので注意 ● perf top と同じくたしなみ
  • 9. How to profile your MySQL? ● SELECT table_name, index_name, SUM(number_records) AS record, SUM(data_size) AS datasize FROM information_schema.innodb_buffer_page GROUP BY 1, 2; ● 使ってるはずなのに載ってないインデックスとかあ ると泣ける ● SELECT free_page_clock, count(*) FROM information_schema.innodb_buffer_page GROUP BY 1; ● 何回そのページが free されたか ● ずっと載りっぱなしの領域と、どんどん LRU Flush される領域の数の把握
  • 10. How to profile your MySQL? ● pager grep -v Sleep からの SHOW FULL PROCESSLIST; ● だいたい State 見る ● Waiting for query cache lock に出会うこと多い ● cmake -DENABLE_GPROF=ON ● gprof をオンにしてコンパイル ● 複数スレッドの劣化が激しすぎて微妙だった ● 正常終了時、 datadir に gmon.out を作るの で、 gprof bin/mysqld data/gmon.out で食わせる
  • 11. How to profile your MySQL? ● cmake -DWITH_VALGRIND=ON ● valgrind --tool=massif mysqld .. ヒープ周り ● valgrind --tool=callgrind mysqld.. コールグラ フ取れるらしいけど使ったことない ● strace -f -p `pidof mysqld` 2>&1 | grep .. ● ソケット周りの I/O を見るときに使うことが多い ● 標準エラー出力に吐いちゃうのでリダイレクト忘れ ると泣きそうになる ● gdb -p `pidof mysqld` ● ステップ実行最強説 ● パフォーマンスのプロファイルには使わない。マ ニュアルよくわからん時とか
  • 12. How to profile your MySQL? ● SET profiling= 1; <Query>; SHOW PROFILE; ● 問題のクエリーが判ってて、再現性がある場合 ● Status の意味が判らないときはソースコードから 探す ● EXPLAIN .. ● 「ある程度判ってる人」が見た後でも key_len と Extra は見ておく ● possible_keys が見づらくなるから、インデックス にはわかりやすい名前を付けてほしいなー
  • 13. How to profile your MySQL? ● SET SESSION optimizer_trace= 'enabled=on'; <Query>; SELECT * FROM information_schema.optimizer_traceG ● 実はあんまり見たことない ● ps_helper(sys schema) ● statements_with_full_table_scans とか statements_with_temp_tables とか statements_with_sorting とか schema_unused_indexes とか、名前を聞くだけでス テキそうでしょ? ● https://github.com/MarkLeith/mysql-sys
  • 14. How to profile your MySQL? ● MySQL Workbench 6.1 ● ps_helper の後継になる sys スキーマを作れる – sys スキーマには i_s を食う VIEW も追加されてる ● しかもマウスでポチポチできて見やすい ● perfornamce_schema ● SELECT event_name, source, timer_wait/ 1000/ 1000/ 1000 AS timer_wait FROM events_stages_history WHERE thread_id= (SELECT thread_id FROM threads WHERE processlist_id= 310) ORDER BY timer_start; ● profiling が deprecated になってしまったのでそ の代替えぽく思ってるやつ ● http://bugs.mysql.com/bug.php?id=72130
  • 16. Suggestions ● mysqladmin ex -r -i 2 | grep -v ' | 0' ● Suggested by Ronald Bradford ● ↑ だと、 2 秒ごとの SHOW GLOBAL STATUS の差分の 結果のうち、「変化のあったもの (= 0 でないも の ) 」だけをひっかける ● xperf(Windows Only) ● MySQL サポートチームの横道さん ● 使うには SDK 入れる必要があります、だそう ● http://msdn.microsoft.com/en-us/library/window s/hardware/hh162920.aspx