SelectEtoile : Base de connaissance SGBD

Posts Tagged 'splock'

Phantom Lock SYBASE ASE

Problème

Des pages sont verrouillées par des sessions qui n’existent plus.

(En l’occurrence pour moi ça empêche le rechargement de la base)

 

Exemple

On a des verrous sur la base mabase et aucune session active qui matchent le spid de sp_lock :

 

[36] SYBSERVER.master.1> sp_lock ; | grep mabase

fid    spid   loid        locktype                     table_id    page        row    dbname          class                          context

 ------ ------ ----------- ---------------------------- ----------- ----------- ------ --------------- ------------------------------ ----------------------------

      0    181         362 Sh_intent                      947871210           0      0 mabase    Non Cursor Lock

      0    181         362 Sh_row                         947871210    53915434      1 mabase    Non Cursor Lock

      0    303         606 Sh_intent                      277040589           0      0 mabase    Non Cursor Lock

      0    376         752 Sh_intent                     1912978162           0      0 mabase    Non Cursor Lock

      0    396         792 Sh_intent                      707870355           0      0 mabase    Non Cursor Lock

      0    396         792 Sh_row                         707870355    24987031      0 mabase    Non Cursor Lock

      0    401         802 Sh_intent                      277040589           0      0 mabase    Non Cursor Lock

      0    438         876 Sh_intent                      707870355           0      0 mabase    Non Cursor Lock

      0    584        1168 Sh_intent                      277040589           0      0 mabase    Non Cursor Lock

      0    609        1218 Sh_intent                      949498732           0      0 mabase    Non Cursor Lock

      0    738        1476 Sh_intent                      277040589           0      0 mabase    Non Cursor Lock

      0    788        1576 Sh_intent                      277040589           0      0 mabase    Non Cursor Lock

[…]

      0   1652        3304 Sh_intent                      277040589           0      0 mabase    Non Cursor Lock

      0   1656        3312 Sh_intent                      947871210           0      0 mabase    Non Cursor Lock

      0   1656        3312 Sh_row                         947871210    53858599      1 mabase    Non Cursor Lock

      0   1678        3356 Sh_intent                      198264132           0      0 mabase    Non Cursor Lock

      0   1692        3384 Sh_intent                      947871210           0      0 mabase    Non Cursor Lock

      0   1692        3384 Sh_row                         947871210     4301611      0 mabase    Non Cursor Lock

      0   1799        3598 Sh_intent                      707870355           0      0 mabase    Non Cursor Lock

      0   1840        3680 Sh_intent                      707870355           0      0 mabase    Non Cursor Lock

      0   1840        3680 Sh_row                         707870355    63218042      0 mabase    Non Cursor Lock

      0   1929        3858 Sh_intent                      277040589           0      0 mabase    Non Cursor Lock

      0   1943        3886 Sh_intent                      949498732           0      0 mabase    Non Cursor Lock

 

[37] SYBSERVER.master.1> sp_who ;

 fid spid status     loginame origname hostname        blk_spid dbname           tempdbname cmd               block_xloid

 --- ---- ---------- -------- -------- --------------- -------- ---------------- ---------- ----------------- -----------

   0    2 sleeping   NULL     NULL     NULL                   0 master           tempdb     DEADLOCK TUNE               0

   0    3 sleeping   NULL     NULL     NULL                   0 master           tempdb     ASTC HANDLER                0

   0    4 sleeping   NULL     NULL     NULL                   0 master           tempdb     ASTC HANDLER                0

   0    5 sleeping   NULL     NULL     NULL                   0 master           tempdb     ASTC HANDLER                0

   0    6 sleeping   NULL     NULL     NULL                   0 master           tempdb     ASTC HANDLER                0

   0    7 sleeping   NULL     NULL     NULL                   0 master           tempdb     CHECKPOINT SLEEP            0

   0    8 sleeping   NULL     NULL     NULL                   0 master           tempdb     HK WASH                     0

   0    9 sleeping   NULL     NULL     NULL                   0 master           tempdb     HK GC                       0

   0   10 sleeping   NULL     NULL     NULL                   0 master           tempdb     HK CHORES                   0

   0   11 sleeping   NULL     NULL     NULL                   0 sybsecurity      tempdb     AUDIT PROCESS               0

   0   12 sleeping   NULL     NULL     NULL                   0 master           tempdb     PORT MANAGER                0

   0   13 sleeping   NULL     NULL     NULL                   0 master           tempdb     NETWORK HANDLER             0

   0   71 recv sleep sa       sa       mmmmmmmm.cm.net        0 master           tempdbsa   AWAITING COMMAND            0

   0  172 recv sleep NULL     NULL     SYB_BACKUP             0 master           tempdb     SITE HANDLER                0

   0  257 sleeping   NULL     NULL     NULL                   0 master           tempdb     LICENSE HEARTBEAT           0

   0 1463 recv sleep suback   suback   suback                 0 mabase2          tempdb     AWAITING COMMAND            0

 

 

