Назад | Перейти на главную страницу

Есть ли инструмент для фильтрации журнала медленных запросов MySQL на основе базы данных?

В настоящее время я пытаюсь настроить производительность одной базы данных (на самом деле, набора аналогичных баз данных), но в журнале медленных запросов есть набор данных для других баз данных, которые меня в настоящее время не интересуют. Я смог чтобы найти несколько сценариев фильтрации медленных журналов, но ничего, что на самом деле кажется фильтрующим на основе имени базы данных.

Просматривая файл журнала (для 5.0.18), кажется, что имя базы данных появляется для каждого блока запросов, поэтому эта фильтрация должна быть довольно простой задачей программирования (это похоже на то, что я сделаю ), но почему никто (кого я могу найти) еще не сделал, если это так просто?

Например:

# Time: 090226 11:17:04
# User@Host: user1[user1] @ host [10.0.0.3]
# Query_time: 12  Lock_time: 0  Rows_sent: 2  Rows_examined: 4042564
use [db1];
SELECT ...
# Time: 090226 11:17:34
# User@Host: user1[user1] @ host [10.0.0.3]
# Query_time: 12  Lock_time: 0  Rows_sent: 0  Rows_examined: 4042560
SELECT ...
# Time: 090226 12:32:40
# User@Host: user2[user2] @ host [10.0.0.3]
# Query_time: 8  Lock_time: 0  Rows_sent: 123390  Rows_examined: 812841
use [db2];
SELECT ...

первые два запроса относятся к одной и той же базе данных, поэтому один use заявление охватывает их обоих.

В конце концов я нашел mysqlsla и, после небольшого исправления (которое я отправил им обратно, но с радостью выложу здесь, если кто-то захочет), он выполнил мои приказы.

вы можете использовать этот небольшой сценарий awk для выполнения этой работы:

awk '{ if ($0 ~ /use \[.*\];/) { if ($2 ~ /db1/) { found = 1; } else { found = 0; }} if (found == 1) { print $0; }}' <mysqllogfile>

просто замените db1 именем базы данных, которое вы ищете. когда вы возьмете свой пример сверху, этот сценарий выдаст вам:

use [db1];
SELECT ...
# Time: 090226 11:17:34
# User@Host: user1[user1] @ host [10.0.0.3]
# Query_time: 12  Lock_time: 0  Rows_sent: 0  Rows_examined: 4042560
SELECT ...
# Time: 090226 12:32:40
# User@Host: user2[user2] @ host [10.0.0.3]
# Query_time: 8  Lock_time: 0  Rows_sent: 123390  Rows_examined: 812841

Я не знаю, какая у вас операционная система, но awk / gawk доступен для нескольких ОС.