SelectEtoile : Base de connaissance SGBD

Posts Tagged 'dbcc'

Comment changer la valeur d'une colonne identity sous SQLServer ?

Voici un exemple de table avec une colonne identity :

CREATE TABLE IDENTITYTABLE(Id int IDENTITY(1,1) NOT NULL,c char(1), i int)
go

 

On insère 10 lignes

insert into IDENTITYTABLE values ('a',1)
go 10
select * from IDENTITYTABLE
go

 

Ce qui donne le résultat attendu :

1    a    1
2    a    1
3    a    1
4    a    1
5    a    1
6    a    1
7    a    1
8    a    1
9    a    1
10    a    1

 

Maintenant, on change la valeur de la prochaine identity :

DBCC CHECKIDENT (IDENTITYTABLE, RESEED, 99)
go

Checking identity information: current identity value '10', current column value '99'.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

 

On insert à nouveau 10 lignes et voici le résultat obtenu :

1    a    1
2    a    1
3    a    1
4    a    1
5    a    1
6    a    1
7    a    1
8    a    1
9    a    1
10    a    1
100    b    2
101    b    2
102    b    2
103    b    2
104    b    2
105    b    2
106    b    2
107    b    2
108    b    2
109    b    2

 

Nous voyons clairement que l'on passe directement de 10 à 100.

 

 

 

Pb de perfs avec la procedure sp_executesql

Symptômes :


                Temps d'exécutions aléatoires des requêtes suite à une mise en PROD
                Non réponses aléatoire de certaines requêtes  

 

Causes  :


                Comportement du sp_executesql (ce n’est pas un bug, c’est une limite d’utilisation)

                Cette proc permet d'exécuter du code mais de garder le plan en cache pour une utilisation ultérieure, le problème c'est que les paramètres qui sont passés dans notre cas modifient beaucoup la sélectivité de la requête du coup le plan réutilisé n'est peut être pas approprié.

 