Solution

On constate qu’il y a 35 « utilisateurs » de la base :

 

[41] SP_TP_FR4.master.1> dbcc traceon(3604);

[42] SP_TP_FR4.master.1> dbcc dbtable('mabase'); | grep dbt_keep

dbt_state=0x2(0x0002 (DBST_ACTIVE))   dbt_keep=35  dbt_hdeskeep=0 dbt_next=0x1007eed0a00   dbt_systask_keep=0 dbt_detachxact_keep 0

 

La commande qui va bien ; Hula Hup Barbabatruc :

 

[43] SP_TP_FR4.master.1> dbcc dbcacheremove('mabase');

Attempt to uncache the database 'mabase' with dbid 6.

The descriptors keep count is 35 and the system tasks keep count is 0.

The descriptors hot count is 0 and the detached keep count is 0.

The database 'mabase' has been uncached.

DBCC execution completed. If DBCC printed error messages, contact a user with System Administrator (SA) role.

 

[44] SP_TP_FR4.master.1> dbcc dbtable('mabase'); | grep dbt_keep

[VIDE, ie donc plus personne sur la base]

 

Problème de lock à cause des transactions externes (XA DTM).

Symptômes possibles :

  • La log ne se vide pas à cause d'une transaction toujours ouverte (même en cas de reboot du serveur SYBASE)

    • select * from systransactions

 

 

1> select * from systransactions

2> go

 xactkey                        starttime                  failover    type        coordinator state       connection  status     

status2     spid   masterdbid loid        namelen xactname                                                              srvname

 

 

 

 0x0130e2a3000e0000c2c82fe10009        Jun 18 2009  3:53PM           0           3           3       65540          

2     8388740           0      0          9         345     182 000007D6_cj8QdzAVe3gNcRYJcz4Mcj8VcjgNnP4SdP8Ve3sOdBYJcz0Td3kTd3gNnP4TczATdBZBu6tvhkdenQV

pnQBJs0_bjgOc3gVd3gRelYJcz0Td3kTd3gMnRZvnM0000000000000000000000000000000000000000000000000000

NULL

 0x0130e2b0000c0000c2c82fe10009        Jun 18 2009  3:53PM           0           3           3       65540   

        2     8388740           0      0          9         347     182 000007D6_cz0Ve3gQcz8Pe5YJcz4Mcj8VcjoPnOQNe3sOe3oQcPwVnOQOc3sQdjsQd3xvcjsOejkPnSlUpRZ5gQV

vimRMrM_bj4Ne3oNejgMc5YJcz0Td3kTd3gTnRZvnM0000000000000000000000000000000000000000000000000000

NULL

 0x0130e2bf00050000c2c82fe10009        Jun 18 2009  3:53PM           0           3           3       65540       

    2     8388740           0      0          9         349     182 000007D6_cj8QdzAUcjgRd5YJcz4Mcj8Vcj4RnP4PcjANd3AScjBvbj8MdPgRdPcVd5YNdP8Vd3tvpnxDnQl3jB

Z9rn1Lsw_e3oRczoOcP4RnOQOc3sQdjsPejdvnRZv000000000000000000000000000000000000000000000000000000

 

  • Présence de locks sur des pages applicatives avec le spid 0

 

Correctif :

 

Lancer les commandes suivantes :

  • dbcc complete_xact ("xactname","rollback|commit")
  • dbcc forget_xact("xactname")

Les transactions doivent alors disparaître

 

 

Attention :

Parfois on remarque des connexions (sp_who) en lock sleep avec comme spid bloquant 0, c’est normal, les transactions externes n’ont pas de spid.

Si vous obtenez l’erreur 3947 : "A heuristic completion related operation failed…" , vous n’avez pas le choix de faire kill spid (si vous avez un numéro de spid !)