[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
SlideShare a Scribd company logo
MaatKitの紹介


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

MyISAMのテーブルを全部InnoDBに変換する
$ mk-find database1 -uhoge -ppuyo --engine MyISAM --exec 'ALTER
TABLE %D.%N ENGINE=INNODB' –print
mk-slave-restart
 エラーで止まったmysqldをリスタートす
  るツール
 特定のエラー番号の場合のみrestart
  duplicate entryとかを怒涛の如くskip可能


$ mk-slave-restart -uhoge -ppuyo --error-numbers 1062 --
verbose
mk-kill
 特定の条件に合致したクエリをkill
  条件指定が豊富


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

                         dbM




                   db1         db2




       あるslaveDBを別のslaveDBのslaveにする
mk-slave-move db2 --slave-of-sibling db1 db1
      mk-slave-move db2 --slave-of-sibling

                         dbM




                   db1




            db2




db1,db2共にレプリケーションが止まるので注意(特にdb1)
mk-slave-move db2 –sibling-of-master

                        dbM




                  db1




           db2



      孫slaveを子slaveと同じ階層に移動
mk-slave-move db2 –sibling-of-master
 mk-slave-move db2 –sibling-of-master

                         dbM




                   db1         db2




            db2




db1,db2共にレプリケーションが止まるので注意(特にdb1)
mk-slave-move db4 slave-of-uncle db3



                      db1




                db2         db3




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



                      dbM1




                db1           db2




         db1            db3
mk-query-digest
 クエリー解析ツール
 maatkitの中でも主要なツール
  これだけで1時間しゃべれるくらい
 解析できるデータ形式が豊富
  slowlog/tcpdump/binlog etc
 出力はmysqldumpslowみたいな感じ
  以前はmysqldumpslow使っていたが今は
   mk-query-digestを使っている
# 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
--どのテーブルに対しての処理か?
# 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
キャッシュをあたためる
 あるサーバへのクエリのうち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/'
 最近はmemcached,PostgreSQLも理解
  するらしい
  試したことはありません
 mk-query-digestを毎日cronで実行して
  る
  クエリ改善の指標として
その他
 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
まとめ
 かなり高機能
 mysqlに関するツールはいろいろあるが
  Maatkitを使っておいて損はない
  MySQL公式ドキュメント
  書籍
  Maatkit
 最近はこれなしではやっていけない
Maatkitを使って
DBオペレーションで楽しましょう!
是非便利な使い方をシェアしていきましょう!

More Related Content

Maatkitの紹介

  • 1. MaatKitの紹介 May 14, 2010 株式会社はてな 吉田晃典(id:marqs)
  • 2. アジェンダ  自己紹介  Maatkit とは?  Maatkitの特徴  Maatkitのツール群をいくつか紹介  まとめ
  • 3. 自己紹介 はてなでエンジニア -自作サーバ/ベンダサーバ -データベース -バックエンドシステム -ネットワークはid:maoe/id:halfrack ブログ http://d.hatena.ne.jp/marqs twitter http://twitter.com/marqs
  • 4. 趣味  自転車  MTB -> Road -> MTB?  シマノバイカーズフェスティバル毎年出てます  音楽  I am robot and proud  映画  ファンボーイズ  はたらくくるま  圧雪車が特に好き
  • 7. Maatkitとは?  MySQLを主な対象とした便利ツール群  最近はMySQL以外にも  開発者  Baron Schwartzさん  実践ハイパフォーマンスMySQLの著者  Daniel Nichter  Hack MySQLの人  その他  Perconaがメインスポンサー  http://www.maatkit.org/users/sponsors
  • 8. 特徴  ドキュメントは充実  コマンド例・オプションも豊富  実行結果例が少ない…  オプションも豊富  日本語情報は少ない  広く使われてるらしい  Facebook/Governmant/Bank etc  開発が活発  2010/5/14の最新版は、2010/5/3版  ツール数も結構変わる  http://code.google.com/p/maatkit/
  • 11. インストール  簡単  rpmが配布されてる  debian packageも  ソースからでも  perlモジュールいくつかいれるだけ  最近はてなではMySQLインストールと同 時に入れている
  • 12. いくつか紹介  mk-find  mk-slave-restart  mk-kill  mk-slave-move  mk-query-digest
  • 13. mk-find  maatkitの中でも基本ツール  GNU findのように特定のテーブル情報を 取得するツール  show table status  execオプションで特定の処理も可能  正規表現も使用可能
  • 14. 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
  • 15. mk-slave-restart  エラーで止まったmysqldをリスタートす るツール  特定のエラー番号の場合のみrestart  duplicate entryとかを怒涛の如くskip可能 $ mk-slave-restart -uhoge -ppuyo --error-numbers 1062 -- verbose
  • 16. mk-kill  特定の条件に合致したクエリをkill  条件指定が豊富 バッチサーバからプロダクションDBに間 違って投げられた参照クエリをkill $ mk-kill –match-host batchserver01 -- kill –-busy-time 3 –interval 10
  • 17. mk-slave-move  レプリケーションスレーブを移動  stop slave until ほげほげとかいらない  メンテでとても便利  mk-slave-move
  • 18. mk-slave-move db2 --slave-of-sibling db1 dbM db1 db2 あるslaveDBを別のslaveDBのslaveにする
  • 19. mk-slave-move db2 --slave-of-sibling db1 db1 mk-slave-move db2 --slave-of-sibling dbM db1 db2 db1,db2共にレプリケーションが止まるので注意(特にdb1)
  • 20. mk-slave-move db2 –sibling-of-master dbM db1 db2 孫slaveを子slaveと同じ階層に移動
  • 21. mk-slave-move db2 –sibling-of-master mk-slave-move db2 –sibling-of-master dbM db1 db2 db2 db1,db2共にレプリケーションが止まるので注意(特にdb1)
  • 22. mk-slave-move db4 slave-of-uncle db3 db1 db2 db3 db4
  • 23. mk-slave-move db4 slave-of-uncle db3 dbM1 db1 db2 db1 db3
  • 24. mk-query-digest  クエリー解析ツール  maatkitの中でも主要なツール  これだけで1時間しゃべれるくらい  解析できるデータ形式が豊富  slowlog/tcpdump/binlog etc  出力はmysqldumpslowみたいな感じ  以前はmysqldumpslow使っていたが今は mk-query-digestを使っている
  • 25. # 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 --どのテーブルに対しての処理か?
  • 26. # 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
  • 27. キャッシュをあたためる  あるサーバへのクエリのうち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/'
  • 28.  最近はmemcached,PostgreSQLも理解 するらしい  試したことはありません  mk-query-digestを毎日cronで実行して る  クエリ改善の指標として
  • 29. その他  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
  • 30. まとめ  かなり高機能  mysqlに関するツールはいろいろあるが Maatkitを使っておいて損はない  MySQL公式ドキュメント  書籍  Maatkit  最近はこれなしではやっていけない