J'utilise MarkLogic 8 sur 2 serveurs RHEL6 en cluster. Je suis confronté à des erreurs DEADLOCK (Notice) lors du chargement des données en utilisant mlcp. Détails:Chargement MLCP DeadLock - MarkLogic 8
données: 500+ fichiers CSV
File name Examples:
File1: 20170927_**ABC**_XX_YY.CSV
File2: 20170927_**DEF**_QX_QY.CSV
File3: 20170927_**DE**_QX_QY.CSV
Exigence: je dois charger ces documents tout en attribuant chaque CSV à une collection pendant la charge. Donc, File1 devrait appartenir à ABC Collection, File2 devrait appartenir à la collection DEF et File3 devrait appartenir à la collection DE.
Script: J'ai essayé d'y parvenir en chargeant chaque CSV individuellement en utilisant mlcp.
#!/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
Problème: Certains fichiers ont obtenu chargés dans MarkLogic sans aucune erreur. Cependant, je vois des messages DEADLOCK de niveau 'Notice' dans les journaux et le chargement est bloqué. Je comprends que DEADLOCK se produit lorsque deux requêtes ou plus (mises à jour) tentent de verrouiller un URI qui contient déjà un verrou d'écriture.
- J'espérais que tout nombre de threads de charge PCML rédigera des données dans un URI à la fois. Comment est-ce qu'un DEADLOCK est possible?
- Pourquoi est-ce appelé un DEADLOCK lorsqu'une requête est en attente pour l'autre requête terminée. Ne fait-il pas juste la queue?
Je vois que le code suivant a été donné comme exemple de blocage dans les documents marklogic. Je ne comprends pas pourquoi est-ce une impasse. Une commande attend que l'autre soit terminée.
(: 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")
Y a-t-il une transformation MLCP en jeu? Ou peut-être CPF ou un déclencheur? – grtjn
Non Transforme comme vous le voyez dans la commande mlcp. N'a pas activé CPF/Triggers. C'est une charge simple de mlcp. – Bharadwaj
Combien de lignes y a-t-il dans ces fichiers CSV? Pouvez-vous publier un exemple d'URI qui enregistrent des interblocages? Les URI générés correspondent-ils au modèle attendu, c'est-à-dire filename-split-sequence.xml? Avez-vous activé la création d'annuaire sur votre base de données de contenu? https://help.marklogic.com/knowledgebase/article/View/17/16/understanding-xdmp-deadlock –