Mise en évidence :


                        'TRAPPER' la requête applicative via perfmon + le jeu de SET commande
               
                                Example:

                                        set quoted_identifier on
                                        set arithabort off
                                        set numeric_roundabort off
                                        set ansi_warnings on
                                        set ansi_padding on
                                        set ansi_nulls on
                                        set concat_null_yields_null on
                                        set cursor_close_on_commit off
                                        set implicit_transactions off
                                        set language Français
                                        set dateformat dmy
                                        set datefirst 1
                                        set transaction isolation level read committed
                               
                                exec sp_executesql N'SELECT top 110000 this_.IdOrdreEspece as IdOrdreE1_996_0_, this_.CodSens as CodSens996_0_, this_.IdCleRegroupement as IdCleReg3_996_0_,                                                 this_.CodEtablissementTiers as CodEtabl4_996_0_, this_.CodGuichetTiers as CodGuich5_996_0_, this_.CodCompteTiers as CodCompt6_996_0_, this_.CodCleRibTiers as                                                 CodCleRi7_996_0_, this_.DatEffet as DatEffet996_0_, this_.DatCreation as DatCreat9_996_0_, this_.DatModification as DatModi10_996_0_, this_.LoginCreation as LoginCr11_996_0_,                                 this_.LoginModification as LoginMo12_996_0_, this_.MntOrdre as MntOrdre996_0_, this_.TypEtatOrdre as TypEtat14_996_0_, this_.LibDebit as LibDebit996_0_, this_.LibCredit as                                 LibCredit996_0_, this_.LibCommentaire as LibComm17_996_0_, this_.LibBeneficiaire as LibBene18_996_0_, this_.TypOrdre as TypOrdre996_0_, this_.CodCompte as CodCompte996_0_,                                 this_.LibIntitule as LibInti21_996_0_, this_.CodDevise as CodDevise996_0_, this_.LibMessageErreur as LibMess23_996_0_, this_.MntEspeceJCP as MntEspe24_996_0_,                                                 this_.MntEspeceJ1CP as MntEspeceJ25_996_0_, this_.MntPatrimoineJCP as MntPatr26_996_0_, this_.MntPatrimoineJ1CP as MntPatr27_996_0_, this_.MntEspeceJCT as                                                 MntEspe28_996_0_, this_.MntEspeceJ1CT as MntEspeceJ29_996_0_, this_.MntPatrimoineJCT as MntPatr30_996_0_, this_.MntPatrimoineJ1CT as MntPatr31_996_0_ FROM                                         db_ldw.dbo.LUT_V_CarnetOrdreEspece this_ WHERE this_.DatCreation >= @p0 and this_.DatCreation < @p1 and this_.IdCleRegroupement = @p2',N'@p0 datetime,@p1 datetime,@p2                                 bigint',@p0='12/12/2010 00:00:00',@p1='20/12/2010 00:00:00',@p2=4678913124410789674
       
        Attention !!        Par defautl sql management studio met le set arithabort à 'on' alors que l'application le met à 'off', du coup les plans changent dans le procédure cache.
                       
                        1        DBCC FREEPROCCACHE;                (attention en prod ca peut couter cher)
                        2        jouer les SET commandes et la requête sur un petit périmètre (ici c'est le @p2 qui spécifie le carnet d'ordre des clients (petit pour 1 client mais gros pour un ensemble de clients)

  • normalement l'exécution est bonne et le plan est en cache
  • select * from master..syscacheobjects where sql like '%un bout de votre code%'                

                        3        jouer les SET commandes et la requête sur un Gros périmètre

  • La, c'est le drame, ça rame, le plan réutilisé n'est pas adapté pour un gros périmètre (confirmation avec le show plan )

 

Faites l'inverse :

                        1        DBCC FREEPROCCACHE;                (attention en prod ca peut couter cher)
                        2        Jouer les SET commandes et la requête sur un Gros périmètre

  • Normalement l'exécution est bonne et le plan est en cache
  • select * from master..syscacheobjects where sql like '%un bout de votre code%'

     
                        3        Jouer les SET commandes et la requête sur un petit périmètre

  • La, ca dépote, le plan plus 'complet' du gros périmètre est aussi valable pour les petites requêtes.


Erreur à ne pas faire :

Mettre à jour les stats à outrance, nous avons l'impression que ca va mieux, mais ce n'est pas à cause de la mise à jour des stats mais à cause de l'effet de bord :  la mise à jour des stats ayant invalidée les plans d'exécutions du cache pour les requêtes référençant les tables ou index mis à jour.

 

 

Solution :

Pour une fois, il est possible d'utiliser la commande (RECOMPILE) :


                        exec sp_executesql N'SELECT top 110000 this_.IdOrdreEspece as IdOrdreE1_996_0_, this_.CodSens as CodSens996_0_, this_.IdCleRegroupement as IdCleReg3_996_0_,                                                 this_.CodEtablissementTiers as CodEtabl4_996_0_, this_.CodGuichetTiers as CodGuich5_996_0_, this_.CodCompteTiers as CodCompt6_996_0_, this_.CodCleRibTiers as                                                 CodCleRi7_996_0_, this_.DatEffet as DatEffet996_0_, this_.DatCreation as DatCreat9_996_0_, this_.DatModification as DatModi10_996_0_, this_.LoginCreation as LoginCr11_996_0_,                                 this_.LoginModification as LoginMo12_996_0_, this_.MntOrdre as MntOrdre996_0_, this_.TypEtatOrdre as TypEtat14_996_0_, this_.LibDebit as LibDebit996_0_, this_.LibCredit as                                 LibCredit996_0_, this_.LibCommentaire as LibComm17_996_0_, this_.LibBeneficiaire as LibBene18_996_0_, this_.TypOrdre as TypOrdre996_0_, this_.CodCompte as CodCompte996_0_,                                 this_.LibIntitule as LibInti21_996_0_, this_.CodDevise as CodDevise996_0_, this_.LibMessageErreur as LibMess23_996_0_, this_.MntEspeceJCP as MntEspe24_996_0_,                                                 this_.MntEspeceJ1CP as MntEspeceJ25_996_0_, this_.MntPatrimoineJCP as MntPatr26_996_0_, this_.MntPatrimoineJ1CP as MntPatr27_996_0_, this_.MntEspeceJCT as                                                 MntEspe28_996_0_, this_.MntEspeceJ1CT as MntEspeceJ29_996_0_, this_.MntPatrimoineJCT as MntPatr30_996_0_, this_.MntPatrimoineJ1CT as MntPatr31_996_0_ FROM                                         db_ldw.dbo.LUT_V_CarnetOrdreEspece this_ WHERE this_.DatCreation >= @p0 and this_.DatCreation < @p1 and this_.IdCleRegroupement = @p2 OPTION (RECOMPILE) ',N'@p0                         datetime,@p1 datetime,@p2 bigint',@p0='12/12/2010 00:00:00',@p1='20/12/2010 00:00:00',@p2=4678913124410789674
       

Impacts :

 

  • Légère augmentation CPU dû à la recompilation des plans à chaque appels
  • Augmentation du temps de traitement de la requête pour les mêmes raisons

 

 

 Merci Matthieu !!!

Utilisation de quiesce sous SYBASE ASE

QUIESCE :  

Mécanisme permettant de suspendre les écritures sur une base donnée.

1) On suspend les écritures sur la base test_db :
test_db_quiesce = étiquette (tag) identifiant cette opération
hold = type d'opération
to manifeste_file = fichier binaire contenant les informations pour la suite (i.e : umount / mount)
SQL> quiesce database test_db_q1 hold test_db [ for external dump ] [ to "/chemin/vers/manifestFile" ]

