J'ai un progiciel Oracle DB qui provoque régulièrement ce que je crois être un interblocage ITL (Interested Transaction List). La partie pertinente d'un fichier de trace est ci-dessous.Identification et résolution d'un interblocage Oracle ITL
Deadlock graph:
---------Blocker(s)-------- ---------Waiter(s)---------
Resource Name process session holds waits process session holds waits
TM-0000cb52-00000000 22 131 S 23 143 SS
TM-0000ceec-00000000 23 143 SX 32 138 SX SSX
TM-0000cb52-00000000 30 138 SX 22 131 S
session 131: DID 0001-0016-00000D1C session 143: DID 0001-0017-000055D5
session 143: DID 0001-0017-000055D5 session 138: DID 0001-001E-000067A0
session 138: DID 0001-001E-000067A0 session 131: DID 0001-0016-00000D1C
Rows waited on:
Session 143: no row
Session 138: no row
Session 131: no row
Il n'y a pas d'index de mappage sur cette table, ce n'est donc pas la cause. Pour autant que je sache, l'absence de "Lignes attendues" plus le "S" dans la colonne Waiter Wait indique probablement qu'il s'agit d'une impasse ITL. En outre, la table est écrite assez souvent (environ 8 insertions ou mises à jour simultanément, aussi souvent que 240 fois par minute), donc une impasse ITL semble être une forte possibilité.
J'ai augmenté le paramètre INITRANS de la table et ses index à 100 et augmenté le PCT_FREE sur la table de 10 à 20 (reconstruit ensuite les index), mais les blocages sont toujours en cours. L'impasse semble se produire le plus souvent au cours d'une mise à jour, mais cela pourrait être une coïncidence, car je l'ai seulement retrouvé quelques fois.
Mes questions sont doubles:
1) S'agit-il réellement d'une impasse ITL?
2) S'il s'agit d'une impasse ITL, que peut-on faire d'autre pour l'éviter?
Il se trouve que cela n'a pas été un problème de blocage de ITL du tout, mais plutôt un problème avec les clés étrangères indexées sur l'ONU. J'ai découvert cela grâce à la réponse de dpbradley, qui m'a fait comprendre que ce n'était pas un problème de l'ITL et m'a incité à découvrir quelles pourraient être les autres causes d'un blocage avec «pas de lignes».
Vous pouvez envisager de poster ceci sur serverfault. Ma première réaction a été de savoir à quoi cela appartenait, mais il y a aussi une touche de programmation à la question. En tout cas, vous pouvez attraper une autre paire d'yeux qui ne sont pas là. – DCookie