SlideShare uma empresa Scribd logo
1 de 31
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とは?
 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オペレーションで楽しましょう!
是非便利な使い方をシェアしていきましょう!

Mais conteúdo relacionado

Mais procurados

Handlerさんコンニチワ
HandlerさんコンニチワHandlerさんコンニチワ
Handlerさんコンニチワyoku0825
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションyoku0825
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニングyoku0825
 
ペパボ de MySQL
ペパボ de MySQLペパボ de MySQL
ペパボ de MySQLyoku0825
 
サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)snicker_jp
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plusyoku0825
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技yoku0825
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Kazuya Wada
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムHitoshi Asai
 
MySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれやMySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれやyoku0825
 
MySQLチューニング
MySQLチューニングMySQLチューニング
MySQLチューニングyoku0825
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリングyoku0825
 
バックアップに一番いいファイルシステムを頼む
バックアップに一番いいファイルシステムを頼むバックアップに一番いいファイルシステムを頼む
バックアップに一番いいファイルシステムを頼むKenichiro MATOHARA
 
TokuDB試してみる
TokuDB試してみるTokuDB試してみる
TokuDB試してみるyoku0825
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニングKensuke Nagae
 

Mais procurados (20)

Handlerさんコンニチワ
HandlerさんコンニチワHandlerさんコンニチワ
Handlerさんコンニチワ
 
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーションイルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
イルカさんチームからゾウさんチームに教えたいMySQLレプリケーション
 
雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング雑なMySQLパフォーマンスチューニング
雑なMySQLパフォーマンスチューニング
 
ペパボ de MySQL
ペパボ de MySQLペパボ de MySQL
ペパボ de MySQL
 
サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)サバフェスLT(元うなぎ屋)
サバフェスLT(元うなぎ屋)
 
MySQLerの7つ道具 plus
MySQLerの7つ道具 plusMySQLerの7つ道具 plus
MySQLerの7つ道具 plus
 
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
サーバーが完膚なきまでに死んでもMySQLのデータを失わないための表技
 
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~Rが苦手な人にもRを使って頂くために~RcommanderとRook~
Rが苦手な人にもRを使って頂くために~RcommanderとRook~
 
MongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステムMongoDBではじめるカジュアルなタイムラインシステム
MongoDBではじめるカジュアルなタイムラインシステム
 
MySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれやMySQLの全文検索に関するあれやこれや
MySQLの全文検索に関するあれやこれや
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
MySQLチューニング
MySQLチューニングMySQLチューニング
MySQLチューニング
 
Mysql casial01
Mysql casial01Mysql casial01
Mysql casial01
 
MySQLステータスモニタリング
MySQLステータスモニタリングMySQLステータスモニタリング
MySQLステータスモニタリング
 
私とmysqlとROLE
私とmysqlとROLE私とmysqlとROLE
私とmysqlとROLE
 
SSH Tips & Tricks
SSH Tips & TricksSSH Tips & Tricks
SSH Tips & Tricks
 
バックアップに一番いいファイルシステムを頼む
バックアップに一番いいファイルシステムを頼むバックアップに一番いいファイルシステムを頼む
バックアップに一番いいファイルシステムを頼む
 
initramfsについて
initramfsについてinitramfsについて
initramfsについて
 
TokuDB試してみる
TokuDB試してみるTokuDB試してみる
TokuDB試してみる
 
Maatkit で MySQL チューニング
Maatkit で MySQL チューニングMaatkit で MySQL チューニング
Maatkit で MySQL チューニング
 

Semelhante a Maatkitの紹介

tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1Ryosuke IWANAGA
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!Midori Oge
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法Masahito Zembutsu
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Takeshi Arabiki
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Yoshinori Matsunobu
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試したy-uti
 
MySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LTMySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LTTomohiro Ikeda
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Masahiro Nagano
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇Manabu Ori
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介Satoshi Hirata
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
Gangliaはじめました
GangliaはじめましたGangliaはじめました
Gangliaはじめましたyuzorock
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術yoku0825
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kKenji Aoyama
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11MapR Technologies Japan
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~Preferred Networks
 

