Question

J'ai un traçage d'une machine sur laquelle la requête suivante semble rester bloquée pendant des jours :

SELECT table_name FROM user_tables

Qu'est-ce qui pourrait bien générer un tel verrou ?Les utilisateurs ne peuvent jamais modifier cette table ;et de nombreuses instances ultérieures de cette requête ont été exécutées avec succès.

Était-ce utile?

La solution

Donc, puisque la condition n’existe plus, il n’y a aucun moyen de savoir ce qui s’est passé.

Cependant, à l'avenir, si cela ou quelque chose de similaire se reproduit, vous souhaiterez utiliser l'interface d'attente d'Oracle.Autrement dit, regardez V$SESSION.

Tout d'abord, vous souhaiterez déterminer si le processus tourne (c'est-à-dire sur le processeur) ou se bloque (c'est-à-dire en attente d'un événement d'attente).La façon de déterminer cela est d'examiner le STATE colonne:

  • Si ETAT est 'WAITING', alors la session est bloquée.Si tel est le cas, la colonne EVENT doit décrire l'événement attendu par la session.
  • Si l'ÉTAT est autre chose que 'WAITING', alors la session est sur le CPU et la colonne EVENT est la dernière chose qu'elle a attendue.
    • Si ETAT est 'WAITED KNOWN TIME', alors WAIT_TIME est le temps attendu en centisecondes.
    • Si ETAT est 'WAITED SHORT TIME', puis la session a attendu moins d'une centiseconde.
    • Si ETAT est 'WAITED UNKNOWN TIME', le temps d'attente n'est pas connu car timed_statistics a été défini sur FALSE pour la session.

J'espère que cela pourra aider.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top