Note : On peut vérifer les tags en cours en consultant monOpenDatabases.QuiesceTag ou avec is_quiesce()
exemple :  
SQL> select QuiesceTag from master..monOpenDatabases
C'est également montré par dbcc resource (Section 'QUIESCEDB_INFO')
 
2) Pour libérer la base :  
SQL> quiesce database test_db_quiesce release = libére le verrou étiqueté "test_db_quiesce"

Petit guide des commandes SYBASE ASE

Un petit guide des différentes commandes pour SYBASE ASE


Les commandes système 'dbcc' :

 

dbcc traceon(3604) : affiche à l’écran

dbcc traceon(3605) : redirige dans la log

dbcc traceon(11209) : updatestat renvoie le row count

dbcc traceon(328) : disable the reformatting

dbcc sqltext(spid) : affiche la requete d’une session

dbcc pss(0,spid,0) :

dbcc page(dbname,page_id) : description d’une page problematique, acces a une page et a son contenu

dbcc checkdb(db_name) : contrôle le chaînage des pages, vérifie la cohérence des tables

dbcc checkcatalog : vérifie les références des tables systèmes

dbcc checkalloc(db_name) : identification des erreurs, vérifie l’allocation des pages dans toute la base de données (traitement long)

dbcc checktable(table_name) : decrit les lien entre chaque page d’un table, indique le nombre moyen de ligne par page (used_pgs nombre de page utilisé par une table, et rowent, nombre de ligne d’une table)

dbcc indexalloc(table_name,indid,full) : vérifie l’allocation des pages pour l’index spécifié

dbcc tablealloc(table_name,full,fix) : vérifie/corrige la bonne/mauvaise allocation des pages d’une table avec l’option (fix ou nofix)

dbcc listoam ou dbcc tablealloc (attention verrou): permet d’examiner des extents et des pages d’allocations

dbcc pglinkage : permet de suivre les chaînes de pages.

dbcc prtipage : permet d’afficher une page d’index.

dbcc gettrunc : liste les points de troncature

dbcc settrunc(ltm,’ignore’) : supprime le point de troncature

Dbcc engine (net, show moteur) affiche les tâches liées au moteur

Dbcc engine (net, showall moteur) affiche toutes les tâches

Dbcc engine (net, netengine moteur) affiche les moteurs auquel sont liées les tâches en cours

dbcc dbrepair(database_name,dropdb) : permet de dropper une base quand elle dans un état 'suspect'. Commande non supportée

 

dbcc dbreboot :

dbcc help(dbreboot)

dbreboot (report | reboot | reboot_norecovery | shutdown | shutdown_load | restart | restart_norecovery, <dbname1> [, <dbname2> ...])

Reboot the specified databases.Options

report – Shows a report on the specified database(s).

reboot – Database is shutdown and restarted with recovery.

reboot_norecovery – Database is shutdown and restarted and left in a “not recovered” state. Can be used to add more space.

shutdown – Database is shutdown and left in an unusable state.

shutdown_load – Database is shutdown and left in a state that allows LOAD DATABASE to be done.

restart – Restart and recover a database that has been shutdown.

restart_norecovery – Restart database and left in a “not recovered” state. Good when there are problems with recovery.