Semelhante a Maatkitの紹介 (20)

tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1tcpdump & xtrabackup @ MySQL Casual Talks #1
tcpdump & xtrabackup @ MySQL Casual Talks #1
 
about DakotagUI
about DakotagUIabout DakotagUI
about DakotagUI
 
20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!20140612_Docker上でCloudStackを動かしてみる!!
20140612_Docker上でCloudStackを動かしてみる!!
 
HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法HashiCorpのNomadを使ったコンテナのスケジューリング手法
HashiCorpのNomadを使ったコンテナのスケジューリング手法
 
Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理Rのデータ構造とメモリ管理
Rのデータ構造とメモリ管理
 
Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)Linux/DB Tuning (DevSumi2010, Japanese)
Linux/DB Tuning (DevSumi2010, Japanese)
 
Task Spooler を試した
Task Spooler を試したTask Spooler を試した
Task Spooler を試した
 
MySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LTMySQL Casual Talks Vol.3 LT
MySQL Casual Talks Vol.3 LT
 
Zabbix study5lt
Zabbix study5ltZabbix study5lt
Zabbix study5lt
 
Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14Web Operations and Perl kansai.pm#14
Web Operations and Perl kansai.pm#14
 
about dakota6.7 gui
about dakota6.7 guiabout dakota6.7 gui
about dakota6.7 gui
 
TripleOの光と闇
TripleOの光と闇TripleOの光と闇
TripleOの光と闇
 
PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介PostgreSQL13 新機能紹介
PostgreSQL13 新機能紹介
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Gangliaはじめました
GangliaはじめましたGangliaはじめました
Gangliaはじめました
 
MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術MySQLを割と一人で300台管理する技術
MySQLを割と一人で300台管理する技術
 
A story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88kA story of porting OpenBSD/luna88k
A story of porting OpenBSD/luna88k
 
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
Apache Drill でオープンデータを分析してみる - db tech showcase Sapporo 2015 2015/09/11
 
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
PFIセミナーH271022 ~コマンドを叩いて遊ぶ コンテナ仮想、その裏側~
 
osoljp 2011.08
osoljp 2011.08osoljp 2011.08
osoljp 2011.08
 

Mais de Akinori YOSHIDA

Datacenter As Acomputer 第8章
Datacenter As Acomputer 第8章Datacenter As Acomputer 第8章
Datacenter As Acomputer 第8章Akinori YOSHIDA
 
Datacenter As Acomputer 第6章
Datacenter As Acomputer 第6章Datacenter As Acomputer 第6章
Datacenter As Acomputer 第6章Akinori YOSHIDA
 
Data Center As A Computer 5章前半
Data Center As A Computer 5章前半Data Center As A Computer 5章前半
Data Center As A Computer 5章前半Akinori YOSHIDA
 
Data Center As A Computer 2章前半
Data Center As A Computer 2章前半Data Center As A Computer 2章前半
Data Center As A Computer 2章前半Akinori YOSHIDA
 

Mais de Akinori YOSHIDA (6)

Dev Ops at Hatena
Dev Ops at HatenaDev Ops at Hatena
Dev Ops at Hatena
 
Datacenter As Acomputer 第8章
Datacenter As Acomputer 第8章Datacenter As Acomputer 第8章
Datacenter As Acomputer 第8章
 
Datacenter As Acomputer 第6章
Datacenter As Acomputer 第6章Datacenter As Acomputer 第6章
Datacenter As Acomputer 第6章
 
Data Center As A Computer 5章前半
Data Center As A Computer 5章前半Data Center As A Computer 5章前半
Data Center As A Computer 5章前半
 
Data Center As A Computer 2章前半
Data Center As A Computer 2章前半Data Center As A Computer 2章前半
Data Center As A Computer 2章前半
 
Jisaku09 presentation
Jisaku09 presentationJisaku09 presentation
Jisaku09 presentation
 

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  映画  ファンボーイズ  はたらくくるま  圧雪車が特に好き
  • 5.
  • 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  最近はこれなしではやっていけない