Время выполнения SQLite-запроса: единицы
Как описано в SQLite Documentation, можно использовать:
sqlite> .timer ON
или добавьте ту же команду в ~/.sqliterc
Когда это будет сделано, оболочка SQLite ответит пользовательскими и sys-компонентами CPU Time для каждого выполненного запроса:
[email protected]% sqlite3 test.db
-- Loading resources from ~/.sqliterc
SQLite version 3.7.14 2012-09-03 15:42:36
Enter ".help" for instructions
Enter SQL statements terminated with a ";"
sqlite> select count(*) from my_table;
count(*)
10143270
CPU Time: user 0.199970 sys 1.060838
Пока я нашел этот ответ, давая показания для единиц времени в секундах, я с трудом соглашаюсь с этим. Когда время выполнения запроса с использованием секундомера, я нахожу почти каждый запрос, который занимает больше времени, чем то, что оболочка делает это как взятие. Например, запрос, установленный в приведенном выше примере, приблизительно занял чуть больше 1 минута и 54 секунды в режиме реального времени. В чем причина этого несоответствия?
Итак, еще раз, какие единицы? Что такое пользователь и sys.
Я запускаю SQLite 3.7.14 в дистрибутиве Debian GNU/Linux 6.0.6 (сжатие), доступном через NFS.
Ответы
Ответ 1
user
- время, затрачиваемое ЦП на выполнение кода в пользовательском пространстве (т.е. в самой базе данных); sys
для кода в ядре.
При выполнении ввода/вывода CPU проводит большую часть времени ожидания.
Достаточно недавние версии SQLite также показывают истекшее реальное время:
SQLite version 3.8.6 2014-08-15 11:46:33
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite> .timer on
sqlite> UPDATE ...;
Run Time: real 36.591 user 17.362911 sys 1.809612