Posts Tagged 'dbcc'
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.
Articles tagged
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 !!!
Articles tagged
-
-
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"
Articles tagged
-
-
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
Articles tagged
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]
Articles tagged
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.
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
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