Это команда pt-query-digestp, которую можно запустить в провайдере бесплатного хостинга OnWorks, используя одну из наших многочисленных бесплатных онлайн-рабочих станций, таких как Ubuntu Online, Fedora Online, онлайн-эмулятор Windows или онлайн-эмулятор MAC OS.
ПРОГРАММА:
ИМЯ
pt-query-digest - анализирует запросы MySQL из журналов, списка процессов и tcpdump.
СИНТАКСИС
Использование: pt-query-digest [ОПЦИИ] [ФАЙЛЫ] [DSN]
pt-query-digest анализирует запросы MySQL из медленных, общих и двоичных файлов журнала. Оно может
также анализируйте запросы из "SHOW PROCESSLIST" и данные протокола MySQL из tcpdump. От
по умолчанию запросы группируются по отпечатку пальца и сообщаются в порядке убывания времени запроса.
(т.е. сначала самые медленные запросы). Если «ФАЙЛЫ» не указаны, инструмент читает «STDIN». В
необязательный «DSN» используется для некоторых параметров, таких как «--since» и «--until».
Сообщите о самых медленных запросах из "slow.log":
pt-запрос-дайджест slow.log
Сообщите о самых медленных запросах из списка процессов на host1:
pt-query-digest --processlist h = host1
Захватите данные протокола MySQL с помощью tcppdump, а затем сообщите о самых медленных запросах:
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 порт 3306> mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt
Сохраните данные запроса из "slow.log" на host2 для последующего просмотра и анализа тенденций:
pt-query-digest --review h = host2 --no-report slow.log
РИСКИ
Percona Toolkit зрелый, проверенный в реальном мире и хорошо протестированный, но все базы данных
инструменты могут представлять опасность для системы и сервера базы данных. Перед использованием этого инструмента,
пожалуйста:
· Прочтите документацию к инструменту
· Просмотрите известные "ОШИБКИ" инструмента.
· Протестируйте инструмент на непроизводственном сервере
· Сделайте резервную копию вашего производственного сервера и проверьте резервные копии
ОПИСАНИЕ
pt-query-digest - это сложный, но простой в использовании инструмент для анализа запросов MySQL. Это
может анализировать запросы из медленных, общих и двоичных журналов MySQL. (Двоичные журналы сначала должны быть
преобразованы в текст, см. "--type"). Он также может использовать "SHOW PROCESSLIST" и протокол MySQL.
данные из tcpdump. По умолчанию инструмент сообщает, какие запросы самые медленные, и
поэтому наиболее важно оптимизировать. Более сложные и индивидуализированные отчеты могут быть
создается с помощью таких параметров, как «--group-by», «--filter» и «--embedded-attributes».
Анализ запросов - это лучшая практика, которую следует выполнять часто. Чтобы это было проще,
pt-query-digest имеет две функции: просмотр запроса ("--review") и история запросов.
("--история"). Когда используется опция «--review», все уникальные запросы сохраняются в
база данных. Когда инструмент снова запускается с "--review", запросы, помеченные как проверенные в
базы данных не печатаются в отчете. Это выделяет новые запросы, которые необходимо
рассмотрено. Когда используется параметр "--history", показатели запроса (время запроса, время блокировки,
и т.д.) для каждого уникального запроса сохраняются в базе данных. Каждый раз, когда инструмент запускается с
"--history", тем больше сохраняется исторических данных, которые можно использовать для трендов и анализа.
производительность запроса с течением времени.
ПРИЗНАКИ
pt-query-digest работает с событиями, которые представляют собой набор пар ключ-значение, называемых
атрибуты. Вы сразу узнаете большинство атрибутов: "Query_time",
«Lock_time» и так далее. Вы можете просто посмотреть на медленный журнал и увидеть их. Однако есть
некоторые, которых нет в журнале медленных, и журналы медленных могут фактически включать в себя разные виды
атрибутов (например, у вас может быть сервер с патчами Percona).
См. «ССЫЛКА НА АТРИБУТЫ» в конце этой документации для получения списка общих и
"--type" специфические атрибуты. Знакомство с этими атрибутами необходимо для
работа с «--filter», «--ignore-attributes» и другими параметрами, связанными с атрибутами.
Творчески используя "--filter", вы можете создавать новые атрибуты, производные от существующих
атрибуты. Например, чтобы создать атрибут "Row_ratio" для проверки
отношение "Rows_sent" к "Rows_examined", укажите фильтр, например:
--filter '($ event -> {Row_ratio} = $ event -> {Rows_sent} / ($ event -> {Rows_examined})) && 1'
Уловка «&& 1» необходима для создания допустимого однострочного синтаксиса, который всегда верен, даже если
присвоение происходит для оценки false. Новый атрибут автоматически появится в
выход:
# Соотношение строк 1.00 0.00 1 0.50 1 0.71 0.50
Атрибуты, созданные таким образом, можно указать для «--order-by» или любой другой опции, которая требует
атрибут.
ВЫВОД
По умолчанию «--output» представляет собой отчет об анализе запроса. Параметр "- [нет] отчета" управляет
напечатан ли этот отчет. Иногда вам может понадобиться проанализировать все запросы
но подавить отчет, например, при использовании «--review» или «--history».
Для каждого класса проанализированных запросов есть один абзац. Все "классы" запросов имеют
то же значение для атрибута «--group-by», который по умолчанию является «отпечатком пальца». (Видеть
«АТРИБУТЫ». Отпечаток пальца - это абстрактная версия текста запроса с литералами.
удалены, пробелы сжаты и т. д. Отчет отформатирован, поэтому его легко
вставлять в электронные письма без переноса, и все строки, не относящиеся к запросу, начинаются с комментария, поэтому вы
можете сохранить его в файл .sql и открыть в своем любимом текстовом редакторе с подсветкой синтаксиса.
В начале есть профиль времени отклика.
Описанный здесь вывод управляется параметром «--report-format». Эта опция позволяет вам
укажите, что печатать и в каком порядке. Вывод по умолчанию в порядке по умолчанию:
описанных здесь.
По умолчанию отчет начинается с параграфа, посвященного всему анализу.
информация очень похожа на то, что вы увидите для каждого класса запросов в журнале, но
у него нет информации, которую было бы слишком дорого хранить глобально для
анализ. Он также имеет некоторую статистику о самом выполнении кода, такую как процессор
и использование памяти, локальные дата и время запуска, а также список входных файлов
прочитал / проанализировал.
Далее следует профиль времени отклика по событиям. Это очень обобщенный
просмотр уникальных событий в подробном отчете по запросу, который следует ниже. Он содержит
следующие столбцы:
Столбец Значение
============ ======================================== ====================
Рейтинг Рейтинг запроса во всем анализируемом наборе запросов.
Идентификатор запроса Отпечаток запроса
Время отклика. Общее время отклика и процент от общего количества.
Вызовы Количество раз, когда этот запрос был выполнен
R / Call Среднее время ответа на выполнение
V / M Отношение дисперсии к среднему времени отклика.
Пункт дистиллированный запрос
Последняя строка, ранг которой отображается как MISC, содержит агрегированную статистику по запросам, которые
не были включены в отчет из-за таких опций, как «--limit» и «--outliers». За
подробности о соотношении дисперсии и среднего значения см.
http://en.wikipedia.org/wiki/Index_of_dispersion.
Затем распечатывается подробный отчет о запросе. Каждый запрос отображается в абзаце. Вот
sample, слегка переформатированный, чтобы perldoc не переносил строки в терминал. В
все последующие будут одним абзацем, но мы разделим его для комментариев.
# Запрос 2: 0.01 QPS, 0.02x конц, ID 0xFDEA8D2993C9CAF3 в байте 160665
Эта строка определяет порядковый номер запроса в порядке сортировки, заданном параметром
"--Сортировать по". Затем есть количество запросов в секунду и приблизительный параллелизм для
этот запрос (рассчитывается как функция промежутка времени и общего Query_time). Далее есть
идентификатор запроса. Этот идентификатор является шестнадцатеричной версией контрольной суммы запроса в базе данных, если вы
используя "--review". Вы можете выбрать детали рассмотренного запроса из базы данных с помощью
запрос типа «ВЫБРАТЬ .... ГДЕ контрольная сумма = 0xFDEA8D2993C9CAF3».
Если вы исследуете отчет и хотите распечатать каждый образец определенного
запрос, тогда следующий "--filter" может быть полезным:
pt-запрос-дайджест slow.log \
--нет-отчет \
--вывести медленный журнал \
--filter '$ event -> {fingerprint} \
&& make_checksum ($ event -> {fingerprint}) eq "FDEA8D2993C9CAF3" '
Обратите внимание, что вы должны удалить префикс «0x» из контрольной суммы.
Наконец, если вы хотите найти образец запроса в файле журнала, есть байт
смещение где можно посмотреть. (Это не всегда верно из-за некоторых аномалий в
медленный формат журнала, но обычно он правильный.) Позиция относится к худшему образцу, который
мы увидим больше об этом ниже.
Далее следует таблица показателей этого класса запросов.
#% всего мин. макс. средн.95% стандартное отклонение медиана
# Подсчет 0 2
# Время выполнения 13 1105 с 552 с 554 с 553 с 554 с 2 с 553 с
# Время блокировки 0 216us 99us 117us 108us 117us 12us 108us
# Отправленных строк 20 6.26 млн 3.13 млн 3.13 млн 3.13 млн 3.13 млн 12.73 3.13 млн
Количество строк экзамена 0 6.26 млн 3.13 млн 3.13 млн 3.13 млн 3.13 млн 12.73 3.13 млн
Первая строка - заголовки столбцов таблицы. Процент - это процент от
всего за весь прогон анализа, а итог - это фактическое значение указанного
метрическая. Например, в этом случае мы видим, что запрос выполнен 2 раза, что составляет
13% от общего количества запросов в файле. Столбцы min, max и avg являются самостоятельными.
пояснительный. Столбец 95% показывает 95-й процентиль; 95% значений меньше или
равным этому значению. Стандартное отклонение показывает, насколько плотно сгруппированы значения.
Стандартное отклонение и медиана рассчитываются от 95-го процентиля без учета
чрезвычайно большие значения.
Статистические данные стандартного отклонения, медианы и 95-го процентиля являются приблизительными. Точная статистика
требуют сохранения каждого увиденного значения, сортировки и выполнения некоторых вычислений. Это использует
много памяти. Чтобы этого не произошло, мы храним 1000 ведер, каждое из которых на 5% больше, чем одно.
раньше, от 000001 до очень большого числа. Когда мы видим значение, мы увеличиваем
ведро, в которое он падает. Таким образом, у нас есть фиксированная память для каждого класса запросов. В
недостатком является неточность, которая обычно составляет 5 процентов.
Далее у нас есть статистика по пользователям, базам данных и временному диапазону для запроса.
# Пользователи 1 user1
# Базы данных 2 db1(1) db2(1)
# Диапазон времени с 2008-11-26 04:55:18 по 2008-11-27 00:15:15
Пользователи и базы данных отображаются в виде количества различных значений, за которыми следуют значения.
Если есть только один, он показан отдельно; если их много, покажем каждый из самых
частые, а затем количество раз, когда оно появляется.
# Распределение времени запроса
# 1нас
# 10нас
# 100нас
# 1мс
# 10 мс #####
# 100 мс ####################
# 1с ##########
# 10s +
Время выполнения показывает логарифмическую диаграмму кластеризации времени. Каждый запрос входит в один
из «ведер» и подсчитывается. Ведра - это степень десяти. Первое ведро
все значения в «одном микросекундном диапазоне», то есть менее 10 мкс. Второй - это
«десятки микросекунд», то есть от 10 мкс до 100 мкс (но не включая); и так далее.
Атрибут диаграммы можно изменить, указав "--report-histogram", но он ограничен
временные атрибуты.
# Таблицы
# ПОКАЗАТЬ СТАТУС ТАБЛИЦЫ, КАК 'table1' \ G
# SHOW CREATE TABLE `table1` \ G
# ОБЪЯСНЯТЬ
ВЫБРАТЬ * ИЗ table1 \ G
Этот раздел удобен: если вы пытаетесь оптимизировать запросы, которые вы видите в
медленный журнал, вы, вероятно, захотите изучить структуру и размер таблицы. Это копирование и
готовые для вставки команды.
Наконец, мы видим образец запросов в этом классе запросов. Это не случайный
образец. Это запрос, который показал наихудшие результаты в соответствии с порядком сортировки, заданным
"--Сортировать по". Обычно перед ним отображается строка с комментарием "# EXPLAIN", поэтому вы
может скопировать и вставить запрос, чтобы изучить его план EXPLAIN. Но для запросов, не относящихся к SELECT, которые
невозможно сделать, поэтому инструмент пытается преобразовать запрос в примерно эквивалентный
SELECT запрос и добавляет его ниже.
Если вы хотите найти этот пример события в журнале, используйте указанное выше смещение и
что-то вроде следующего:
хвост -c + / путь / к / файлу | голова
См. Также «--report-format».
ЗАПРОС ОБЗОР
Запрос «--review» - это процесс сохранения всех проанализированных отпечатков запросов. Этот
имеет несколько преимуществ:
· Вы можете добавлять метаданные к классам запросов, например отмечать их для отслеживания, добавлять
примечания к запросам или пометив их идентификатором проблемы для вашей системы отслеживания проблем.
· Вы можете обращаться к сохраненным значениям при последующих запусках, чтобы знать,
раньше видел запрос. Это поможет вам сократить количество повторяющейся работы.
· Вы можете хранить исторические данные, такие как количество строк, время запроса и
все, что вы можете увидеть в отчете.
Чтобы использовать эту функцию, вы запускаете pt-query-digest с параметром «--review». Он будет хранить
отпечатки пальцев и другую информацию в указанную вами таблицу. В следующий раз, когда вы запустите это
с той же опцией он будет делать следующее:
· Он не покажет вам запросы, которые вы уже просмотрели. Запрос считается
уже просмотрено, если вы установили значение для столбца «проверено_по». (Если хотите
чтобы просмотреть запросы, которые вы уже рассмотрели, используйте параметр --report-all.)
· Запросы, которые вы просмотрели и которые не отображаются в выходных данных, вызовут пропуски в
номерная последовательность запроса в первой строке каждого абзаца. И ценность, которую вы
указанный для "--limit" по-прежнему будет соблюдаться. Итак, если вы просмотрели все запросы в
10 лучших, и вы просите 10 лучших, вы ничего не увидите на выходе.
· Если вы хотите увидеть уже просмотренные вами запросы, вы можете указать
"--отчет-все". Тогда вы увидите нормальный результат анализа, но вы также увидите
информация из обзорной таблицы, чуть ниже графика времени выполнения. Например,
# Проверить информацию
# комментарии: очень плохой подзапрос IN (), скоро исправим!
# first_seen: 2008-12-01 11:48:57
# jira_ticket: 1933
# последнее_просмотр: 2008-12-18 11:49:07
# приоритет: высокий
# Review_by: xaprb
# Review_on: 2008-12-18 15:03:11
Эти метаданные полезны, потому что, анализируя запросы, вы получаете свои комментарии.
интегрированы прямо в отчет.
ОТПЕЧАТКИ ПАЛЬЦЫ
Отпечаток запроса - это абстрактная форма запроса, которая позволяет сгруппировать
похожие запросы вместе. Абстрагирование запроса удаляет буквальные значения, нормализует
пробелы и так далее. Например, рассмотрим эти два запроса:
ВЫБЕРИТЕ имя, пароль ОТ пользователя WHERE id = '12823';
выберите имя, пароль от пользователя
где id = 5;
Оба этих запроса будут отпечатаны на
выберите имя, пароль от пользователя, где id =?
Как только отпечаток запроса известен, мы можем говорить о запросе, как если бы он
представляет все похожие запросы.
То, что делает "pt-query-digest" аналогично оператору GROUP BY в SQL. (Но обратите внимание, что
«несколько столбцов» не определяют группировку по нескольким столбцам; он определяет несколько отчетов!)
Если ваша командная строка выглядит так,
pt-запрос-дайджест \
--group-по отпечатку пальца \
--order-by Query_time: сумма \
- предел 10 \
медленный.лог
Соответствующий псевдо-SQL выглядит так:
ВЫБРАТЬ НАИЛУЧШЕЕ (запрос ПО Query_time), SUM (Query_time), ...
ОТ /path/to/slow.log
GROUP BY FINGERPRINT (запрос)
ORDER BY SUM (Query_time) DESC
ПРЕДЕЛ 10
Вы также можете использовать значение «distill», что является своего рода супер-отпечатком пальца. Видеть
"--group-by" для получения дополнительной информации.
Снятие отпечатков пальцев подходит для многих особых случаев, которые оказались необходимыми в
реальный мир. Например, список IN с 5 литералами на самом деле эквивалентен списку с 4
литералы, поэтому списки литералов сворачиваются в один. Если вы найдете что-то такое
отпечатки пальцев не сняты должным образом, отправьте отчет об ошибке с воспроизводимым тестовым примером.
Вот список преобразований во время снятия отпечатков пальцев, который может быть не исчерпывающим:
· Группируйте все запросы SELECT из mysqldump вместе, даже если они против разных
столы. То же самое относится ко всем запросам из контрольной суммы таблицы pt.
· Сократите многозначные инструкции INSERT до одного ЦЕННОСТИ() .
· Удалите комментарии.
· Абстрагируйте базы данных в операторах USE, чтобы все операторы USE были сгруппированы вместе.
· Заменить все литералы, например строки в кавычках. Для эффективности код, заменяющий
буквальные числа несколько неизбирательны и могут заменять некоторые вещи как числа
когда их на самом деле нет. Также заменяются шестнадцатеричные литералы. NULL рассматривается как
буквальный. Числа, встроенные в идентификаторы, также заменяются, поэтому таблицы с именами
аналогично будут отпечатаны одни и те же значения (например, users_2009 и users_2010
будет отпечаток идентично).
· Свернуть все пробелы в единое пространство.
· Весь запрос в нижнем регистре.
· Заменить все литералы внутри В() и ЦЕННОСТИ() списки с одним заполнителем,
независимо от мощности.
· Свернуть несколько одинаковых запросов UNION в один.
ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Этот инструмент принимает дополнительные аргументы командной строки. Обратитесь к «ОБЗОРУ» и использованию
информация для подробностей.
--иск-пас
Запрашивать пароль при подключении к MySQL.
- псевдонимы атрибутов
тип: массив; по умолчанию: db | Schema
Список атрибутов | псевдонимов и т. Д.
Некоторые атрибуты имеют несколько имен, например db и Schema. Если на мероприятии нет
Основной атрибут pt-query-digest ищет атрибут псевдонима. Если он найдет
псевдоним, он создает основной атрибут со значением атрибута псевдонима и удаляет
атрибут псевдонима.
Если событие имеет первичный атрибут, все атрибуты псевдонима удаляются.
Это помогает упростить атрибуты событий, чтобы, например, не было отчета
строки для db и Schema.
- предел значения атрибута
тип: int; по умолчанию: 4294967296
Предел разумности для значений атрибутов.
Этот параметр имеет дело с ошибками в функции медленного ведения журнала, которые вызывают большие значения для
атрибуты. Если значение атрибута больше этого, последнее значение для
вместо этого используется этот класс запроса.
--charset
краткая форма: -A; тип: строка
Набор символов по умолчанию. Если значение - utf8, устанавливает binmode Perl на STDOUT на utf8,
передает параметр mysql_enable_utf8 в DBD :: mysql и запускает SET NAMES UTF8 после
подключение к MySQL. Любое другое значение устанавливает binmode на STDOUT без слоя utf8,
и запускает SET NAMES после подключения к MySQL.
--config
тип: Массив
Прочтите этот список файлов конфигурации, разделенных запятыми; если указано, это должно быть первым
параметр в командной строке.
- [нет] продолжить при ошибке
по умолчанию: да
Продолжить синтаксический анализ, даже если произошла ошибка. Инструмент не будет длиться вечно: он
останавливается, как только какой-либо процесс вызывает 100 ошибок, и в этом случае, вероятно, есть ошибка в
инструмент или ввод недействителен.
- [нет] создать таблицу истории
по умолчанию: да
Создайте таблицу "--history", если она не существует.
Эта опция вызывает создание таблицы, указанной параметром "--history", со значением по умолчанию
структура, показанная в документации для "--history".
- [нет] create-review-table
по умолчанию: да
Создайте таблицу «--review», если она не существует.
Эта опция вызывает создание таблицы, указанной параметром "--review", со значением по умолчанию
структура указана в документации для "--review".
- демонизировать
Разверните на задний план и отсоедините от корпуса. Только операционные системы POSIX.
--база данных
краткая форма: -D; тип: строка
Подключитесь к этой базе данных.
--defaults-файл
краткая форма: -F; тип: строка
Только читать параметры mysql из данного файла. Вы должны указать абсолютный путь.
- встроенные атрибуты
тип: массив
Два шаблона регулярных выражений Perl для захвата псевдоатрибутов, встроенных в запросы.
Встроенные атрибуты могут быть специальными парами атрибут-значение, которые вы скрыли в
Комментарии. Первое регулярное выражение должно соответствовать всему набору атрибутов (если есть
несколько). Второе регулярное выражение должно соответствовать и захватывать пары атрибут-значение из
первое регулярное выражение.
Например, предположим, что ваш запрос выглядит следующим образом:
ВЫБРАТЬ * от пользователей - файл: /login.php, строка: 493;
Вы можете запустить pt-query-digest со следующей опцией:
pt-query-digest --embedded-attributes '-. *', '(\ w +): ([^ \,] +)'
Первое регулярное выражение захватывает весь комментарий:
"- файл: /login.php, строка: 493;"
Второй разбивает его на пары атрибут-значение и добавляет их к событию:
ЗНАЧЕНИЕ АТРИБУТА
========= ==========
файл /login.php
линия 493
ЗАМЕТКА: Все запятые в шаблонах регулярных выражений должны быть экранированы символом \, иначе шаблон
сломает.
- ожидаемый диапазон
тип: массив; по умолчанию: 5,10
Объясните, когда их больше или меньше, чем ожидалось.
Определяет количество элементов, которые, как ожидается, будут отображаться в отчете в виде «- [нет] отчета»,
как контролируется "--limit" и "--outliers". Если в
отчет, каждый объяснит, почему он был включен.
--объяснять
тип: DSN
Запустите EXPLAIN для образца запроса с этим DSN и распечатайте результаты.
Это работает, только когда "--group-by" включает отпечаток пальца. Это приводит к тому, что pt-query-digest
запустите EXPLAIN и включите вывод в отчет. В целях безопасности запросы, которые появляются
наличие подзапроса, который будет выполнять EXPLAIN, не будет EXPLAINed. Это обычно
запросы "производной таблицы" формы
выберите ... из (выберите ....) der;
Результаты EXPLAIN распечатываются в полном вертикальном формате в отчете о событиях, который
отображается в конце каждого отчета о событии в вертикальном стиле ("\ G"), как MySQL
печатает это.
--фильтр
тип: строка
Отбросить события, для которых этот код Perl не возвращает истину.
Этот параметр представляет собой строку кода Perl или файл, содержащий код Perl, который будет скомпилирован.
в подпрограмму с одним аргументом: $ event. Это хешрейф. Если данное значение
является читаемым файлом, тогда pt-query-digest читает весь файл и использует его содержимое
как код. Файл не должен содержать шебанг (#!/ usr / bin / perl) линия.
Если код возвращает истину, цепочка обратных вызовов продолжается; в противном случае это заканчивается. В
code - это последний оператор подпрограммы, кроме "return $ event". В
шаблон подпрограммы:
sub {$ event = shift; фильтр && return $ event; }
Фильтры, указанные в командной строке, заключены в круглые скобки, например "(фильтр
) ". Для сложных многострочных фильтров необходимо поместить код в файл, чтобы он
не заключаться в круглые скобки. В любом случае фильтр должен синтаксически создавать
действительный код, указанный в шаблоне. Например, ветвь if-else, заданная в команде
строка будет недействительной:
--filter 'if () {} else {}' # НЕПРАВИЛЬНО
Поскольку это указано в командной строке, ветвь if-else будет заключена внутрь
круглые скобки, что синтаксически неверно. Итак, чтобы выполнить что-то более сложное
для этого потребуется поместить код в файл, например filter.txt:
мой $ event_ok; если (...) {$ event_ok = 1; } еще {$ event_ok = 0; } $ event_ok
Затем укажите --filter filter.txt, чтобы прочитать код из filter.txt.
Если код фильтра не компилируется, pt-query-digest завершится с ошибкой. Если
код фильтра компилируется, ошибка может возникнуть во время выполнения, если код пытается выполнить
что-то не так (например, шаблон соответствует неопределенному значению). pt-query-digest не
обеспечьте любые меры безопасности, поэтому кодируйте внимательно!
Пример фильтра, который отбрасывает все, кроме операторов SELECT:
--filter '$ event -> {arg} = ~ m / ^ select / i'
Это скомпилировано в подпрограмму, подобную следующей:
sub {$ event = shift; ($ event -> {arg} = ~ m / ^ select / i) && return $ event; }
Код может иметь побочные эффекты (изменять $ event).
См. "СПРАВОЧНИК ПО АТРИБУТАМ" для получения списка общих и специфических атрибутов "--type".
Вот еще примеры кода фильтра:
Хост / IP совпадает с domain.com
--filter '($ event -> {host} || $ event -> {ip} || "") = ~ m / domain.com /'
Иногда MySQL регистрирует хост, на котором ожидается IP. Поэтому проверяем и то, и другое.
Пользователь совпадает с john
--filter '($ event -> {user} || "") = ~ m / john /'
Более одного предупреждения
--filter '($ event -> {Warning_count} || 0)> 1'
Запрос выполняет полное сканирование таблицы или полное соединение
--filter '(($ event -> {Full_scan} || "") eq "Да") || (($ event -> {Full_join} || "")
экв "Да") '
Запрос не был доставлен из кеша запросов
--filter '($ event -> {QC_Hit} || "") eq "Нет"'
Размер запроса составляет 1 МБ или больше
--filter '$ event -> {bytes}> = 1_048_576'
Поскольку "--filter" позволяет вам изменять $ event, вы можете использовать его для других целей, например
создавать новые атрибуты. См. Пример в разделе «АТРИБУТЫ».
--группа по
тип: Массив; по умолчанию: отпечаток пальца
По какому атрибуту событий группировать.
В общем, вы можете группировать запросы в классы на основе любого атрибута запроса,
например "пользователь" или "база данных", который по умолчанию покажет вам, какие пользователи и какие базы данных
получить максимум "Query_time". Атрибут по умолчанию "отпечаток пальца" группирует похожие,
абстрагированные запросы в классы; см. ниже и также см. «ОТПЕЧАТКИ ПАЛЬЦЕВ».
Отчет печатается для каждого значения "--group-by" (если не указано "--no-report").
Следовательно, "--group-by user, db" означает "отчет по запросам с тем же пользователем и отчет
по запросам с той же БД »; это не означает« отчет по запросам с одним и тем же пользователем
и db. "См. также" ВЫХОД ".
Каждое значение должно иметь соответствующее значение в той же позиции в "--order-by".
Однако добавление значений к "--group-by" автоматически добавит значения к "--order-by",
для вашего удобства.
Есть несколько магических значений, которые вызывают необходимость в дополнительном интеллектуальном анализе данных раньше.
группировка происходит:
отпечаток пальца
Это приводит к тому, что события записываются для преобразования запросов в каноническую форму,
который затем используется для группировки событий в класс. См. "ОТПЕЧАТКИ ПАЛЬЦЕВ" для
подробнее о снятии отпечатков пальцев.
Эта таблица
Это приводит к тому, что события проверяются на предмет того, что выглядит как таблицы, а затем
в совокупности с этим. Обратите внимание, что запрос, содержащий две или более таблиц, будет
считается столько раз, сколько есть столов; поэтому соединение двух таблиц будет считаться
Query_time для обеих таблиц.
дистиллирует
Это своего рода супер-отпечаток, который сворачивает запросы в предложение.
того, что они делают, например "INSERT SELECT table1 table2".
--Помогите
Показать справку и выйти.
- история
тип: DSN
Сохраните метрики для каждого класса запроса в данной таблице. pt-query-digest сохраняет запрос
метрики (время запроса, время блокировки и т. д.) в эту таблицу, чтобы вы могли видеть, как классы запросов
изменение с течением времени.
Таблица по умолчанию - «percona_schema.query_history». Укажите базу данных (D) и таблицу
(t) Параметры DSN для отмены значения по умолчанию. База данных и таблица автоматически
создается, если не указано "--no-create-history-table" (см.
"- [нет] создать-таблицу-истории").
pt-query-digest проверяет столбцы в таблице. Стол должен иметь как минимум
следующие столбцы:
СОЗДАТЬ ТАБЛИЦУ query_review_history (
контрольная сумма BIGINT UNSIGNED NOT NULL,
образец TEXT NOT NULL
);
Любые столбцы, не упомянутые выше, проверяются на предмет соответствия определенному наименованию.
соглашение. Столбец является особенным, если имя заканчивается знаком подчеркивания, за которым следует любое
из этих значений:
pct | avg | cnt | sum | min | max | pct_95 | stddev | median | rank
Если столбец заканчивается одним из этих значений, то префикс интерпретируется как
атрибут события для хранения в этом столбце, а суффикс интерпретируется как метрика
для хранения. Например, столбец с именем «Query_time_min» будет использоваться для хранения
минимум «Query_time» для класса событий.
В таблице также должен быть первичный ключ, но это зависит от вас, в зависимости от того, как вы
хотите сохранить исторические данные. Мы предлагаем добавить столбцы ts_min и ts_max и
делая их частью первичного ключа вместе с контрольной суммой. Но вы также можете просто
добавьте столбец ts_min и сделайте его типом DATE, чтобы вы получали одну строку для каждого класса запросов
в сутки.
Следующее определение таблицы используется для "- [no] create-history-table":
СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ query_history (
контрольная сумма BIGINT UNSIGNED NOT NULL,
образец TEXT NOT NULL,
ts_min ДАТАВРЕМЯ,
ts_max ДАТАВРЕМЯ,
ts_cnt с плавающей запятой,
Query_time_sum FLOAT,
Query_time_min FLOAT,
Query_time_max FLOAT,
Query_time_pct_95 FLOAT,
Query_time_stddev FLOAT,
Query_time_median FLOAT,
Lock_time_sum FLOAT,
Lock_time_min FLOAT,
Lock_time_max FLOAT,
Lock_time_pct_95 FLOAT,
Lock_time_stddev FLOAT,
Lock_time_median FLOAT,
Rows_sent_sum FLOAT,
Rows_sent_min FLOAT,
Rows_sent_max FLOAT,
Rows_sent_pct_95 С ПЛАВАНИЕМ,
Rows_sent_stddev FLOAT,
Rows_sent_median FLOAT,
Rows_examined_sum FLOAT,
Rows_examined_min FLOAT,
Rows_examined_max FLOAT,
Rows_examined_pct_95 FLOAT,
Rows_examined_stddev FLOAT,
Rows_examined_median FLOAT,
- Расширенные атрибуты замедления Percona
-- http://www.percona.com/docs/wiki/patches: slow_extended
Rows_affected_sum FLOAT,
Rows_affected_min FLOAT,
Rows_affected_max FLOAT,
Rows_affected_pct_95 FLOAT,
Rows_affected_stddev FLOAT,
Rows_affected_median FLOAT,
Rows_read_sum FLOAT,
Rows_read_min FLOAT,
Rows_read_max FLOAT,
Rows_read_pct_95 с плавающей запятой,
Rows_read_stddev FLOAT,
Rows_read_median FLOAT,
Merge_passes_sum FLOAT,
Merge_passes_min FLOAT,
Merge_passes_max FLOAT,
Merge_passes_pct_95 FLOAT,
Merge_passes_stddev FLOAT,
Merge_passes_median FLOAT,
InnoDB_IO_r_ops_min с плавающей запятой,
InnoDB_IO_r_ops_max с плавающей запятой,
InnoDB_IO_r_ops_pct_95 с плавающей запятой,
InnoDB_IO_r_ops_stddev с плавающей запятой,
InnoDB_IO_r_ops_median FLOAT,
InnoDB_IO_r_bytes_min с плавающей запятой,
InnoDB_IO_r_bytes_max с плавающей запятой,
InnoDB_IO_r_bytes_pct_95 с плавающей запятой,
InnoDB_IO_r_bytes_stddev с плавающей запятой,
InnoDB_IO_r_bytes_median FLOAT,
InnoDB_IO_r_wait_min FLOAT,
InnoDB_IO_r_wait_max с плавающей запятой,
InnoDB_IO_r_wait_pct_95 с плавающей запятой,
InnoDB_IO_r_wait_stddev с плавающей запятой,
InnoDB_IO_r_wait_median FLOAT,
InnoDB_rec_lock_wait_min FLOAT,
InnoDB_rec_lock_wait_max FLOAT,
InnoDB_rec_lock_wait_pct_95 с плавающей запятой,
InnoDB_rec_lock_wait_stddev с плавающей запятой,
InnoDB_rec_lock_wait_median FLOAT,
InnoDB_queue_wait_min FLOAT,
InnoDB_queue_wait_max FLOAT,
InnoDB_queue_wait_pct_95 с плавающей запятой,
InnoDB_queue_wait_stddev с плавающей запятой,
InnoDB_queue_wait_median FLOAT,
InnoDB_pages_distinct_min FLOAT,
InnoDB_pages_distinct_max с плавающей запятой,
InnoDB_pages_distinct_pct_95 с плавающей запятой,
InnoDB_pages_distinct_stddev с плавающей запятой,
InnoDB_pages_distinct_median FLOAT,
- Логические (Да / Нет) атрибуты. Требуются только cnt и sum
-- для этих. cnt - сколько раз был записан атрибут,
- а сумма - это сколько раз значение было Да. Так
- sum / cnt * 100 равно проценту записанных раз,
- значение было Да.
QC_Hit_cnt FLOAT,
QC_Hit_sum FLOAT,
Full_scan_cnt FLOAT,
Полная_scan_sum FLOAT,
Full_join_cnt FLOAT,
Full_join_sum FLOAT,
Tmp_table_cnt FLOAT,
Tmp_table_sum FLOAT,
Tmp_table_on_disk_cnt FLOAT,
Tmp_table_on_disk_sum FLOAT,
Filesort_cnt FLOAT,
Filesort_sum FLOAT,
Filesort_on_disk_cnt FLOAT,
Filesort_on_disk_sum FLOAT,
ПЕРВИЧНЫЙ КЛЮЧ (контрольная сумма, ts_min, ts_max)
);
Обратите внимание, что мы храним счетчик (cnt) только для атрибута ts; это будет лишним
сохраните это для других атрибутов.
--хозяин
краткая форма: -h; тип: строка
Подключитесь к хосту.
--игнорировать-атрибуты
тип: массив; по умолчанию: arg, cmd, insert_id, ip, port, Thread_id, timestamp, exptime,
флаги, ключ, res, val, server_id, смещение, end_log_pos, Xid
Не объединяйте эти атрибуты. Некоторые атрибуты являются не метриками запроса, а метаданными
которые не нужно (или не могут) агрегировать.
--inherit-атрибуты
тип: массив; по умолчанию: db, ts
Если отсутствует, унаследуйте эти атрибуты от последнего события, в котором они были.
Эта опция устанавливает, какие атрибуты наследуются или переносятся на события, которые
их нет. Например, если одно событие имеет атрибут db, равный «foo», но
Следующее событие не имеет атрибута db, тогда оно наследует «foo» в качестве атрибута db.
--интервал
тип: плавающий; по умолчанию: .1
Как часто опрашивать список процессов в секундах.
--итерации
тип: int; по умолчанию: 1
Сколько раз повторять цикл сбора и представления отчетов. Если 0, итерация до
бесконечность. Каждая итерация выполняется в течение времени «--run-time». Итерация
обычно определяется количеством времени, и отчет печатается, когда это количество
время идет. С "--run-time-mode" "interval" интервал вместо этого определяется
время интервала, которое вы указываете с помощью «--run-time». См. "--Run-time" и
"--run-time-mode" для получения дополнительной информации.
- предел
тип: Массив; по умолчанию: 95%: 20
Ограничьте вывод заданным процентом или количеством.
Если аргумент является целым числом, сообщать только о первых N худших запросах. Если аргумент
представляет собой целое число, за которым следует знак «%», указывает процент наихудших запросов.
Если после процента следует двоеточие и другое целое число, укажите верхний
процент или число, указанное этим целым числом, в зависимости от того, что наступит раньше.
Значение на самом деле представляет собой массив значений, разделенных запятыми, по одному для каждого элемента в
"--группа по". Если вы не укажете значение для любого из этих элементов, по умолчанию будет
верхние 95%.
См. Также «--выброс».
--бревно
тип: строка
Распечатать весь вывод в этот файл при демонтировании.
--Сортировать по
тип: Массив; по умолчанию: Query_time: sum
Сортируйте события по этому атрибуту и агрегатной функции.
Это список выражений, разделенных запятыми, по одному для каждого "--group-by"
атрибут. По умолчанию "Query_time: sum" используется для атрибутов "--group-by" без
явно заданные атрибуты "--order-by" (то есть, если вы укажете больше "--group-by"
атрибутов, чем соответствующие атрибуты "--order-by"). Синтаксис:
«атрибут: совокупность». Допустимые атрибуты см. В разделе «АТРИБУТЫ». Допустимые агрегаты:
Совокупное значение
========= =============================
сумма Сумма / итоговое значение атрибута
min Минимальное значение атрибута
max Максимальное значение атрибута
cnt Частота / количество запросов
Например, значение по умолчанию «Query_time: sum» означает, что запросы в анализе запроса
отчет будет упорядочен (отсортирован) по общему времени выполнения запроса («Время выполнения»).
«Query_time: max» упорядочивает запросы по максимальному времени выполнения, поэтому
запрос с самым большим Query_time будет в списке первым. "cnt" больше относится к
частота запроса в целом, как часто он появляется; «Граф» - это его
соответствующая строка в отчете об анализе запроса. Таким образом, любой атрибут и "cnt" должны
дают тот же отчет, в котором запросы отсортированы по количеству их появлений.
При анализе общих журналов ("--type" "genlog") значение по умолчанию "--order-by" становится
«Время_запроса: cnt». Общие журналы не сообщают время запросов, поэтому только агрегат cnt
имеет смысл, потому что время всех запросов равно нулю.
Если вы укажете атрибут, которого нет в событиях, тогда pt-query-digest
возвращается к стандартному "Query_time: sum" и печатает уведомление в начале
отчет для каждого класса запроса. Вы можете создавать атрибуты с помощью "--filter" и упорядочивать по
их; см. «АТРИБУТЫ» для примера.
- выбросы
тип: массив; по умолчанию: Query_time: 1:10
Сообщайте о выбросах по атрибуту: процентиль: количество.
Синтаксис этой опции представляет собой список разделенных запятыми строк строк, разделенных двоеточиями. В
Первое поле - это атрибут, по которому определяется выброс. Второй - это число
это сравнивается с 95-м процентилем атрибута. Третий не является обязательным и является
по сравнению с агрегатом cnt атрибута. Запросы, соответствующие этой спецификации:
добавляется в отчет независимо от каких-либо ограничений, указанных вами в "--limit".
Например, чтобы сообщить о запросах, 95-й процентиль которых Query_time составляет не менее 60 секунд.
и которые видны не менее 5 раз, используйте следующий аргумент:
--outliers Query_time: 60: 5
Вы можете указать параметр --outliers для каждого значения в «--group-by».
--выход
тип: строка; по умолчанию: отчет
Как отформатировать и распечатать результаты анализа запроса. Допустимые значения:
ФОРМАТ ЗНАЧЕНИЯ
======= ===============================
report Стандартный отчет об анализе запросов
slowlog MySQL медленный журнал
json JSON, по массиву для каждого класса запроса
json-anon JSON без примеров запросов
Весь вывод «отчета» можно отключить, указав «--no-report» (см.
«- [нет] отчета»), а его разделы можно отключить или изменить порядок, указав
"--report-format".
Вывод "json" был представлен в 2.2.1 и все еще находится в разработке, поэтому данные
структура может измениться в будущих версиях.
--пароль
краткая форма: -p; тип: строка
Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"
--пид
тип: строка
Создайте данный файл PID. Инструмент не запустится, если файл PID уже существует и
PID, который он содержит, отличается от текущего PID. Однако, если файл PID
существует и содержащийся в нем PID больше не работает, инструмент перезапишет PID
файл с текущим PID. PID-файл автоматически удаляется при выходе из инструмента.
--порт
краткая форма: -P; тип: int
Номер порта для подключения.
--processlist
тип: DSN
Опрос списка процессов этого DSN на предмет запросов с интервалом ожидания между ними.
Если соединение не удается, pt-query-digest пытается повторно открыть его раз в секунду.
--прогресс
тип: массив; по умолчанию: время, 30
Распечатать отчеты о проделанной работе в STDERR. Значение представляет собой список, разделенный запятыми, состоящий из двух частей.
Первая часть может быть процентом, временем или итерациями; вторая часть определяет, как
часто обновление должно быть напечатано в процентах, секундах или количестве итераций.
--read-тайм-аут
тип: время; по умолчанию: 0
Подождите так долго, пока не появится событие на входе; 0 ждать вечно.
Эта опция устанавливает максимальное время ожидания события от входа. Это относится к
все типы ввода, кроме "--processlist". Если событие не получено после
заданное время, скрипт прекращает чтение ввода и распечатывает свои отчеты. Если
"--iterations" равно 0 или больше 1, начнется следующая итерация, иначе скрипт
выйдет.
Для этой опции требуется модуль Perl POSIX.
- [нет] отчета
по умолчанию: да
Распечатайте отчеты анализа запросов для каждого атрибута "--group-by". Это стандарт
функция медленного анализа журнала. См. «ВЫХОД» для описания того, что это делает.
и как выглядят результаты.
Если вам не нужен отчет (например, при использовании "--review" или "--history"), это
лучше всего указать "--no-report", потому что это позволяет инструменту пропустить некоторые дорогостоящие
операций.
--отчет-все
Сообщайте обо всех запросах, даже о тех, которые были рассмотрены. Это влияет только на "отчет"
«--output» при использовании «--review». В противном случае все запросы всегда печатаются.
- формат отчета
тип: Массив; по умолчанию: rusage, дата, имя хоста, файлы, заголовок, профиль, query_report, подготовлено
Распечатайте эти разделы отчета об анализе запроса.
РАЗДЕЛ ПЕЧАТИ
============ ======================================== ================
rusage о времени процессора и использовании памяти, о которых сообщает ps
date Текущая местная дата и время
hostname Имя хоста компьютера, на котором был запущен pt-query-digest
файлы Входные файлы прочитаны / проанализированы
заголовок Сводка всего анализа
profile Компактная таблица запросов для обзора отчета
query_report Подробная информация о каждом уникальном запросе
подготовлено Подготовленные отчеты
Разделы печатаются в указанном порядке. Заголовок, дата, файлы и заголовок
разделы группируются вместе, если указаны вместе; другие разделы разделены
пустые строки.
См. «ВЫХОД» для получения дополнительной информации о различных частях отчета по запросу.
- отчет-гистограмма
тип: строка; по умолчанию: Query_time
Постройте диаграмму распределения значений этого атрибута.
Диаграмма распределения ограничена атрибутами, основанными на времени, поэтому построение диаграмм
Например, "Rows_examined" создаст бесполезную диаграмму. Графики выглядят так:
# Распределение времени запроса
# 1нас
# 10нас
# 100нас
# 1мс
# 10 мс ##########################
# 100 мс ######################################################################### ########
# 1с ########
# 10s +
См. «ВЫХОД» для получения дополнительной информации.
--продолжить
тип: строка
Если указано, инструмент записывает последнее смещение файла, если оно есть, в указанное
имя файла. При повторном запуске с тем же значением для этого параметра инструмент считывает последний
смещение файла от файла, ищет эту позицию в журнале и возобновляет синтаксический анализ
события с этого момента.
--рассмотрение
тип: DSN
Сохраните классы запросов для последующего просмотра и не сообщайте об уже проверенных классах.
Таблица по умолчанию - percona_schema.query_review. Укажите базу данных (D) и таблицу
(t) Параметры DSN для отмены значения по умолчанию. База данных и таблица автоматически
создается, если не указано "--no-create-review-table" (см.
"- [no] create-review-table").
Если таблица была создана вручную, в ней должны быть как минимум следующие столбцы. Ты
можете добавить больше столбцов для ваших особых целей, но они не будут использоваться pt-
запрос-дайджест.
СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ query_review (
контрольная сумма BIGINT UNSIGNED NOT NULL PRIMARY KEY,
ТЕКСТ отпечатка пальца НЕ ПУСТОЙ,
образец TEXT NOT NULL,
first_seen ДАТАВРЕМЯ,
last_seen ДАТАВРЕМЯ,
рассмотрено ВАРЧАР(20)
Review_on DATETIME,
комментарии ТЕКСТ
)
Столбцы:
КОЛОНКА ЗНАЧЕНИЕ
=========== ========================================= =============
контрольная сумма 64-битная контрольная сумма отпечатка запроса.
отпечаток пальца Абстрагированная версия запроса; его первичный ключ
sample Текст запроса образца класса запросов
first_seen Наименьшая временная метка этого класса запросов.
last_seen Самая большая отметка времени для этого класса запросов.
Review_by Первоначально NULL; если установлено, после этого запрос пропускается
Review_on Первоначально NULL; не имеет особого значения
комментарии Изначально NULL; не имеет особого значения
Обратите внимание, что столбец «отпечаток пальца» является истинным первичным ключом для класса запросов.
«Контрольная сумма» - это просто криптографический хэш этого значения, который обеспечивает более короткий
значение, которое, скорее всего, также будет уникальным.
После синтаксического анализа и агрегирования событий ваша таблица должна содержать по строке для каждого
отпечаток пальца. Эта опция зависит от «--group-by fingerprint» (по умолчанию).
Иначе не пойдет.
- время выполнения
тип: время
Сколько времени нужно запускать для каждой "- итерации". По умолчанию запускается вечно (вы можете
прерывание с помощью CTRL-C). Поскольку "--iterations" по умолчанию равно 1, если вы укажете только
"--run-time", pt-query-digest выполняется в течение этого времени, а затем завершается. Два
параметры указываются вместе для выполнения циклов сбора и представления отчетов. Например,
указав "--iterations" 4 "--run-time" "15m" с непрерывным вводом (например, STDIN или
"--processlist") вызовет выполнение pt-query-digest в течение 1 часа (15 минут x 4),
отчет четыре раза, один раз в каждые 15 минут.
--run-time-режим
тип: строка; по умолчанию: часы
Установите, над чем работает значение "--run-time". Ниже приведены возможные значения для
этот вариант:
Часы
"--run-time" указывает количество реального времени, в течение которого инструмент должен
запускать для каждой «- итерации».
мероприятие
«--run-time» указывает количество времени журнала. Время записи определяется
отметки времени в журнале. Запоминается первая увиденная временная метка, и каждая временная метка
после этого он сравнивается с первым, чтобы определить, сколько времени прошло.
Например, если первая отображаемая метка времени - «12:00:00», а следующая - «12:01:30»,
это 1 минута и 30 секунд времени журнала. Инструмент будет читать события, пока
время журнала больше или равно указанному значению "--run-time".
Поскольку временные метки в журналах не всегда печатаются или не всегда печатаются часто,
этот режим различается по точности.
интервал
"--run-time" задает границы интервала времени журнала, в который записываются события
разделены и создаются отчеты. Этот режим отличается от других, потому что
он не указывает, как долго бежать. Значение "--run-time" должно быть интервалом.
который равномерно делится на минуты, часы или дни. Например, «5м» делит равномерно
в часы (60/5 = 12, то есть 12 5-минутных интервалов в час), но "7 м" не
(60/7 = 8.6).
Указание "--run-time-mode interval --run-time 30m --iterations 0" аналогично
с указанием "--run-time-mode clock --run-time 30m --iterations 0". В последнем
случае, pt-query-digest будет работать вечно, создавая отчеты каждые 30 минут, но
это эффективно работает только с непрерывными входами, такими как STDIN и
список процессов. Для фиксированных входных данных, таких как файлы журнала, предыдущий пример производит
несколько отчетов, разделив журнал на 30-минутные интервалы на основе
отметки времени.
Интервалы рассчитываются исходя из нулевой секунды / минуты / часа, в которой установлена временная метка.
происходит, а не в то время, которое оно указывает. Например, с 30-минутным
интервалы и отметка времени «12:10:30», интервал «12:10:30» в
«12:40:30», это «12:00:00» до «12:29:59». Или, с интервалом в 1 час, это
«12:00:00» - «12:59:59». Когда новая временная метка превышает интервал, отчет
печатается, и следующий интервал пересчитывается на основе новой отметки времени.
Поскольку "--iterations" по умолчанию равен 1, вы, вероятно, захотите указать новое значение.
иначе pt-query-digest будет получать и сообщать только о первом интервале из журнала
поскольку 1 интервал = 1 итерация. Если вы хотите получать и сообщать о каждом интервале в
log укажите "--iterations" 0.
--образец
тип: int
Отфильтровать все, кроме первых N вхождений каждого запроса. Запросы фильтруются по
первое значение в "--group-by", поэтому по умолчанию фильтрация выполняется по отпечатку запроса.
Например, «--sample 2» разрешит два образца запроса для каждого отпечатка пальца. Полезный
в сочетании с «--output slowlog» для печати запросов. Вы, вероятно, захотите установить
"--no-report", чтобы избежать накладных расходов на агрегирование и создание отчетов, если вы просто используете
это для распечатки образцов запросов. Полный пример:
pt-query-digest --sample 2 --no-report --output медленный журнал медленный.log
--set-варс
тип: Массив
Задайте переменные MySQL в этом списке пар «переменная = значение», разделенном запятыми.
По умолчанию набор инструментов:
wait_timeout = 10000
Переменные, указанные в командной строке, отменяют эти значения по умолчанию. Например,
указание "--set-vars wait_timeout = 500" отменяет значение по умолчанию 10000.
Инструмент выводит предупреждение и продолжает, если переменная не может быть установлена.
--показать все
тип: Хеш
Показать все значения для этих атрибутов.
По умолчанию pt-query-digest показывает только то количество значений атрибута, которое подходит для
одна линия. Эта опция позволяет вам указать атрибуты, для которых все значения будут
отображаться (ширина линии игнорируется). Это работает только для атрибутов со строковыми значениями
например, user, host, db и т. д. Можно указать несколько атрибутов через запятую.
--поскольку
тип: строка
Разбирать только запросы новее, чем это значение (анализировать запросы, начиная с этой даты).
Эта опция позволяет игнорировать запросы старше определенного значения и анализировать только
те запросы, которые являются более поздними, чем значение. Значение может быть нескольких типов:
* Простое значение времени N с необязательным суффиксом: N [shmd], где
s = секунды, h = часы, m = минуты, d = дни (по умолчанию s, если нет суффикса
данный); это как сказать "с N [shmd] назад"
* Полная дата с дополнительными часами: минутами: секундами:
ГГГГ-ММ-ДД [ЧЧ: ММ :: СС]
* Краткая дата в стиле MySQL:
ГГММДД [ЧЧ: ММ: СС]
* В любое время выражение, оцениваемое MySQL:
CURRENT_DATE - ИНТЕРВАЛ 7 ДНЕЙ
Если вы даете выражение времени MySQL, и вы также не указали DSN для
"--explain", "--processlist" или "--review", тогда вы должны указать DSN в
командная строка, чтобы pt-query-digest мог подключиться к MySQL для оценки выражения.
Выражение времени MySQL заключено в запрос типа "SELECT
UNIX_TIMESTAMP ( ) ", поэтому убедитесь, что выражение действительно внутри этого
запрос. Например, не используйте UNIX_TIMESTAMP () потому что
UNIX_TIMESTAMP (UNIX_TIMESTAMP ()) возвращает 0.
Предполагается, что события расположены в хронологическом порядке: более старые события в начале журнала.
и более новые события в конце журнала. "--since" является строгим: игнорирует все запросы.
пока не будет найден достаточно новый. Следовательно, если события запроса не
постоянно имеют временные метки, некоторые из них могут быть проигнорированы, что на самом деле достаточно ново.
См. Также «--until».
--разъем
краткие формы; тип: строка
Файл сокета, используемый для подключения.
--Лента новостей
Показать хронологию событий.
Эта опция заставляет pt-query-digest печатать другой вид отчета: временную шкалу
Мероприятия. Каждый запрос по-прежнему группируется и объединяется в классы в соответствии с
"--group-by", но затем они печатаются в хронологическом порядке. Отчет о временной шкале
печатает метку времени, интервал, количество и значение каждого класса.
Если вам нужен только отчет о временной шкале, укажите "--no-report", чтобы подавить
отчет об анализе запросов по умолчанию. В противном случае отчет временной шкалы будет напечатан в
end перед профилем времени ответа (см. «--report-format» и «OUTPUT»).
Например, это:
pt-query-digest / путь / к / журналу --group-by distill --timeline
напечатает что-то вроде:
# ######################################################################### #######
# отчет о дистилляции
# ######################################################################### #######
# 2009-07-25 11:19:27 1 + 00: 00: 01 2 ВЫБРАТЬ foo
# 2009-07-27 11:19:30 00:01 2 Панель выбора
# 2009-07-27 11:30:00 1 + 06: 30: 00 2 ВЫБРАТЬ foo
--тип
тип: Массив; по умолчанию: slowlog
Тип входных данных для синтаксического анализа. Разрешенные типы:
бинлог
Анализируйте двоичный файл журнала, который сначала был преобразован в текст с помощью mysqlbinlog.
Например:
mysqlbinlog mysql-bin.000441> mysql-bin.000441.txt
pt-query-digest --type binlog mysql-bin.000441.txt
генлог
Анализируйте общий файл журнала MySQL. В общих журналах не хватает многих "АТРИБУТОВ", особенно
«Время_запроса». По умолчанию "--order-by" для общих журналов меняется на
«Время_запроса: cnt».
медленный
Анализируйте файл журнала в любом варианте формата медленного журнала MySQL.
ТСРйитр
Проверять сетевые пакеты и декодировать клиентский протокол MySQL, извлекая запросы
и отзывы от него.
pt-query-digest на самом деле не наблюдает за сетью (т. е. НЕ "обнюхивает"
пакетов "). Вместо этого он просто анализирует вывод tcpdump. Вы несете ответственность
для генерации этого вывода; pt-query-digest не делает этого за вас. Затем вы отправляете
это в pt-query-digest, как и любой файл журнала: как файлы в командной строке или
в STDIN.
Синтаксический анализатор ожидает, что входные данные будут отформатированы со следующими параметрами: "-x -n -q
-tttt ". Например, если вы хотите захватить вывод с локального компьютера, вы
может сделать что-то вроде следующего (на FreeBSD порт должен быть последним):
tcpdump -s 65535 -x -nn -q -tttt -i any -c 1000 порт 3306 \
> mysql.tcp.txt
pt-query-digest --type tcpdump mysql.tcp.txt
Остальные параметры tcpdump, такие как -s, -c и -i, зависят от вас. Просто сделай
убедитесь, что результат выглядит так (в первой строке есть разрыв строки, чтобы избежать
проблемы со страницей руководства):
2009-04-12 09:50:16.804849 IP 127.0.0.1.42167
> 127.0.0.1.3306: TCP 37
0x0000: 4508 0059 6eb2 4000 4006 cde2 7f00 0001
0x0010: ....
Помните, что tcpdump имеет удобную опцию -c для остановки после захвата некоторого количества
пакеты! Это очень полезно для тестирования вашей команды tcpdump. Обратите внимание, что tcpdump
не может захватывать трафик на сокете Unix. Читать
<http://bugs.mysql.com/bug.php? id = 31577> если вас это смущает.
Девананда Ван Дер Вин объяснил в блоге о производительности MySQL, как захватывать
трафик без потери пакетов на загруженных серверах. Отброшенные пакеты вызывают pt-query-
дайджест, чтобы пропустить ответ на запрос, а затем просмотреть ответ на более поздний запрос
и присвоить запросу неправильное время выполнения. Вы можете изменить фильтр на
что-то вроде следующего, чтобы помочь захватить подмножество запросов. (Видеть
<http://www.mysqlperformanceblog.com/? p = 6092> для подробностей.)
tcpdump -i любой -s 65535 -x -n -q -tttt \
"порт 3306 и tcp [1] & 7 == 2 и tcp [3] & 7 == 2"
Все серверы MySQL, работающие на порту 3306, автоматически обнаруживаются в tcpdump.
вывод. Следовательно, если tcpdump out содержит пакеты с нескольких серверов на
порт 3306 (например, 10.0.0.1:3306, 10.0.0.2:3306 и т. д.), все пакеты / запросы
со всех этих серверов будут проанализированы вместе, как если бы они были одним сервером.
Если вы анализируете трафик для сервера MySQL, который не работает на порту 3306,
см. "--watch-server".
Также обратите внимание, что pt-query-digest может не сообщать базе данных о запросах, когда
парсинг вывода tcpdump. База данных обнаруживается только при первоначальном подключении
события для нового клиента или когда выполняется. Если вывод tcpdump
не содержит ни одного из них, то pt-query-digest не может обнаружить базу данных.
Поддерживаются подготовленные операторы на стороне сервера. SSL-шифрованный трафик не может быть
осмотрены и расшифрованы.
Rawlog
Необработанные журналы - это не журналы MySQL, а простые текстовые файлы с одним оператором SQL в строке,
как:
ВЫБРАТЬ c ИЗ t ГДЕ id = 1
/* Привет мир! * / ВЫБРАТЬ * ИЗ t2 ПРЕДЕЛ 1
ВСТАВИТЬ В t (a, b) VALUES ('foo', 'bar')
ВСТАВИТЬ В t ВЫБРАТЬ * ОТ обезьян
Поскольку необработанные журналы не имеют никаких метрик, многие параметры и функции pt-query-
дайджест с ними не работает.
Один из вариантов использования необработанных журналов - это ранжирование запросов по счетчику, когда единственная информация
Доступен список запросов, например, из опроса "SHOW PROCESSLIST".
--до
тип: строка
Разбирать только запросы старше этого значения (анализировать запросы до этой даты).
Эта опция позволяет игнорировать запросы, более новые, чем определенное значение, и анализировать только
те запросы, которые старше значения. Значение может быть одного и того же типа.
указан для "--since".
В отличие от «--since», «--until» не является строгим: все запросы анализируются до тех пор, пока не будет получен
отметка времени, которая больше или равна "--until". Тогда все последующие запросы
игнорируются.
--Пользователь
краткая форма: -u; тип: строка
Пользователь для входа, если не текущий пользователь.
- вариации
тип: Массив
Сообщите количество вариаций значений этих атрибутов.
Варианты показывают, сколько различных значений атрибута было в классе. Обычно
значение для этой опции - "arg", которое показывает, сколько различных запросов было в
класс. Это может быть полезно для определения кэшируемости запроса.
Различные значения определяются контрольными суммами CRC32 значений атрибутов. Эти
контрольные суммы сообщаются в отчете запроса для атрибутов, указанных в этой опции,
как:
# arg crc 109 (1/25%), 144 (1/25%) ... еще 2
В этом классе было 4 разных запроса. Контрольные суммы первых двух
показаны варианты, и каждое из них произошло один раз (или в 25% случаев).
Подсчет различных вариаций является приблизительным, потому что только 1,000 вариаций
сохранены. Мод (%) 1000 полной контрольной суммы CRC32 сохраняется, поэтому некоторые отдельные
контрольные суммы считаются равными.
--версия
Показать версию и выйти.
- [нет] проверки версии
по умолчанию: да
Проверьте наличие последней версии Percona Toolkit, MySQL и других программ.
Это стандартная функция "автоматической проверки обновлений" с двумя дополнительными
Особенности. Сначала инструмент проверяет версию других программ в локальной системе в
дополнение к собственной версии. Например, он проверяет версию каждого сервера MySQL.
он подключается к Perl и модулю Perl DBD :: mysql. Во-вторых, он проверяет и предупреждает
о версиях с известными проблемами. Например, в MySQL 5.5.25 была критическая ошибка и
был переиздан как 5.5.25a.
Все обновления или известные проблемы распечатываются в STDOUT перед обычным выводом инструмента.
Эта функция никогда не должна мешать нормальной работе инструмента.
Для получения дополнительной информации посетите .
--watch-сервер
тип: строка
Эта опция сообщает pt-query-digest, какой IP-адрес и порт сервера (например,
"10.0.0.1:3306") для просмотра при разборе tcpdump (для "--type" tcpdump); все остальные
серверы игнорируются. Если вы не укажете его, pt-query-digest наблюдает за всеми серверами по
ищу любой IP-адрес, используя порт 3306 или "mysql". Если вы смотрите сервер
с нестандартным портом это не сработает, поэтому необходимо указать IP-адрес и порт
смотреть.
Если вы хотите наблюдать за сочетанием серверов, некоторые из которых работают на стандартном порте 3306, а некоторые
работает на нестандартных портах, вам необходимо создать отдельные выходы tcpdump для
нестандартные серверы портов, а затем укажите эту опцию для каждого. В настоящее время pt-query-
дайджест не может автоматически определять серверы на порте 3306, а также ему нужно следить за сервером на
нестандартный порт.
DSN ДОПОЛНИТЕЛЬНЫЕ ОПЦИИ
Эти параметры DSN используются для создания DSN. Каждая опция дается как «option = value».
Параметры чувствительны к регистру, поэтому P и p - это не одно и то же. Не может быть
пробел до или после "=", и если значение содержит пробелы, его следует заключить в кавычки.
Параметры DSN разделяются запятыми. См. Полную информацию на странице руководства percona-toolkit.
· А
dsn: кодировка; копия: да
Набор символов по умолчанию.
· Д
dsn: база данных; копия: да
База данных по умолчанию для использования при подключении к MySQL.
· Ф
dsn: mysql_read_default_file; копия: да
Только читать параметры по умолчанию из данного файла.
· Ч
dsn: host; копия: да
Подключитесь к хосту.
· п
dsn: пароль; копия: да
Пароль для использования при подключении. Если пароль содержит запятые, их нужно экранировать.
с обратной косой чертой: "пример \, пожалуйста"
· П
dsn: порт; копия: да
Номер порта для подключения.
· С
dsn: mysql_socket; копия: да
Файл сокета, используемый для подключения.
· Т
Таблица «--review» или «--history».
· U
dsn: пользователь; копия: да
Пользователь для входа, если не текущий пользователь.
ОКРУЖАЮЩАЯ СРЕДА
Переменная среды «PTDEBUG» включает вывод подробной отладки в STDERR. Включить
отладку и запись всего вывода в файл, запустите инструмент, например:
PTDEBUG = 1 pt-query-digest ...> ФАЙЛ 2> & 1
Будьте осторожны: вывод отладки очень объемный и может генерировать несколько мегабайт вывода.
СИСТЕМА ТРЕБОВАНИЯ
Вам понадобятся Perl, DBI, DBD :: mysql и некоторые основные пакеты, которые должны быть установлены в любом
разумно новая версия Perl.
Используйте pt-query-digestp в Интернете с помощью сервисов onworks.net