SPARQL 查询导致 XDMP-MEMCANCELED
SPARQL queries causing XDMP-MEMCANCELED
我们正在对包含约 500 万个三元组的数据库执行一系列不同的 SPARQL 查询。
我们的查询经常会导致 XDMP-MEMCANCELED 错误,尽管并不一致,但它们大多 return 在几秒或更短时间内得到正确的结果。某些查询有时似乎挂起并导致服务器 运行 处于 100% CPU 直到查询超时。
我们已尝试增加我们可以找到的与内存相关的设置。此查询 运行 在其他三元组 stores/engines 上没问题。
我们运行宁 MarkLogic 8.0-11 AWS 实例具有 8 GB 的内部内存和 16 GB 的交换 space。
有时会导致错误的相当简单的查询示例:
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 .
}
是否有一些我们遗漏的相关配置设置或者此查询有问题?
真诚的,亚历山大
当所有 运行 SPARQL 查询的总散列连接 table 大小超过主机内存的 50% 时,使用散列连接最多内存的 SPARQL 查询将被取消 "XDMP-MEMCANCELED" 错误。这可能表明了很多事情:
主机同时连接数过载
执行 SPARQL 查询。您可以尝试向主机添加更多内存
(8Gb 很小)或
跨更多 MarkLogic 主机的负载平衡 SPARQL 查询。
SPARQL 查询优化器正在为您的查询选择糟糕的查询计划
询问。对于具有大量连接的 SPARQL 查询(例如
您的查询有 13 个连接),您可以尝试执行 sem:sparql()
具有更高优化级别的功能,即:尝试添加选项
"optimize=2".
查询优化器可能有错误或缺陷导致
选择一个糟糕的查询计划。您应该联系 MarkLogic 支持以
调查一下 - 他们将能够指导您找出
选择的查询计划和导致您的优化参数
问题。他们可能会提出更多的解决方案
信息,或者他们可能会提交错误报告以进行修复。
约翰
我们正在对包含约 500 万个三元组的数据库执行一系列不同的 SPARQL 查询。
我们的查询经常会导致 XDMP-MEMCANCELED 错误,尽管并不一致,但它们大多 return 在几秒或更短时间内得到正确的结果。某些查询有时似乎挂起并导致服务器 运行 处于 100% CPU 直到查询超时。
我们已尝试增加我们可以找到的与内存相关的设置。此查询 运行 在其他三元组 stores/engines 上没问题。
我们运行宁 MarkLogic 8.0-11 AWS 实例具有 8 GB 的内部内存和 16 GB 的交换 space。
有时会导致错误的相当简单的查询示例:
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 .
}
是否有一些我们遗漏的相关配置设置或者此查询有问题?
真诚的,亚历山大
当所有 运行 SPARQL 查询的总散列连接 table 大小超过主机内存的 50% 时,使用散列连接最多内存的 SPARQL 查询将被取消 "XDMP-MEMCANCELED" 错误。这可能表明了很多事情:
主机同时连接数过载 执行 SPARQL 查询。您可以尝试向主机添加更多内存 (8Gb 很小)或 跨更多 MarkLogic 主机的负载平衡 SPARQL 查询。
SPARQL 查询优化器正在为您的查询选择糟糕的查询计划 询问。对于具有大量连接的 SPARQL 查询(例如 您的查询有 13 个连接),您可以尝试执行 sem:sparql() 具有更高优化级别的功能,即:尝试添加选项 "optimize=2".
查询优化器可能有错误或缺陷导致 选择一个糟糕的查询计划。您应该联系 MarkLogic 支持以 调查一下 - 他们将能够指导您找出 选择的查询计划和导致您的优化参数 问题。他们可能会提出更多的解决方案 信息,或者他们可能会提交错误报告以进行修复。
约翰