2015-04-22 38 views
2

我們正在對包含500萬個三元組的數據庫執行一系列不同的SPARQL查詢。導致XDMP-MEMCANCELED的SPARQL查詢

我們的查詢通常會導致XDMP-MEMCANCELED錯誤(儘管不是一致的),但它們通常會在幾秒鐘或更短時間內返回正確的結果。有些查詢偶爾會掛起,導致服務器以100%的CPU運行,直到查詢超時。

我們已經嘗試增加我們可以找到的與內存相關的設置。此查詢在其他三重商店/引擎上運行良好。

我們運行MarkLogic 8.0-11 AWS實例,具有8 GB內部內存和16 GB交換空間。

一個相當簡單的查詢有時會導致錯誤的例子:

PREFIX xsd: <http://www.w3.org/2001/XMLSchema#> 
PREFIX t5_m: <http://url.com/T5/model#> 
PREFIX t5_d: <http://url.com/T5/data#> 
SELECT DISTINCT 
?_app_id 
(?_err as ?_reason) 
?_comment 
?_severity 
WHERE 
{ 
BIND (3 as ?_severity) 
BIND ("Generated by HL7 v2 Conformance Profile of IHE PCD-01 message" as ?_comment) 

FILTER(?_app_id = 'APP_ID') 
FILTER (?_ts >= '2015-04-21T09:04:07.871') 
FILTER (?_ts <= '2015-04-21T09:07:43.973') 

?ACK t5_m:hasMSH ?MSH . 
?MSH t5_m:hasMSH.5 ?MSH_5 . 
?MSH_5 t5_m:hasHD.1 ?HD_1 . 
?HD_1 t5_m:hD.1Value ?_app_id . 

?ACK t5_m:hasMSA ?MSA . 
?MSA t5_m:hasMSA.2 ?MSA_2 . 
?MSA_2 t5_m:mSA.2Value ?_msg_id . 

?PCD_01_Message a t5_m:PCD_01_Message . 
?PCD_01_Message t5_m:id ?_msg_id . 
?PCD_01_Message t5_m:timeStamp ?_ts . 

?ACK t5_m:hasERR ?ERR . 
?ERR t5_m:hasERR.7 ?ERR_7 . 
?ERR_7 t5_m:eRR.7Value ?_err . 
} 

有,我們已經錯過了或者是有什麼錯此查詢一些相關配置設置?

此致,亞歷山大

回答

4

當總散列連接所有運行SPARQL查詢的表的大小超過了主機內存的50%,使用哈希內存最大的SPARQL查詢連接將與「XDMP-取消MEMCANCELED「錯誤。這可能表明了一些事情:

  1. 主機過載同時與 執行SPARQL查詢的數量。您可以嘗試向主機添加更多內存 (8Gb非常小)或 跨多個MarkLogic主機負載平衡SPARQL查詢。

  2. SPARQL查詢優化器正在爲您的 查詢選擇差的查詢計劃。對於具有較大連接數的SPARQL查詢(例如 ,您的查詢有13個連接),您可以嘗試執行具有較高優化級別的sem:sparql() 函數,即:嘗試添加選項 「optimize = 2」 。

  3. 查詢優化器可能有一個錯誤或缺陷導致 選擇一個差的查詢計劃。你應該聯繫MarkLogic支持 看看 - 他們將能夠指導你找出 選擇的查詢計劃和導致你的 問題的優化參數。他們可能會提供一個解決方案,給出更多的信息,或者他們可能會提交一個錯誤報告,以便進行修復。

約翰