DBCC MARKPROCS(DBName) : commande suite à un rechargement d'un dump d'un autre environnement. Il s'agit en fait d'un bug se traduisant par une erreur lors de l'exécution de curseurs (Ex : Table TableName not found !!!)

 

Les commandes systèmes utiles :

 

select lct_admin(« abort »,0,2) ---- 2 pour tempdb, 0 pour tous les process

select (sysstat2 & 57344) from sysobjects where name=’table_name’ :

donne le type de locking :

0 ou 8192 allpages

16384 datapages

32768 datarows

select inttohex() et/ou biginttohex().

select pssinfo(spid, « tempdb_pages ») : donne les pages créées dans tempdb pour un spid

syslogshold : liste des process en tache de fond

 

 

 

 

Les commandes 'set' :

 

set showplan on : decrit le l’arbre d’instruction

set statistics io on : decrit les io memoire et disque

set statistics time on : decrit le temps de reponse (Parse et Execute time : query plan, Execute time : execute query plan)

set noexec on : n’execute pas la requete mais montre le plan avec showplan

set fmtonly :

set rowcount :

set statistics subquerycache on : affiche les acces ios physique et memoire

SET BACKGROUND ON : redirige l'output dans l'error log du data server

set proc_return_status off : supprime le return status

set plan optgoal allrows_oltp (SYBASE ASE 15)

set plan opttimeoutlimit 3

set statistics plancost on

set compatibility_mode on : activation du compatibility mode. C'est à dire activer l'optimiseur 12.5 sur une version 15

set statement_cache off : désactivation du statement cache

set opportunistic_distinct_view off : mis en place lors de la détection d'un bug SYBASE 15 sur la gestion d'un 'select into' vers une table temporaire #

set option show_missing_stats on : affiche les colonnes de la requete qui n'ont pas de statistiques (option de la 15)

set switch on PRINT_OUTPUT_TO_CLIENT (ASE 12.5.4) : permet de rediriger la sortie à l'écran

set switch on print_plan_index_selection (ASE 12.5.4) : équivalent au 302 (dbcc traceon(302), set switch on 302)

 

 

 

Les Procédures Stockées système :

 

sp_helpsort : configuration server (LANG)

sp_deviceattr : modifie l’option dsync

sp_dbcc_faultreport : liste des erreurs par table

sp_dbcc_faultreport(« long »,db_name,table_name) : specifie les erreurs détaillées sur une seule table

sp_showplan spid,null,null,null : montre le plan

sp_countmetadata ‘open objects’ ou ‘open indexes’ : compte les objets et la place memoire necessaire

sp_reportstats : permet d’obtenir les consommations CPU en fonction des logins

sp_clearstats : pour mettre à zéro les stats

sp_etspace : estime l’espace pris par une table

sp_helpsegment, sp_spaceused : donne l’espace d’une table

sp_object_stats "00:01:00", 5, faodb_agence : visualise les 5 tables les plus consommatrices en locks

sp_cachestrategy nom_base,nom_table,nom_index 

sp_cursorinfo :

sp_options 'show' : affiche les options de la session courante

sp_options 'show',null,null,4590 : affiche les options du spid 4590

 

 

Les variables globales :

@@timeticks (durée d’une impulsion en ms)

@@cpu_busy (nombre total d’impulsion CPU)

@@io_busy (impulsion consommées dans les E/S)

@@total_read (nombre total de lecture disque)

@@ total_write (nombre total d’écriture disque)

 

@@nestlevel compte le nombre d'imbrication.

@@identity

 

 

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.

Rechargement base avec modification status

Cet article décrit la procédure pour recharger une base qui est soit suspect, soit dans un état "impossible à loader"

 

Sauvegarde du status de la base

select status from sysdatabase where name = "MABASE"

A garder bien soigneusement

 

Mise à jour du status de la base pour reload :

1> begin tran

2> go

1> update sysdatabase set status = RefStatus where name = "mabase"   -- Refstatus défini ci dessous

2> go

1> commit

2> go

1> shutdown -- ou shutdown with nowait si nécessaire

2> go

 

RefStatus :

  • -32768 en cas de base en état 'suspect' (après le reboot, il faudra supprimer la base et la reconstruire)
  • 32 met la base en état 'à loader' (après reboot, il suffira de recharger la base)

 

Si on a mis le status à -32768 :

Extraire l'ordre de création de la base (create database mabase for load ...)

