Maatkit - расширенные возможности MySQL

Maatkit - это набор инструментов, который предоставляет собой расширенные средства по управлению MySQL, сбору аналитической информации и ее обработке, проведению рутинных операций, восстановлению данных и прочего. В пакет входит множество полезных инструментов, которых к сожалению нет в стандартной поставке с БД, но обязательно нужны для максимально эффективной работы. Этот пакет разработан и поддерживается компанией Percona - известных экспертов в области консультирования вопросов производительности.
Пакет Maatkit входит во все распространенные дистрибутивы Linux систем, поэтому не придется терять время на установке. Хотя, если Вы хотите получить наиболее последнюю версию, следует качать версию с сайта (обновления выходят очень часто).
После установки Вам станет доступно почти 20 различных инструментов, входящих в поставку. Некоторые из них мы и рассмотрим.
mk-audit
Этот инструмент собирает статистику сервера MySQL, анализирует конфигурацию и строит отчет с комментариями и рекоммендациями. Очень полезен для подстройке сервера в рабочем режиме.
mk-audit --user mysql_user --password mysql_password
После запуска этой команды будет сгенерирован отчет следующего вида:
____________________________________________________________ MySQL Instance 1
Version: 5.1.31-1ubuntu2-log Architecture: 32-bit
Uptime: 08:31:28
ps vals: user mysql cpu% 0.0 rss 29.01M vsz 127.79M syslog: No
Bin: /usr/sbin/mysqld
Data dir: /var/lib/mysql/
PID file: /var/run/mysqld/mysqld.pid
Socket: /var/run/mysqld/mysqld.sock
Port: 3306
Log locations:
Error:
Relay:
Slow: 1 s /var/log/mysql/mysql-slow.log
Config file location:
SCHEMA ________________________________________________________________
#DATABASES #TABLES #ROWS #INDEXES SIZE DATA SIZE INDEXES
29 230 7.94k 487 11.55M 3.62M
Key buffer size : 32.00M
InnoDB buffer pool size: 8.00M
Top 5 largest databases:
DATABASE SIZE DATA
connect 3.53M
connect_mediaDB 3.27M
connect_horo 2.75M
mysql 516.94k
connect_usersDB 208.00k
Remaining 24 1.30M (55.35k average)
Top 5 largest tables:
DB.TBL SIZE DATA SIZE INDEX #ROWS ENGINE
connect.dreams 2.52M 128.00k 1.49k InnoDB
connect_mediaDB.v 2.02M 48.00k 219 InnoDB
connect_horo.zodi 1.52M 32.00k 509 InnoDB
connect_mediaDB.v 1.02M 144.00k 277 InnoDB
connect_horo.comp 528.00k 32.00k 293 InnoDB
Remaining 225 3.97M (18.09k average)
Engines:
ENGINE SIZE DATA SIZE INDEX #TABLES #INDEXES
MyISAM 597.40k 231.00k 56 114
CSV 0 0 2 NA
InnoDB 10.97M 3.39M 172 373
Triggers, Routines, Events:
DATABASE TYPE COUNT
No triggers, routines, or events
PROBLEMS ______________________________________________________________
Undefined system variable: report_password at /usr/bin/mk-audit line 2966
Undefined system variable: skip_federated at /usr/bin/mk-audit line 2966
Undefined system variable: innodb_data_file_path at /usr/bin/mk-audit line 2966
Undefined system variable: report_host at /usr/bin/mk-audit line 2966
Undefined system variable: binlog_format at /usr/bin/mk-audit line 2966
Undefined system variable: report_user at /usr/bin/mk-audit line 2966
Undefined system variable: relay_log at /usr/bin/mk-audit line 2966
Out of sync system variables (online value differs from config value):
VARIABLE ONLINE VALUE CONFIG VALUE
innodb_log_group_hom ./
long_query_time 1.000000 1
log_error /var/lib/mysql/golotyuk-
log ON /var/log/mysql/mysql.log
datadir /var/lib/mysql/ .
log_slow_queries ON /var/log/mysql/mysql-slo
basedir /usr/ /usr
Things to Note:
- skip-name-resolve not set
- max_connections has been modified from its default (100): 8
- innodb_flush_method is not set to O_DIRECT
- InnoDB: buffer pool too small
Aggregated PROCESSLIST ________________________________________________
FIELD VALUE COUNT TOTAL TIME (s)
db
connect_groupalbumsDB 1 0
connect_sendmailDB 1 4255
user
root 2 4255
host
localhost 2 4255
state
1 4255
null 1 0
command
query 1 0
sleep 1 4255
Полученные данные помогут определить наиболее подходящие показатели для оптимальной настройки MySQL.
mk-find
Используется для поиска таблиц по критерию и для исполнения различных действий над найденными таблицами. Список допустимых действий достаточно обширный, например, выполнить SQL команду или вывести доп. сведения о таблицах. Несколько примеров:
Найти и вывести на экран все таблицы типа MyISAM:
mk-find --user mysql_user --password mysql_password --engine MyISAM
Найти все таблицы MyISAM и поменять их тип на InnoDB:
mk-find --user mysql_user --password mysql_password --engine MyISAM --exec "ALTER TABLE %D.%N ENGINE=InnoDB"
Найти все таблицы и вывести их сумарный объем (данные + индексы), а результат отсортировать по размеру таблиц (сначала самые большие)
mk-find --user mysql_user --password mysql_password --printf "%T\t%D.%N\n" | sort -rn
mk-query-digest
Используется для обработки лог файлов MySQL (slow log), анализа и построения отчетов о запросах.
Для того, чтобы провести анализ log файла, нужно выполнить:
mk-query-audit /var/log/mysql/mysql-query.log
После этого будет сгенерирован отчет следующего вида:
# 180ms user time, 30ms system time, 11.34M rss, 14.25M vsz # Overall: 73 total, 25 unique, 0.46 QPS, 0.03x concurrency ______________ # total min max avg 95% stddev median # Exec time 5s 0 3s 68ms 0 405ms 0 # Lock time 0 0 0 0 0 0 0 # Rows sent 3.22k 0 500 45.22 487.09 125.57 0.99 # Rows exam 165.77k 0 12.24k 2.27k 9.33k 3.10k 874.75 # Hosts 73 # Time range 2009-07-28 00:55:36 to 2009-07-28 00:58:15 # bytes 11.91k 6 292 167.10 284.79 102.58 107.34 # Query 1: 0 QPS, 0x concurrency, ID 0x602AF2A85F16DD4E at byte 1035 _____ # This item is included in the report because it matches --limit. # pct total min max avg 95% stddev median # Count 1 1 # Exec time 60 3s 3s 3s 3s 3s 0 3s # Lock time 0 0 0 0 0 0 0 0 # Rows sent 7 232 232 232 232 232 0 232 # Rows exam 0 301 301 301 301 301 0 301 # Users 1 debian-sys-maint # Hosts 1 localhost # Time range 2009-07-28 00:55:39 to 2009-07-28 00:55:39 # bytes 1 171 171 171 171 171 0 171 # Query_time distribution # 1us # 10us # 100us # 1ms # 10ms # 100ms # 1s ################################################################ # 10s+ ...
Этот отчет очень полезен при оптимизации запросов на уровне приложения - знайте где у Вас проблемы для эффективной оптимизации.
Другие инструменты
Кроме перечисленных, maatkit содержит еще целый ряд полезных утилит:
- mk-archiver - архивирование рядков в файл или таблицу
- mk-checksum-filter - фильтрует контрольные суммы, которые строит утилита mk-table-checksum
- mk-deadlock-logger - извлекает инфомацию о дедлоках в БД
- mk-duplicate-key-checker - поиск продублированых первичных и внешних ключей
- mk-heartbeat - мониторинг задержки репликации (репликационного лага)
- mk-log-server - обслуживает бинарные логи сервера
- mk-parallel-dump - делает дамп наборов таблиц параллельно
- mk-parallel-restore - загружает данные из файлов в БД параллельно
- mk-profile-compact - компонует вывод утилиты mk-query-profiler
- mk-query-profiler - исполняет SQL запрос и выводит детальную статистику
- mk-slave-delay - исскуственное увеличение лага репликации
- mk-slave-find - поиск и вывод репликационного дерева слейв серверов
- mk-slave-restart - перезапуск репликации после ошибок и сбоев (очень полезная утилита!)
- mk-table-checksum - проверка консистенции репликации путем построения контрольных сум на мастере и слевах и их сравнения
- mk-table-sync - эффективно синхронизует таблицы (используется для исправления репликационной разницы)
- mk-visual-explain - выводит результат команды EXPLAIN в виде дерева
Официальный сайт
Полная документация с примерами
Разработка этого продукта открыта и ведется на Google code project


Установил на Debian Lenny. mk-audit у меня не оказалось.
@dmitry
Это потому, что в репозитариях пакетов более древние версии. Пробуйте устанавливать от сюда: http://code.google.com/p/maatkit/
@Den Golotyuk
установил maatkit-5899, mk-audit там тоже отсутствует.
Да и здесь http://www.maatkit.org/doc/ его тоже нет
http://groups.google.com/group/maatkit-discuss/browse_thread/thread/f996581ac1e877ae
“It’s done: mk-audit is dead.”
@NetSpider
Да, разработчики действительно решили разделить эту утилиту на несколько отдельных, более логичных. Спасибо за информацию!