Ответ 1
Кажется, что лучший ответ на это - включить профилирование. Не было никаких других решений, которые выходят за рамки.
Лучший ответ, используйте профилирование запросов.
SET profiling = 1;
<query>
SHOW PROFILES;
Я работаю над некоторой работой по оптимизации, и я заметил, что в некоторых дампах 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)
Кажется, что лучший ответ на это - включить профилирование. Не было никаких других решений, которые выходят за рамки.
Лучший ответ, используйте профилирование запросов.
SET profiling = 1;
<query>
SHOW PROFILES;
на этот вопрос лучше всего ответить, посмотрев источник клиента командной строки 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.
конечно, вы можете исправить этот код, настроить его и т.д. и установить из источника. я думаю, это то, что делают люди в статьях и вопросах, о которых вы говорили. ваш лучший шанс узнать, просто спросить их (см. мой комментарий к вашему вопросу).
Не видя дампов, о которых вы говорите, возможно, это определенная пользователем функция? См. Эту тему (http://lists.mysql.com/internals/33707) для пары исправлений и как это сделать.
Не изящно, но рабочим решением является патч /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