1> dbcc dbrepair('mabase','dropdb')

2> go

1> create database mabase for load

2> go

1> load database mabase ....

2> go

1> online database mabase

2> go

-- Vérification du status de la base mabase


Si on a mis le status à 32 :

 

  • Après le redémarrage, bien vérifier que la base mabase est dans l'état 'à recharger'.
  • Sinon, il faut redémarrer jusqu'à ce que ce soit le cas
  • Ensuite, on peut recharger la base

 

 

 

 

Guide des Commandes Système SQL-Server

Description des différentes commandes système (ps, dbcc,set....)

Les commandes set :

  • Set statistics time on : statistiques sur les temps d’execution
  • Set statistics xml on : affiche le plan d’exécution graphique
  • Set showplan_text on / set showplan_all on : plan estimé
  • Set statistics profile on : même plan avec les nombres des lignes affectées et le nombre d’exécution de chaque opérateur.
  • set profile on -- affiche le plan réel de la requête
  • set quoted_identifier off
  • set arithabort off
  • set numeric_roundabort off
  • set ansi_warnings on
  • set ansi_padding on
  • set ansi_nulls on
  • set concat_null_yields_null on
  • set cursor_close_on_commit off
  • set implicit_transactions off
  • set language us_english
  • set dateformat mdy
  • set datefirst 7

 

Les procédures stockées :

sp_change_user_login : permet de remapper les user sur des logins après un load database par exemple

Les commandes dbcc :

  • DBCC INDEXDEFRAG ('BaseName','TableName','IndexName') : défragmentation d'un index
  • dbcc show_statistics (‘ma_table’, ‘mon_index’) : affiche les statistiques de l'index
  • dbcc freeproccache : vide le procedure cache
  • dbcc dropcleanbuffers : vide les données du cache déjà écrites sur disque
  • dbcc sqlperf(logspace) : visualisation du remplissage du journal de transaction des différentes bases
  • dbcc opentran() : visualisation des transactions en cour
  • dbcc sqlperf ('sys.dm_os_wait_stats',CLEAR);         : permet de réinitialiser les compteurs de stats OS_WAIT
  • dbcc showcontig('tablename')  : affiche des info sur la table dont la fragmentation
  • dbcc traceon(1204,-1) : active l'écriture de l'information des deadlocks dans le fichier errorlog (-1 le définit au niveau global)
  • dbcc tracestatus(-1) : affiche toutes les traces du serveur (sans le -1, il affiche les traces de la session).
  • dbcc inputbuffer (SPID) : renvoi le code SQL exécute par le SPID spécifié
  • DBCC MEMORYSTATUS : très partique en cas de problème (lien vers support)
  • dbcc traceon (3605,1204,1222,1205,-1) : Mise en place des traces des deadlock dans l'errorlog

 

Les tables / vues systèmes :

  • select * from sys.dm_os_latch_stats order by 3 desc
  • select * from sys.dm_os_wait_stats order by waiting_tasks_count desc
  • SELECT SUM (pages_allocated_count * page_size_in_bytes) as 'Bytes Used', type FROM sys.dm_os_memory_objects GROUP BY type ORDER BY 1 DESC;
  • select * from sys.dm_os_performance_counters
  • seelct * from sys.dm_exec_requests : infos sur les requêtes en cours d'execution

 

Les procédures systeme :

sp_updatestats :  permet de recompiler les statistiques d'une tables, d'un indexes... On peut aussi lancer ce genre de commande "UPDATE STATISTICS Person.Address WITH FULLSCAN"

 

Désactivation de la trace par défaut :

  • sp_configure ‘show advanced options’,1
  • reconfigure with override
  • sp_configure
  • sp_configure ‘default trace enabled’,0
  • reconfigure with override
  • sp_configure

 

La fonction serverproperty :

select CAST(serverproperty('EngineEdition') AS char(1))
-- EngineEdition
-- 1 : Personnal
-- 2 : Standard
-- 3 : Enterprise
-- 4 : Express
-- 5 : Azure
select parsename(CAST(serverproperty('Productversion') AS sysname), 4)
-- Productversion
-- 8 : 2000
-- 9 : 2005
-- 10 : 2008
-- 11 : 2011
select parsename(CAST(serverproperty('Productversion') AS sysname), 3)
-- 00 : 2008
-- 50 : 2008 R2