2013-10-08 104 views
4

我試圖測量我創建的數據庫的數據訪問時間。一天的數據花費大約1秒。爲了聚合我跑了下面的代碼。我正在使用kdb studio,每天總共有〜1MM交易q如何緩存數據?

\t ans: raze {select from trade where date=x, sym=`ABC} each 20#dtl 

dtl是日期的完整列表。我關閉了服務器並再次運行它,並且令人驚訝的是,這需要1秒鐘的時間。由於這與我上面所觀察到的相反,我跑了這個

\t ans: raze {select from trade where date=x, sym=`ABC} each 20#20_dtl 

現在花了大約21秒。我的問題是,如果我關閉kdb服務器,是否有可能仍然緩存一些以前的結果?

+0

當你說你關閉了服務器,你的意思是你放棄了連接,然後重新連接,或者你真的殺了你的組屋然後重新啓動它? – user1895961

+0

殺了我的組屋,並重新開始,但好點:)。它可能是一個os頁面文件/緩存問題? –

回答

1

KDB +不會緩存任何內容。如果你看到這種速度的差異,那麼這就是所有的硬件緩存。如果您刷新緩存,則可以確認這一點(在unix系統中有一組命令可以執行此操作,但您需要root訪問權限)。底線是KDB +根本不做任何緩存。 (除非你告訴它當然... la.Q.fu)

順便說一句,不知道你的查詢如何在這裏工作 - 20#dtl會給出一個日期列表,然後date = x會然後給出長度錯誤。我假設你的意思是「x日期」。在這種情況下,如果您在命令行上使用-s,則可能會由於多線程而導致結果偏斜。

+0

我正在爲dtl –

+0

在linux中進行檢查。其硬件緩存。您可以通過重新啓動kdb並執行'sync和'echo 3>/proc/sys/vm/drop_caches'來檢查 –

1

這可能是由於您的操作系統緩存從磁盤讀取的數據。 Kdb +默認不提供內置緩存。

+0

這也是我的猜測,但除非有一種方法可以確定地發現它只是一種猜測。也可以是其他東西 –

+0

如果它是一個Linux機器,並且您有權限訪問(root/sudo),則可以使用以下命令來刷新+清除緩存: 'sync; sudo echo 3 | sudo tee/proc/sys/vm/drop_caches' – MdSalih