More Web Proxy on the site http://driver.im/Maatkitの紹介
- 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
- 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
- 16. mk-kill
特定の条件に合致したクエリをkill
条件指定が豊富
バッチサーバからプロダクションDBに間
違って投げられた参照クエリをkill
$ mk-kill –match-host batchserver01 --
kill –-busy-time 3 –interval 10
- 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/'
- 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