MaatKitの紹介


       May 14, 2010
       株式会社はてな
       吉田晃典(id:marqs)
アジェンダ
   自己紹介
   Maatkit とは?
   Maatkitの特徴
   Maatkitのツール群をいくつか紹介
   まとめ
自己紹介
はてなでエンジニア
   -自作サーバ/ベンダサーバ
   -データベース
   -バックエンドシステム
   -ネットワークはid:maoe/id:halfrack
 ブログ
   http://d.hatena.ne.jp/mar...
趣味
 自転車
  MTB -> Road -> MTB?
  シマノバイカーズフェスティバル毎年出てます
 音楽
  I am robot and proud
 映画
  ファンボーイズ
 はたらくくるま
  圧雪車が特に好き
MaatKit
Maatkitとは?
 MySQLを主な対象とした便利ツール群
  最近はMySQL以外にも
 開発者
  Baron Schwartzさん
    実践ハイパフォーマンスMySQLの著者
  Daniel Nichter
   ...
特徴
 ドキュメントは充実
   コマンド例・オプションも豊富
   実行結果例が少ない…
 オプションも豊富
 日本語情報は少ない
 広く使われてるらしい
   Facebook/Governmant/Bank etc
 開発...
ツール群
http://www.maatkit.org/doc/
コマンド例は豊富


いきなりRISKS
インストール
   簡単
   rpmが配布されてる
   debian packageも
   ソースからでも
     perlモジュールいくつかいれるだけ
 最近はてなではMySQLインストールと同
  時に入れている
いくつか紹介
   mk-find
   mk-slave-restart
   mk-kill
   mk-slave-move
   mk-query-digest
mk-find
 maatkitの中でも基本ツール
 GNU findのように特定のテーブル情報を
  取得するツール
  show table status
 execオプションで特定の処理も可能
  正規表現も使用可能
4GB以上のテーブルを全部出力
$ mk-find -uhoge -ppuyo --tablesize +4G
`ugomemo`.`comment`
`ugomemo`.`quick_memo`
`ugomemo`.`star`

MyISA...
mk-slave-restart
 エラーで止まったmysqldをリスタートす
  るツール
 特定のエラー番号の場合のみrestart
  duplicate entryとかを怒涛の如くskip可能


$ mk-slave-resta...
mk-kill
 特定の条件に合致したクエリをkill
  条件指定が豊富


バッチサーバからプロダクションDBに間
違って投げられた参照クエリをkill
$ mk-kill –match-host batchserver01 --
ki...
mk-slave-move
 レプリケーションスレーブを移動
  stop slave until   ほげほげとかいらない
 メンテでとても便利
 mk-slave-move
mk-slave-move db2 --slave-of-sibling db1

                         dbM




                   db1         db2




       あ...
mk-slave-move db2 --slave-of-sibling db1 db1
      mk-slave-move db2 --slave-of-sibling

                         dbM




...
mk-slave-move db2 –sibling-of-master

                        dbM




                  db1




           db2



      孫s...
mk-slave-move db2 –sibling-of-master
 mk-slave-move db2 –sibling-of-master

                         dbM




             ...
mk-slave-move db4 slave-of-uncle db3



                      db1




                db2         db3




         db4
mk-slave-move db4 slave-of-uncle db3



                      dbM1




                db1           db2




         db1 ...
mk-query-digest
 クエリー解析ツール
 maatkitの中でも主要なツール
  これだけで1時間しゃべれるくらい
 解析できるデータ形式が豊富
  slowlog/tcpdump/binlog etc
 出力はmys...
# Profile
# Rank Query ID           Response time    Calls R/Call   Item
# ==== ================== ================ ===== ...
# Query 28: 0.00 QPS, 0.00x concurrency, ID 0x7536E8C18CF3FEB5 at byte 4786286
# This item is included in the report becau...
キャッシュをあたためる
 あるサーバへのクエリのうちselectだけ
  を、別サーバに向けることができる
   LVSでウェイトをちょこちょこ上げる職人技
    がいらない!

tcpdump -i eth0 port 3306 -s ...
 最近はmemcached,PostgreSQLも理解
  するらしい
  試したことはありません
 mk-query-digestを毎日cronで実行して
  る
  クエリ改善の指標として
その他
 MKDEBUG=1 mk-slave-move db1
  slave-of-sibling db2
  デバッグ出力
  どのコマンドを実行しているかを確認できる
 実は商用サポートもあるらしい
  Commercial ...
まとめ
 かなり高機能
 mysqlに関するツールはいろいろあるが
  Maatkitを使っておいて損はない
  MySQL公式ドキュメント
  書籍
  Maatkit
 最近はこれなしではやっていけない
