Как я могу увидеть точное время запроса в командной строке mysql? - PullRequest
16 голосов
/ 24 мая 2011

Я работаю над оптимизацией и заметил, что в некоторых дампах mysql люди публикуют статьи и вопросы (которые я не могу найти сейчас, когда я на самом деле смотрю), есть время выполнения с высокой точностью(0,05985215 с вместо 0,06 с).

Как просмотреть эти более точные значения времени для моих запросов в командной строке?

РЕДАКТИРОВАТЬ

Примером этого является:

+----------+
| COUNT(*) |
+----------+
| 11596    |
+----------+
1 row in set (0.05894344 sec)

Использование профилирования помогает мне в этом, но выводит слишком долго, и я должен не забыть его включить.Я просто ищу длительность с высокой точностью.

SET profiling = 1;
<query>
SHOW PROFILES;

Дает мне что-то вроде этого:

+----------------------+-----------+
| Status               | Duration  |
+----------------------+-----------+
| (initialization)     | 0.000005  |
| checking permissions | 0.00001   |
| Opening tables       | 0.000499  |
| Table lock           | 0.000071  |
| preparing            | 0.000018  |
| Creating tmp table   | 0.00002   |
| executing            | 0.000006  |
| Copying to tmp table | 6.565327  |
| Sorting result       | 0.000431  |
| Sending data         | 0.006204  |
| query end            | 0.000007  |
| freeing items        | 0.000028  |
| closing tables       | 0.000015  |
| logging slow query   | 0.000005  |
+----------------------+-----------+
14 rows in set (0.00 sec)

Ответы [ 4 ]

12 голосов
/ 02 июня 2011

Кажется, что лучший ответ на это - включить профилирование.Других потенциальных отказов не было.

Лучший ответ, используйте профилирование запросов.

SET profiling = 1;
<query>
SHOW PROFILES;
10 голосов
/ 25 мая 2011

на этот вопрос лучше всего ответить, посмотрев источник клиента командной строки mysql . соответствующий фрагмент кода ,

static void nice_time(double sec,char *buff,bool part_second)
{
  // ...
  if (part_second)
    sprintf(buff,"%.2f sec",sec);
  else
    sprintf(buff,"%d sec",(int) sec);
}

содержит число цифр после десятичной точки для значения sec в жестком коде в( 2 ).это заставило бы меня прийти к выводу, что время более высокой точности не возможно при стандартной установке mysql.

конечно, вы можете исправить этот код, сделать его настраиваемым и т. д., и установить из источника .Полагаю, это то, что делают люди в статьях и вопросах , которые вы упомянули.ваш лучший шанс узнать это просто спросить их (см. мой комментарий к вашему вопросу).

0 голосов
/ 17 июня 2015

Не элегантно, но рабочим решением является исправление /usr/bin/mysql:

# copy the original mysql binary to your home dir
cp /usr/bin/mysql ~/mysql
# patch it
sed -i -e 's/%.2f sec/%.8f sec/1' ~/mysql 
# run it from the home directory
~/mysql 

Это работает, потому что В настоящее время в двоичном файле mysql есть только одна строка формата "% .2f sec", НО она может изменитьсячерез некоторое время.Вы можете вернуться к исходному двоичному файлу, применив обратный патч:

sed -i -e 's/%.8f sec/%.2f sec/1' ~/mysql
0 голосов
/ 24 мая 2011

Не видя дампы, о которых вы говорите, это, вероятно, пользовательская функция?Смотрите эту ветку (http://lists.mysql.com/internals/33707), чтобы узнать, как это сделать.

...