Successfully reported this slideshow.
Your SlideShare is downloading. ×

Maatkitの紹介

Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Ad
Loading in …3
×

Check these out next

1 of 31 Ad

More Related Content

Slideshows for you (20)

Similar to Maatkitの紹介 (20)

Advertisement

Recently uploaded (20)

Advertisement

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オペレーションで楽しましょう! 是非便利な使い方をシェアしていきましょう!

×