SelectEtoile : Base de connaissance SGBD

Posts Tagged 'lock'

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]

 

Locks fantomes sous SYBASE ASE

Lock fantomes

 

Symptome

 

Il peut arriver que l'on ait suite à une erreur SYBASE et/ou une stacktrace qu'un process disparaisse sans déverrouiller les tables sur lesquelles il a posé des verrous.

Cela se traduit par des lignes dans la tables syslocks mais le spid associé à ces lignes n'est pas présent dans la table sysprocesses. (zombie lock ou phantom lock )

 

 

Conséquence

 

Le process fantome laisse des locks donc peut bloquer d'autres processus.

 

 

Résolution

 

La solution la plus radicale est le reboot du serveur SYBASE ASE. SYBASE va dans ce cas "rollbacker" tous les transactions non "commitées".

SI vous êtes en version ASE 12.5.4 ou plus, vous pouvez essayer d'utiliser la commande 'dbcc lock_release'.

Pour info, je n'ai pas eu le temps de la tester moi-même

 

 

Commande

 

Usage: lock_release( spid, { "table", "page", "row" }, locktype = { "ex_tab", "sh_page", "up_row", etc. }, dbid, objid [, pageno [, rowno ] ] [, "force" ] )

Attempts to release the lock held by the given spid that was badly terminated.