SQLite查询的执行时间:单位

时间:2014-09-26 04:47:15

标签: linux sqlite

SQLite Documentation中所述,可以使用:

sqlite> .timer ON

或将相同的命令添加到〜/ .sqliterc

完成此操作后,对于每个执行的查询,SQLite shell都会响应CPU时间的用户和sys组件:

user@machine% 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

虽然我发现this answer以秒为单位提供时间单位的证据,但我很难同意它。当使用秒表计时执行查询时,我发现几乎每个查询所花费的时间都超过了shell的时间。例如,在上面的示例中计时的查询实时大约略微超过 1分54秒。造成这种差异的原因是什么?

再一次,有哪些单位?什么是用户 sys 组件?

我在通过NFS访问的Debian GNU / Linux 6.0.6(squeeze)发行版上运行SQLite 3.7.14。

1 个答案:

答案 0 :(得分:20)

user是CPU花费在用户空间中执行代码的时间(即,在数据库本身中); sys用于内核中的代码。

在进行I / O时,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