Это сообщение написано Стефаном Комбоудоном в блоге MySQL Performance.
В прошлый раз я написал несколько советов, которые могут сделать вас более эффективным при использовании командной строки в Unix. Сегодня я хочу больше сосредоточиться на пейджере.
Наиболее распространенное использование пейджера — это установка на пейджер Unix, например, less. Это может быть очень полезно для просмотра результата команды, охватывающей несколько строк (например SHOW ENGINE INNODB STATUS
):
mysql> pager less PAGER set to 'less' mysql> show engine innodb status\G [...]
Теперь вы внутри, less
и вы можете легко перемещаться по набору результатов (используйте q, чтобы выйти, пробел, чтобы прокрутить вниз и т. Д.).
Напоминание: если вы хотите оставить свой пользовательский пейджер, это легко, просто запустите pager
:
mysql> pager Default pager wasn't set, using stdout.
Или \n
:
mysql> \n PAGER set to stdout
Но команда пейджера не ограничивается таким базовым использованием! Вы можете передавать вывод запросов большинству программ Unix, способных работать с текстом. Мы обсудили тему , но вот еще несколько примеров.
Отказ от набора результатов
Иногда вы не заботитесь о наборе результатов, вы просто хотите увидеть информацию о времени. Это может быть правдой, если вы пытаетесь изменить планы выполнения для запроса путем изменения индексов. Отменить результат можно с помощью пейджера:
mysql> pager cat > /dev/null PAGER set to 'cat > /dev/null' # Trying an execution plan mysql> SELECT ... 1000 rows in set (0.91 sec) # Another execution plan mysql> SELECT ... 1000 rows in set (1.63 sec)
Теперь намного проще увидеть всю информацию о времени на одном экране.
Сравнение наборов результатов
Допустим, вы переписываете запрос и хотите проверить, одинаков ли набор результатов до и после перезаписи. К сожалению, в нем много строк:
mysql> SELECT ... [..] 989 rows in set (0.42 sec)
Вместо того чтобы вручную сравнивать каждую строку, вы можете вычислить контрольную сумму и сравнить только контрольную сумму:
mysql> pager md5sum PAGER set to 'md5sum' # Original query mysql> SELECT ... 32a1894d773c9b85172969c659175d2d - 1 row in set (0.40 sec) # Rewritten query - wrong mysql> SELECT ... fdb94521558684afedc8148ca724f578 - 1 row in set (0.16 sec)
Хм, контрольные суммы не совпадают, что-то не так. Давайте повторим:
# Rewritten query - correct mysql> SELECT ... 32a1894d773c9b85172969c659175d2d - 1 row in set (0.17 sec)
Контрольные суммы идентичны, переписанный запрос, скорее всего, даст тот же результат, что и исходный.
Убираться SHOW PROCESSLIST
Если у вас много подключений к MySQL, очень сложно прочитать вывод SHOW PROCESSLIST
. Например, если у вас есть несколько сотен соединений, и вы хотите знать, сколько соединений находится в спящем режиме, ручной подсчет строк из выходных данных SHOW PROCESSLIST
, вероятно, не лучшее решение. С пейджером все просто:
mysql> pager grep Sleep | wc -l PAGER set to 'grep Sleep | wc -l' mysql> show processlist; 337 346 rows in set (0.00 sec)
Это должно быть прочитано как «337 из 346 соединений спят».
Немного сложнее сейчас: вы хотите узнать количество соединений для каждого статуса:
mysql> pager awk -F '|' '{print $6}' | sort | uniq -c | sort -r PAGER set to 'awk -F '|' '{print $6}' | sort | uniq -c | sort -r' mysql> show processlist; 309 Sleep 3 2 Query 2 Binlog Dump 1 Command
Проницательные читатели заметят, что эти вопросы можно было решить, запросив INFORMATION_SCHEMA. Например, подсчет количества спящих соединений можно выполнить с помощью:
mysql> SELECT COUNT(*) FROM INFORMATION_SCHEMA.PROCESSLIST WHERE COMMAND='Sleep'; +----------+ | COUNT(*) | +----------+ | 320 | +----------+
и подсчет количества подключений для каждого статуса можно сделать с помощью:
mysql> SELECT COMMAND,COUNT(*) TOTAL FROM INFORMATION_SCHEMA.PROCESSLIST GROUP BY COMMAND ORDER BY TOTAL DESC; +-------------+-------+ | COMMAND | TOTAL | +-------------+-------+ | Sleep | 344 | | Query | 5 | | Binlog Dump | 2 | +-------------+-------+
Правда, но:
- Приятно знать несколько способов получить одинаковый результат
- Некоторые из вас могут чувствовать себя более комфортно при написании SQL-запросов, тогда как другие предпочтут инструменты командной строки
Вывод
Как видите, пейджер — ваш друг! Он очень прост в использовании и может решать проблемы элегантным и очень эффективным способом. Вы даже можете написать свой собственный скрипт (если он слишком сложен, чтобы поместиться в одну строку) и передать его на пейджер.