如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秒实时.造成这种差异的原因是什么?
再一次,这些单位是什么?什么是用户和sys组件?
我在可通过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