Главная > Технологии > Maatkit - расширенные возможности MySQL

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

maatkit

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

Google Bookmarks Digg I.ua Ru-marks Ruspace Zakladok.net Reddit delicious Technorati Yahoo My Web News2.ru БобрДобр.ru Memori.ru rucity.com

Статьи по теме

  1. dmitry
    28 Июль 2009 в 12:34 | #1

    Установил на Debian Lenny. mk-audit у меня не оказалось. :(

  2. 28 Июль 2009 в 12:54 | #2

    @dmitry
    Это потому, что в репозитариях пакетов более древние версии. Пробуйте устанавливать от сюда: http://code.google.com/p/maatkit/

  3. 7 Март 2010 в 15:35 | #3

    @Den Golotyuk
    установил maatkit-5899, mk-audit там тоже отсутствует.
    Да и здесь http://www.maatkit.org/doc/ его тоже нет

  4. 7 Март 2010 в 17:40 | #5

    @NetSpider
    Да, разработчики действительно решили разделить эту утилиту на несколько отдельных, более логичных. Спасибо за информацию!

  1. 31 Июль 2009 в 09:53 | #1