SQLite查询的执行时间:单位

正如在SQLite文档中所描述的,人们可以使用:

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 

虽然我发现这个答案在几秒钟内为时间单位提供了证据,但我却很难同意。 当使用秒表计时执行查询时,我发现几乎每个查询所花费的时间都比shell的时间要长。 例如,上面例子中的查询时间约为1分54秒 。 这种差异的原因是什么?

那么再一次,这些单位是什么? 什么是用户系统组件?

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

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