2016-11-07 44 views
3

我的orientdb數據庫擁有大約230萬條記錄。我試圖查詢所有重複記錄(其中有大約750,000)使用聲明 - SELECT FROM (select PROP1, PROP2, count(*) as c from vin_data group by PROP1) where c > 1。當我將限制設置爲200左右時,大約需要180秒才能查詢(我認爲這很慢)。但是,當我將限制設置爲750000時,它會給我帶來內存不足的錯誤。我的內存是4GB,我已經設置了Xms64m和Xmx3600m。我已經設置了PROP1和PROP1 + PROP2(複合)的索引。我的問題是 - 對於230萬個記錄數據庫,4GB內存足夠了嗎?Orientdb GC開銷限制超出/內存不足錯誤和性能下降

回答

2

對於上面的查詢,兩個索引都毫無價值,因爲它們不在GROUP BY中使用。沒有任何「where」條件,整個班級都會被掃描。您可以嘗試通過在語句末尾添加PARALLEL關鍵字來優化它。如果你有多個內核,它應該快得多。

無論如何,隨着即將發佈的v3.0版本(仍在alpha版本之前),新的SQL引擎中已經付出了很多努力,像你這樣的查詢應該快得多。

+0

我明白了。感謝您的迴應。儘管我爲了不同的目的而編制了我的課程。那麼,考慮到查詢的種類,佔用4GB RAM的230萬條記錄是正常的?我現在的目的是從我的數據庫中刪除重複項。任何你可能會暗示的技巧可以加快我的查詢速度? –

+0

順便說一句,我在24 GB RAM的系統上執行查詢,爲Xmx分配20GB,並行化8個內核和SSD(如果有的話)。我仍然會超過GC的開銷限制。我很確定這是不正常的。任何疑難解答建議?什麼時候會發布v3.0? –

+0

不幸的是,'group by'和'order by'工作在RAM中。最終結果集中有多少條記錄有多條記錄分組?你可以執行這個'SELECT count(*)FROM(從PROP1選擇PROP1,PROP2,count(*)作爲來自vin_data組的c)其中c> 1'? – Lvca

相關問題