Maatkitを使って
DBオペレーションで楽しましょう!
是非便利な使い方をシェアしていきましょう!
Maatkitの紹介
Upcoming SlideShare
Loading in...5
×

Maatkitの紹介

12,319

Published on

Published in: Technology
1 Comment
33 Likes
Statistics
Notes
No Downloads
Views
Total Views
12,319
On Slideshare
0
From Embeds
0
Number of Embeds
8
Actions
Shares
0
Downloads
0
Comments
1
Likes
33
Embeds 0
No embeds

No notes for slide

Maatkitの紹介

  1. 1. MaatKitの紹介 May 14, 2010 株式会社はてな 吉田晃典(id:marqs)
  2. 2. アジェンダ  自己紹介  Maatkit とは?  Maatkitの特徴  Maatkitのツール群をいくつか紹介  まとめ
  3. 3. 自己紹介 はてなでエンジニア -自作サーバ/ベンダサーバ -データベース -バックエンドシステム -ネットワークはid:maoe/id:halfrack ブログ http://d.hatena.ne.jp/marqs twitter http://twitter.com/marqs
  4. 4. 趣味  自転車  MTB -> Road -> MTB?  シマノバイカーズフェスティバル毎年出てます  音楽  I am robot and proud  映画  ファンボーイズ  はたらくくるま  圧雪車が特に好き
  5. 5. MaatKit
  6. 6. Maatkitとは?  MySQLを主な対象とした便利ツール群  最近はMySQL以外にも  開発者  Baron Schwartzさん  実践ハイパフォーマンスMySQLの著者  Daniel Nichter  Hack MySQLの人  その他  Perconaがメインスポンサー  http://www.maatkit.org/users/sponsors
  7. 7. 特徴  ドキュメントは充実  コマンド例・オプションも豊富  実行結果例が少ない…  オプションも豊富  日本語情報は少ない  広く使われてるらしい  Facebook/Governmant/Bank etc  開発が活発  2010/5/14の最新版は、2010/5/3版  ツール数も結構変わる  http://code.google.com/p/maatkit/
  8. 8. ツール群 http://www.maatkit.org/doc/
  9. 9. コマンド例は豊富 いきなりRISKS
  10. 10. インストール  簡単  rpmが配布されてる  debian packageも  ソースからでも  perlモジュールいくつかいれるだけ  最近はてなではMySQLインストールと同 時に入れている
  11. 11. いくつか紹介  mk-find  mk-slave-restart  mk-kill  mk-slave-move  mk-query-digest
  12. 12. mk-find  maatkitの中でも基本ツール  GNU findのように特定のテーブル情報を 取得するツール  show table status  execオプションで特定の処理も可能  正規表現も使用可能
  13. 13. 4GB以上のテーブルを全部出力 $ mk-find -uhoge -ppuyo --tablesize +4G `ugomemo`.`comment` `ugomemo`.`quick_memo` `ugomemo`.`star` MyISAMのテーブルを全部InnoDBに変換する $ mk-find database1 -uhoge -ppuyo --engine MyISAM --exec 'ALTER TABLE %D.%N ENGINE=INNODB' –print
  14. 14. mk-slave-restart  エラーで止まったmysqldをリスタートす るツール  特定のエラー番号の場合のみrestart  duplicate entryとかを怒涛の如くskip可能 $ mk-slave-restart -uhoge -ppuyo --error-numbers 1062 -- verbose
  15. 15. mk-kill  特定の条件に合致したクエリをkill  条件指定が豊富 バッチサーバからプロダクションDBに間 違って投げられた参照クエリをkill $ mk-kill –match-host batchserver01 -- kill –-busy-time 3 –interval 10
  16. 16. mk-slave-move  レプリケーションスレーブを移動  stop slave until ほげほげとかいらない  メンテでとても便利  mk-slave-move
  17. 17. mk-slave-move db2 --slave-of-sibling db1 dbM db1 db2 あるslaveDBを別のslaveDBのslaveにする
  18. 18. mk-slave-move db2 --slave-of-sibling db1 db1 mk-slave-move db2 --slave-of-sibling dbM db1 db2 db1,db2共にレプリケーションが止まるので注意(特にdb1)
  19. 19. mk-slave-move db2 –sibling-of-master dbM db1 db2 孫slaveを子slaveと同じ階層に移動
  20. 20. mk-slave-move db2 –sibling-of-master mk-slave-move db2 –sibling-of-master dbM db1 db2 db2 db1,db2共にレプリケーションが止まるので注意(特にdb1)
  21. 21. mk-slave-move db4 slave-of-uncle db3 db1 db2 db3 db4
  22. 22. mk-slave-move db4 slave-of-uncle db3 dbM1 db1 db2 db1 db3
  23. 23. mk-query-digest  クエリー解析ツール  maatkitの中でも主要なツール  これだけで1時間しゃべれるくらい  解析できるデータ形式が豊富  slowlog/tcpdump/binlog etc  出力はmysqldumpslowみたいな感じ  以前はmysqldumpslow使っていたが今は mk-query-digestを使っている
  24. 24. # Profile # Rank Query ID Response time Calls R/Call Item # ==== ================== ================ ===== ======== ================ # 1 0xFE47F39B3FE4281E 6156.5329 11.6% 1310 4.6996 SELECT movie channel_movie # 2 0xFFE2623315E47B21 5952.0983 11.2% 2316 2.5700 SELECT comment # 3 0xC49ECF6117F883F7 4526.1356 8.5% 1736 2.6072 SELECT comment # 4 0x6501FE1A263FAFB1 4062.3021 7.6% 909 4.4690 SELECT movie channel_movie # 5 0x4BC3F3AAA8BA421D 3850.1690 7.2% 243 15.8443 SELECT movie channel_movie # 6 0xB58C8FFE86487289 3399.4927 6.4% 190 17.8921 SELECT movie # 7 0xC37AA6F1F0BED74F 2849.6909 5.4% 150 18.9979 SELECT movie # 8 0x252826A71F6BC5EB 2734.4538 5.1% 97 28.1902 SELECT comment # 9 0x356DD99C00D3C246 2682.3310 5.0% 161 16.6604 SELECT movie channel_movie # 10 0xA2D3AD044AA66C0C 2055.7533 3.9% 516 3.9840 SELECT channel_movie movie -QueryID --クエリに割り当てられたユニークID -Response --積算時間 -time --全クエリの実行時間の合計のうち、該当クエリが何%を占めているか? -Calls --該当スロークエリが記録された回数 -R/Call --ResponseをCallsで割ったもの。これが大きいとクエリ1個あたりの実行時間が大きいことになる。 -Item --どのテーブルに対しての処理か?
  25. 25. # Query 28: 0.00 QPS, 0.00x concurrency, ID 0x7536E8C18CF3FEB5 at byte 4786286 # This item is included in the report because it matches --outliers. # pct total min max avg 95% stddev median # Count 0 75 # Exec time 0 233s 1s 15s 3s 8s 3s 2s # Lock time 0 3ms 25us 87us 45us 73us 14us 40us # Rows sent 0 75 1 1 1 1 0 1 # Rows exam 0 941.58k 513 57.54k 12.55k 24.75k 9.35k 11.91k # Users 1 nobody # Hosts 12 ugobackend... (9), ugobackend... (9)... 10 more # Databases 1 ugomemo # Time range 2010-XX-Xx 05:19:29 to 2010-Xx-XX 20:01:36 # bytes 0 7.62k 104 104 104 104 0 104 # Query_time distribution # 1us # 10us # 100us # 1ms # 10ms # 100ms # 1s ################################################################ # 10s+ ## # Tables # SHOW TABLE STATUS FROM `ugomemo` LIKE 'comment'¥G # SHOW CREATE TABLE `ugomemo`.`comment`¥G # EXPLAIN SELECT COUNT(*) as count FROM comment WHERE ( dsi_user_id = ‘XXXXXXXXX' AND status = ‘XXXX' )¥G
  26. 26. キャッシュをあたためる  あるサーバへのクエリのうちselectだけ を、別サーバに向けることができる  LVSでウェイトをちょこちょこ上げる職人技 がいらない! tcpdump -i eth0 port 3306 -s 0 -x -nn -q -tttt | mk- query-digest --type tcpdump --execute h=somedb01.host.h -uuser -ppassword --filter '$event->{fingerprint} =~ m/^select/'
  27. 27.  最近はmemcached,PostgreSQLも理解 するらしい  試したことはありません  mk-query-digestを毎日cronで実行して る  クエリ改善の指標として
  28. 28. その他  MKDEBUG=1 mk-slave-move db1 slave-of-sibling db2  デバッグ出力  どのコマンドを実行しているかを確認できる  実は商用サポートもあるらしい  Commercial support and services for Maatkit are available from Percona  これから使いたいツール  mk-parallel-dump  mk-slave-delay  mk-table-checksum
  29. 29. まとめ  かなり高機能  mysqlに関するツールはいろいろあるが Maatkitを使っておいて損はない  MySQL公式ドキュメント  書籍  Maatkit  最近はこれなしではやっていけない
  30. 30. Maatkitを使って DBオペレーションで楽しましょう! 是非便利な使い方をシェアしていきましょう!

×