試圖計數datomic實體與此查詢Datomic超出GC開銷限制
(d/q '[:find (count ?a) . :where [?a :type]] (d/db (conn)))
OutOfMemoryError GC overhead limit exceeded [trace missing]
工作想如果我試着算像
(d/q '[:find (count ?a) :where [?a :type "psp"]] (d/db (conn)))
[[400541]]
較小的子集使用開發後端。
它是我做錯了什麼,或者我應該嘗試不同的後端,還是別的?
這裏是堆棧跟蹤http://pastebin.com/C76mEhEJ這導致datomic.datalog
內的某處。
你的堆設置是什麼?這看起來像你沒有足夠的內存用於中間表示(仍然是一組元組,儘管你已經集合了它)。 –
@BenKamphaus如果我正確地理解了jvm選項,我的初始和最大堆大小是2Gb和4Gb,這裏是jvm輸出http://pastebin.com/eRpEXEuv,試圖用「-Xmx6g」「-Xms4g」運行,結果和這幾乎是我所有的公羊。順便說一句,你是什麼意思的中間結果,'?a'(整個數據集)在我的情況? – cvb
是的,Datomic中的查詢是渴望的,查詢中的聚合對所有匹配[_:type _ _ _]的元組進行操作。你可以嘗試使用datoms進行數據庫掃描的懶序列操作,例如:(count(dedupe(map#(:e%)(seq(d/datoms(d/db conn):aevt:type)))) )' –