Sybase - dbcc pss

Introduction

Dans certains contextes, pour traquer l'activité SQL d'un process en particulier au sein d'un serveur Sybase, les commandes dbcc sqltext et sp_showplan ne retournent pas les informations adéquates pour diverses raisons.

  • dbcc sqltext peut retourner des caractères bizarres.
  • sp_showplan peut retourner des plans d'exécutions sur des conditions etc... si l'on se trouve dans une boucle ou pour d'autres raisons.

La commande non supportée dbcc pss permet de traquer le texte SQL et l'intégralité du plan d'exécution pour le process que l'on souhaite analyser.

La commande dbcc pss doit être utilisée parcimonieusement, cette dernière pouvant faire tomber un dataserver.

La commande dbcc pss

Pour pouvoir utiliser la commande dbcc pss, le trace flag 3604 doit être activé.

Syntaxe de la commande dbcc pss

dbcc pss (suid, spid, printopt [0|1|2|3|4|5])
suid suid du process | 0
spid spid du process | 0
printopt
  • 0 : sortie standard.
  • 1 : affichage de tous les descripteurs et des arbres d'exécution
  • 2 : affichage de tous les verrous pris par le process dans le fichier de log.

Dans la plupart des cas, c'est l'affichage des arbres d'exécution qui nous intéressera : par conséquent c'est l'option 1 qui sera généralement mise en œuvre.

Exemples d'utilisation de la commande dbcc pss

dbcc pss (0, 0, 1) Lorsque suid et spid valent 0 : les informations sur tous les process sont affichées. Cette option doit être évitée !
dbcc pss (1, 0, 1) Les informations sur tous les process ayant le suid égal à 1 sont affichées. À éviter également.
dbcc pss (0, 16, 1) Les informations sur le process ayant le spid égal à 16 sont affichées.

Exemples pratiques

Dans la sortie de la commande pss, en général, on s'attarde plus particulièrement sur les paragraphes :

  • T-SQL command
  • PPLAN (execution) p_hdrstep plan

Traitement SQL classique

dbcc traceon(3604)
go
dbcc pss (0, 16, 1)
go

(le résultat est volontairement abrégé).

PSS (any state) for suid 1 - spid 16:
 ...
T-SQL command (may be truncated): declare @id int
select @id = 1 while @id < 100000
begin insert into HISTO values (@id,'CGC') select @id = @id +1 end ....
PPLAN (execution) p_hdrstep plan:
QUERY PLAN FOR STATEMENT 1 (at line 1).
STEP 1
The type of query is DECLARE.
QUERY PLAN FOR STATEMENT 2 (at line 2).
STEP 1
The type of query is SELECT.
QUERY PLAN FOR STATEMENT 3 (at line 3).
STEP 1
The type of query is COND.
QUERY PLAN FOR STATEMENT 4 (at line 5).
STEP 1
The type of query is INSERT.
The update mode is direct.
TO TABLE
HISTO
Using I/O Size 2 Kbytes for data pages.
QUERY PLAN FOR STATEMENT 5 (at line 6).
STEP 1
The type of query is SELECT.
QUERY PLAN FOR STATEMENT 6 (at line 0).
STEP 1
The type of query is GOTO.

Procédure stockée

dbcc traceon(3604)
go
dbcc pss (0, 23, 1)
go

(le résultat est volontairement abrégé).

PSS (any state) for suid 1 - spid 23:
 ...
T-SQL command (may be truncated): exec sp_pss ...
PPLAN (execution) p_hdrstep plan:
QUERY PLAN FOR STATEMENT 1 (at line 5).
STEP 1
The type of query is SELECT.
QUERY PLAN FOR STATEMENT 2 (at line 6).
STEP 1
The type of query is COND.
QUERY PLAN FOR STATEMENT 3 (at line 8).
STEP 1
The type of query is SELECT.
FROM TABLE
HISTO
Nested iteration.
Table Scan.
Forward scan.
Positioning at start of table.
Using I/O Size 16 Kbytes for data pages.
With LRU Buffer Replacement Strategy for data pages.
QUERY PLAN FOR STATEMENT 4 (at line 0).
STEP 1
The type of query is GOTO.