{"id":1430,"date":"2016-05-30T21:57:54","date_gmt":"2016-05-30T19:57:54","guid":{"rendered":"https:\/\/clemente.pamplona.name\/dba\/?p=1430"},"modified":"2016-05-31T13:47:57","modified_gmt":"2016-05-31T11:47:57","slug":"estudio-de-traza-de-un-deadlock","status":"publish","type":"post","link":"http:\/\/clemente.pamplona.name\/dba\/estudio-de-traza-de-un-deadlock\/","title":{"rendered":"Estudio de traza de un Deadlock"},"content":{"rendered":"<p>Hoy vamos a ver como obtener algo mas de informaci\u00f3n de una incidencia que probablemente tengamos a menudo.<\/p>\n<h1> Los deadlocks no implican mal funcionamiento de la base de datos <\/h1>\n<p>Lo primero que tenemos que tener muy claro es que un deadlock  no es un mal funcionamiento  de la base de datos, un deadlock  (la traducci\u00f3n posiblemente sea interbloqueo) es una situaci\u00f3n en la que  dos o mas usuarios est\u00e1n esperando cada uno a un recurso bloqueado por el otro.<br \/>\nLa manera en la que Oracle soluciona esta situaci\u00f3n es <i>rolling back<\/i> una de las sentencias implicadas en el deadlock, al liberar uno de estos bloqueos la otra finaliza su solicitud.<br \/>\nCuando esta situaci\u00f3n ocurre, Oracle deja un fichero de traza en el $DIAG_DEST , que nos indica cuales eran los procesos y sentencias implicados. El an\u00e1lisis de esa traza es lo que vamos a mirar hoy.<\/p>\n<h1> Deadlock Graph <\/h1>\n<p>Seguramente el apartado mas importante de la traza sea el llamado \u00abdeadlock graph\u00bb, estas dos l\u00edneas  que parecen tan cr\u00edpticas son las que mas informaci\u00f3n nos van a dar sobre el bloqueo.<\/p>\n<pre>\r\nDeadlock graph:\r\n--------Blocker(s)------- --------Waiter(s)--------\r\nResource Name           process session_holds waits process session_holds waits\r\nTX-000e001a-002dd880     65               414    X       24          9       X\r\nTX-00090006-01e831ca     24                 9    X        65        414      X\r\n<\/pre>\n<p>Viendo el tipo de bloqueo en \u00abresource_name\u00bb y los distintos waits podremos obtener el tipo de bloqueo que ha sido, para ello tenemos una tabla maestra en la nota de soporte   <b>How to Identify ORA-00060 Deadlock Types Using Deadlock Graphs in Trace (Doc ID 1507093.1)<\/b>.<br \/>\nEn nuestro caso, por ejemplo,tendr\u00edamos seg\u00fan soporte un claro caso de bloqueo de aplicaci\u00f3n.<br \/>\n<a href=\"https:\/\/clemente.pamplona.name\/dba\/estudio-de-traza-de-un-deadlock\/screenhunter_715-may-31-09-29\/\" rel=\"attachment wp-att-1435\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2016\/05\/ScreenHunter_715-May.-31-09.29.jpg\" alt=\"Bloqueo TX X X \" width=\"746\" height=\"89\" class=\"aligncenter size-full wp-image-1435\" srcset=\"http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2016\/05\/ScreenHunter_715-May.-31-09.29.jpg 746w, http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2016\/05\/ScreenHunter_715-May.-31-09.29-300x36.jpg 300w, http:\/\/clemente.pamplona.name\/dba\/wp-content\/uploads\/2016\/05\/ScreenHunter_715-May.-31-09.29-500x60.jpg 500w\" sizes=\"auto, (max-width: 746px) 100vw, 746px\" \/><\/a><\/p>\n<h2> Informaci\u00f3n de la sesi\u00f3n <\/h2>\n<p>Otro apartado interesante es el de la informaci\u00f3n de la sesi\u00f3n. En este apartado nos indica de manera mas sencilla cuales son las sesiones implicadas  y cuales son los objectos en los que hemos tenido el problema .<br \/>\nMediante esta informaci\u00f3n podemos buscar los objetos por los que se han causado el interbloqueo<\/p>\n<pre>\r\nsession 414: DID 0001-0041-000592FB session 9: DID 0001-0018-00004FD9 \r\nsession 9: DID 0001-0018-00004FD9 session 414: DID 0001-0041-000592FB\r\nRows waited on:\r\nSession 414: obj - rowid = 001272E0 - AAExowAQAAAACF5AAUv (dictionary objn - 1209056, file - 1024, block - 8569, slot - 20)\r\nSession 9:   obj - rowid = 001272E0 - AAExowAQAAAACMNAAJ  (dictionary objn - 1209056, file - 1024, block - 8973, slot - 9)\r\n<\/pre>\n<h2> SQL implicado <\/h2>\n<p>Finalmente llegamos al apartado que puede ser mas clarificador de cara al equipo de desarrollo encargado de depurar el c\u00f3digo.<br \/>\nEste tercer bloque nos amplia la informaci\u00f3n de las sesiones implicadas, cont\u00e1ndonos esquema, terminal y las consultas implicadas en el deadlock <\/p>\n<pre>\r\n----- Information for the OTHER waiting sessions -----\r\nSession 9:\r\nsid: 9 ser: 37801 audsid: 206118217 user: 103\/SCHEMA1    flags: (0x45) USR\/- flags_idl: (0x1) BSY\/\/\/\/\/- flags2: (0x40009) \/\/INC  pid: 24 O\/S info: user: SYSTEM, term: SERVERTEST, ospid: 12260  image: ORACLE.EXE (SHAD)\r\n\r\nclient details:\r\nO\/S info: user: launcherusr, term: , ospid: 13041768  machine: client2 program: schema2@client2 (TNS V1-V3)  application name: schema2@client2 (TNS V1-V3), hash  alue=54028978\r\n\r\ncurrent SQL:\r\nUPDATE SCOTT2.TIPO_COCHE  SET COLOR = :1, CILINDRADA = :2 WHERE MATRICULA = :3 AND ANCHO = :4\r\n----- End of information for the OTHER waiting sessions -----\r\n\r\nInformation for THIS session:\r\n----- Current SQL Statement for this session (sql_id=8zqxt1a6d7ts1) -----\r\nUPDATE SCOTT2.TIPO_COCHE SET TIPO = :1, PERSONA = :2 WHERE MATRICULA = :3 AND LARGO = :4\r\n<\/pre>\n<p>El fichero de traza es mucho mas amplio, pero, como hab\u00e9is podido ver, mediante el estudio de la cabecera de la traza podemos recopilar mucha informaci\u00f3n para poder depurara el c\u00f3digo de aplicaci\u00f3n para que no vuelva a ocurrir<\/p>\n<p>Como siempre, tenemos mas informaci\u00f3n en soporte, en las notas<\/p>\n<ul>\n<li> Master Note for Database Error ORA-00060 \u00abdeadlock detected while waiting for resource\u00bb (Doc ID 1509919.1)\n<li> Master Note: Locks, Enqueues and Deadlocks (Doc ID 1392319.1)\n<li> How to Identify ORA-00060 Deadlock Types Using Deadlock Graphs in Trace (Doc ID 1507093.1)\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Hoy vamos a ver como obtener algo mas de informaci\u00f3n de una incidencia que probablemente tengamos a menudo. Los deadlocks no implican mal funcionamiento de la base de datos Lo primero que tenemos que tener muy claro es que un &hellip; <a href=\"http:\/\/clemente.pamplona.name\/dba\/estudio-de-traza-de-un-deadlock\/\">Sigue leyendo <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11,60,66,3],"tags":[58,16,599,601,605,603],"class_list":["post-1430","post","type-post","status-publish","format-standard","hentry","category-11g","category-12c","category-errores-ora","category-tunning","tag-alert-log","tag-bloqueos","tag-deadlock","tag-deadlock-detected","tag-deadlock-graph","tag-ora-00060"],"_links":{"self":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1430","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/comments?post=1430"}],"version-history":[{"count":11,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1430\/revisions"}],"predecessor-version":[{"id":1448,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/posts\/1430\/revisions\/1448"}],"wp:attachment":[{"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/media?parent=1430"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/categories?post=1430"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/clemente.pamplona.name\/dba\/wp-json\/wp\/v2\/tags?post=1430"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}