클러스터 된 2 개의 RHEL6 서버에서 MarkLogic 8을 사용하고 있습니다. mlcp를 사용하여 데이터를로드하는 중 DEADLOCK (Notice) 오류가 발생했습니다. 세부 :MLCP로드로 인해 DeadLock이 발생합니다 - MarkLogic 8
데이터 : 500 CSV 파일
File name Examples:
File1: 20170927_**ABC**_XX_YY.CSV
File2: 20170927_**DEF**_QX_QY.CSV
File3: 20170927_**DE**_QX_QY.CSV
요구 사항 : 나는 부하 중에 컬렉션에 각 CSV를 할당하면서 이러한 문서를로드해야합니다. 따라서 File1은 ABC Collection에 속해야하며 File2는 DEF 컬렉션에 속해야하며 File3은 DE 컬렉션에 속해야합니다.
스크립트 : mlcp를 사용하여 각 CSV를 개별적으로로드하여이 작업을 수행하려고했습니다.
#!/bin/sh
listFiles=`ls -l /location/*.CSV | awk '{print $9}'`
for each in $listFiles
do
collName=`echo $each | cut -d_ -f2`
$MLCP_HOME/mlcp.sh import -mode local -options_file connect.txt \
-input_file_path $each -input_file_type delimited_text \
-generate_uri -output_collections $collName
done
문제 : 일부 파일이 오류없이 MarkLogic에로드있어 한 . 그러나 로그에 '알림'수준의 DEADLOCK 메시지가 표시되고로드가 지연되었습니다.
질문 : 두 개 이상의 쿼리 (업데이트)가 이미 쓰기 잠금을 보유하고있는 URI에 대한 잠금을 시도 할 때 DEADLOCK이 발생하는 것으로 알고 있습니다.
- mlcp로드의 스레드가 한 번에 하나의 URI에 데이터 을 쓸 것이라고 기대하고있었습니다. 데드락은 어떻게 가능합니까?
- 하나의 쿼리가 의 다른 쿼리를 기다리는 동안 DEADLOCK이라고하는 이유는 무엇입니까? 대기열에만 머 무르지 않습니까?
다음 코드는 marklogic docs의 교착 상태의 예입니다. 왜 그것이 교착 상태인지 이해할 수 없습니다. 한 명령이 다른 명령이 완료 될 때까지 기다리는 중입니다.
(: the next line ensures this runs as an update statement :)
if (1 = 2) then (xdmp:document-insert("foobar", <a/>)) else(),
doc("/docs/test.xml"),
xdmp:eval("xdmp:node-replace(doc('/docs/test.xml')/a, <b>goodbye</b>)",
(),
<options xmlns="xdmp:eval">
<isolation>different-transaction</isolation>
</options>) ,
doc("/docs/test.xml")
MLCP 변환이 실행 중입니까? 아니면 CPF 또는 트리거? – grtjn
아니요 mlcp 명령에서 볼 수 있듯이 변형됩니다. CPF/트리거를 활성화하지 않았습니다. 일반 mlcp로드입니다. – Bharadwaj
이 CSV 파일에는 몇 개의 행이 있습니까? 교착 상태를 로깅하고있는 URI의 예를 게시 할 수 있습니까? 생성 된 URI가 예상되는 패턴 (예 : filename-split-sequence.xml)과 일치합니까? 콘텐츠 데이터베이스에서 디렉터리를 만들 수 있습니까? https://help.marklogic.com/knowledgebase/article/View/17/16/understanding-xdmp-deadlock –