2014-09-26 24 views
16

SQLite Documentation描述的一個可以使用:執行時間:單位

sqlite> .timer ON 

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

當這樣做時,SQLite的外殼,響應對於每個查詢CPU時間的用戶和sys組件執行:

[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 

雖然我發現this answer提供證據的時間,以秒爲,我有啊單位和時間一致。當使用秒錶計時執行查詢時,我發現幾乎每個查詢所花的時間都比shell的時間長。例如,在上面的例子中定時的查詢大約需要實時超過1分54秒。這種差異的原因是什麼?

所以,再次,什麼是單位?什麼是用戶sys組件?

我在可通過NFS訪問的Debian GNU/Linux 6.0.6(squeeze)發行版上運行SQLite 3.7.14。

回答

15

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 
+0

所以來從DB數據所採取的實際時間會SYS時間? – theLearner 2016-01-08 07:02:57

+0

@Akshay這取決於你的意思是「實際」。 – 2016-01-08 08:26:17

+0

實際上,我是指從db中獲取數據所需的時間。我想在運行時間裏,還包括在控制檯上打印dta的時間。 – theLearner 2016-01-08 11:12:00