Время выполнения 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