我在2臺RHEL6服務器上使用MarkLogic 8進行集羣。 我在使用mlcp加載數據時遇到DEADLOCK(注意)錯誤。詳細信息: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集合,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消息,並且加載已停止。
問題: 我知道當2個或更多的查詢(更新)嘗試鎖定已經擁有寫鎖的URI時,會發生DEADLOCK。
- 我希望,任何數量的負載MLCP的線程將在時間寫入數據 成一個URI。死鎖怎麼可能?
- 爲什麼當一個查詢正在等待其他查詢完成時,它被稱爲DEADLOCK。這不僅僅是排隊嗎?
我看到下面的代碼是作爲marklogic文檔中死鎖的一個例子給出的。我不明白爲什麼它是一個僵局。一個命令正在等待另一個命令完成。
(: 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 –