imageBonjour à tous,

Les Techdays 2012 c’est fini pour cette année.

Ce fut un excellent cru, je n’ai pas encore les chiffres mais je pense qu’on va encore faire péter un score.

De ce que j’ai vu, les sessions étaient exceptionnellement bien pleines les 2 premiers jours, tout du moins toutes celles auxquelles j’ai participées / animées.

Bon le 3ème jour, la fatigue se fait sentir Sourire et les salles se remplissaient moins vite.

J’ai d’ailleurs eu la chance d’animer la dernière session du dernier jour au dernier créneau en Amphi bleu (soit le plus grand amphi après l’amphi plénière) et nous étions AU BAS MOT …. 20 (WOOOOOT !!) Et encore je compte pas la régie Rire 

Bref bref, je parle je parle, mais sans plus attendre (et en attendant les web casts) voici les Powerpoints et les démos de mes 5 sessions :

De A à Z: Accès aux données avec Entity Framework 4.2 et publication en OData

J’ai eu la chance d’animer cette session avec Stéphanie Hertrich qui proposait une journée complète autour d’une application à concevoir de l’architecture à la livraison finale.

Vous trouverez d’ailleurs sur son blog l’ensemble des slides de tout son parcours (avec les miens donc)

Cette session aborde 2 aspects liés à la couche de données :

  • Le stockage et l’accès aux données côté serveur avec l’utilisation d’EF 4.3 Code First
  • La publication des données sous forme de service pour les rendre disponibles aux applications clientes grâce à ODATA et WCF Data Services

Et les démos associées : Techdays 2012 EF 4.3 Odata

Publication des données publiques (Open Data), WCF Data Services, OData

Session encore une fois axée sur le partage d’informations, que j’ai co-animée avec Sébastien Brasseur et Philippe Béraud.

Ici on parle plus d’Open Data et je suis intervenu sur la mise en place d’un serveur WCF Data Services.

Ici ce qui a été techniquement sympa c’est que je vous propose dans les démos d’aborder quelques nouveautés apportées par les spécifications OData V3 et déjà implémentées (bon pas toutes, c’est vrai) dans WCF Data Services.

Vous trouverez dans les démos l’utilisation du type géographique ou encore du système d’annotation :

Et les démos associées : Open Data et OData

SQL Azure Data Sync ou comment synchroniser vos données avec le Cloud

La session où vraiment je me suis lâché Sourire

Dernière session, dernier jour, les gens qui sont là sont “encore” motivés, alors on va envoyer du bon code bien lourd Rire

Bon j’en ai vu un ou deux dormir au fond ! (mais on leur en voudra pas, ambiance feutrée, amphi bleu tout ça tout ça …)

Et donc sans plus attendre :

Et les démos qui vont avec bien sûr : SQL Azure Sync Data et Sync Framework

Utilisation avancée de la base de donnée locale SQL CE dans Windows Phone 7.5

Bon là faut bien être clair, j’ai sorti “accompagné” mon pote Ben Sourire Il a fait une super session sur le sujet où je suis juste intervenu pour répondre à quelques questions et passer une démo de synchronisation de données avec WP7. 

On parle ici de SQL Server CE pour WP7, de Linq to SQL for Mango ou encore de Code First !

Pour les démos, je laisse Benoit les relayer. Quant à moi je vous propose la démo de synchronisation de WP7 avec l’utilisation de la toolkit Sync Framework V4 : WP7 Synchronisation Sync FX 4

Pour la petite note “humour inside” : J’ai préparé cette démo… 30 minutes avant la session, car on pensait qu’on aurait pas assez de choses à dire !! L’erreur !!! j’ai même pas eu le temps de la jouer jusqu’au bout Rire

Les Experts SQL Server

Voici le résumé (tiré du site des techdays) de la session

Au cours de cette session, vous n’aurez qu’un seul but : coller les experts Microsoft sur SQL Server 2012 ! Nous avons réuni pour vous tous les experts du domaine pour répondre à vos questions, venez nombreux !”

Et oui nous étions tous sur scènes pour répondre à vos questions ! Donc pas de slides ni démos Sourire

Et bien on peut dire que vous avez des questions d’un sacré niveau !! Nous avons tous été surpris par la pertinence des questions et la connaissance de chacun d’entre vous. Comme quoi SQL Server devient une plateforme vraiment ancrée (enfin tout du moins chez les personnes ayant assistées à la session Clignement d'œil)

Sinon j’ai une photo de Philippe Geiger à vous proposer, juste pour vous montrer le beau monde qu’il y avait !

Vous aurez bien entendu reconnu la tête qui dépasse ? Sourire

Voilà voilà !

Un bon Techdays 2012 pour ma part, la tête dans le guidon durant 3 jours complets !

Et comme chaque année, on dit qu’on y reviendra pas et chaque année on remet ça ! Alors à l’année prochaine Clignement d'œil

L’annonce : http://www.zdnet.com/blog/microsoft/microsofts-sql-server-2012-to-launch-on-march-7/11718

Petite astuce aujourd’hui, si vous utilisez des requêtes Like et que vous avez un underscore dans le terme recherché.

Mettre un undescore dans une recherche signifie :

“Toutes chaines comportant à cet endroit là, n’importe quel caractères”

Ce qui donne :

image

Notez que j’ai toutes les lignes contenant 79 “quelque chose” (79_3 mais aussi 790_2, 791_2 etc….)

Hors dans mon cas, je souhaite que mon “_” soit pris non pas comme un caractère spécial, mais comme un un “simple” caractère.

A ce moment là, remplacez le “_” par “[_]” Sourire

image

Et voilà je n’ai plus que 4 lignes !

Autre méthode : Utilisez le mot clé ESCAPE qui va spécifier que le caractère après celui désigné comme ESCAPE, ne doit pas être pris en compte comme un caractère spécial :

image

Et voilou,

/LIKE ! Sourire

Bonjour à tous;

Les journées SQL SERVER 2012, qui ont eu lieu dans les locaux de Microsoft à PARIS, sont terminés et l’ensemble des webcasts des sessions sont en ligne.

Malheureusement, comme dans tout monde non parfait, les webcasts n’ont pas TOUS été bien catégorisés sur le site ShowCase Microsoft. Ok, Evidemment la mienne est perdue dans une catégorie où elle n’a rien à faire bien sûr Triste

Bref…

Si vous voulez voir TOUTES les vidéos de la journée SQL SERVER, le mieux est de directement faire une recherche sur les mots clé “Journées Sql Server”.

Voici le lien direct de l’ensemble des vidéos : http://www.microsoft.com/fr-fr/showcase/Search.aspx?phrase=journ%c3%a9es+sql+server

Voici le lien direct de ma vidéo : http://www.microsoft.com/fr-fr/showcase/details.aspx?uuid=9a331e1f-4ab8-4e6d-82e6-2790debac36e

Et pour les pressés, la vidéo directement Sourire :


 

Voilà bon visionnage !!

Les inscriptions sont ouvertes aux Journées SQL Server 2012 (édition 2011, ok je vous l’accorde !)

clip_image002

Rejoignez la communauté des professionnels SQL Server !

clip_image006Les experts francophones de SQL Server, les MVP (Most Valuable Professionnal) et les MCM (Microsoft Certified Master) se réunissent à Paris pour 2 jours de conférences entièrement gratuits.

Vous pourrez découvrir les nouvelles fonctionnalités de SQL Server 2012 mais aussi assister à des sessions sur des sujets pointus au travers d’un parcours consacré au moteur de base de données, d’un autre consacré à la Business Intelligence et enfin un parcours dédié aux appliances SQL Server.

Au total, ce ne sont pas moins de 23 sessions qui vous attendent sur AlwaysOn, Power View, SSIS Server, les index colonnes, SQL Server Data Tools, SQL Azure, BISM, les performances, la sécurité, etc.

Inscrivez-vous dès maintenant

Cet événement est organisé par la communauté SQL : le groupe des utilisateurs francophones (GUSS) et les MVP, avec l’appui et la participation de Microsoft et du sponsor Platinum : HP

image clip_image008 clip_image010

Tout au long des journées, vous pourrez également poser toutes vos questions à l’espace rencontre à nos différents sponsors éditeurs, presse ou SSII. Les speakers sont également à votre disposition.

Cet événement aura lieu les

12 et 13 décembre
au
Centre de conférences Microsoft

41 quai du Président Roosevelt
Issy-les-Moulineaux

clip_image012

GUSS est affilié au PASS (Professional Association for SQL Server), leader des communautés SQL Server à travers le monde. Nous les remercions pour leur soutien dans l’organisation de cet événement.

J’ai récemment eu un exercice à effectuer sur la machine d’un collègue

“J’ai un backup, mais je n’ai que visual studio installé, pas de Sql Server Management Studio ni rien et faut restorer la base de données”

Ok, donc :

  1. Pas de SSMS c’est noté
  2. Obligation de faire un MOVE des fichiers du backup
  3. Pas de connaissance des fichiers logiques contenus dans le backup

Pour lancer la restauration, il me faut pouvoir exécuter du script SQL. Je décide donc de partir sur du SqlCMD

Il me faut connaitre la liste des fichiers à restaurer contenus dans le backup :

   1: restore filelistonly  from disk = 'C:\tmp\AdventureWorks2008R2.bak'

Ce qui donne en sqlcmd Smile

sqlcmd

Bien maintenant que j’ai récupéré les fichiers logiques, y’a plus qu’à éxécuter la phase de restauration:

   1: RESTORE DATABASE [AdventureWorks2008R2] 

   2:     FROM  DISK = N'C:\Tmp\AdventureWorks2008R2.bak' WITH  FILE = 1,  

   3:     MOVE N'AdventureWorks2008R2_Data' TO N'C:\DATA\AdventureWorks2008R2_Data.mdf',  

   4:     MOVE N'AdventureWorks2008R2_Log' TO N'C:\DATA\AdventureWorks2008R2_Log.ldf',  

   5:     MOVE N'FileStreamDocuments2008R2' TO N'C:\DATA\Documents2008R2'

   6: GO

Et ce qui donne en SQL CMD :

image

Et voilà une base restaurée convenablement Smile

Il existe pas mal d’articles sur le nouveau type CLR HierarchyID. Voici quelques pointeurs d’ailleurs :

Par contre, il y a peu d’informations sur la façon de faire pour migrer une table contenant par exemple un Identifiant et son parent (EmployeeID et ManagerID) vers une table supportant un type HierarchyID.

J’ai trouvé quelques essais, qui se sont trouvés être … faux (c’est balot !!)

Le principe finalement, c’est de “construire” Le hierarchyID à partir des données de la table d’origine.

On va éviter de passer par des curseurs, trop lent, et on va utiliser 2 choses:

  1. Le Row_Number() qui va nous être utile pour numéroter chaque filleul d’un manager : Supposons que j’ai un manager avec 4 filleuls, je veux que chaque filleul soit noté de 1 à 4
  2. Deux CTE : la première va nous permettre de faire le calcul précédent. La deuxième va créer le hierarchyID pour chaque employé (recursivement) grace aux informations de la première Smile

Du coup on est capable de générer un hierarchyID (correct cette fois ci Smile with tongue out) avec … une seule requete :

   1: USE AdventureWorks

   2:  

   3: -- Construction d'une table temporarire permettant de 

   4: -- connaitre le numéro de chaque enfant d'un manager

   5: -- Pour un managerID = 3, on voit qu'il y a 7 enfants par exemple, 

   6: -- numéroté de 1 à 7

   7: WITH employees (EmployeeID, ManagerID, Num) AS

   8: (

   9:     SELECT 

  10:         EmployeeID, 

  11:         ManagerID,

  12:         ROW_NUMBER() OVER 

  13:             (PARTITION BY ManagerID ORDER BY ManagerID) 

  14:     FROM HumanResources.Employee

  15: ), 

  16: hierarchies(orgnode, EmployeeID) 

  17: AS (

  18:     -- Récupération des managers de plus haut 

  19:     -- niveau (managerId == null)

  20:     SELECT hierarchyid::GetRoot() AS OrgNode, EmployeeID 

  21:     FROM employees AS C 

  22:     WHERE ManagerID IS NULL 

  23:     UNION ALL 

  24:     -- Récursivité sur l'ensemble des filleuls

  25:     SELECT 

  26:     -- Construction du hierarchyId

  27:     -- On est au niveau inférieur, donc :

  28:     -- Concaténation du orgnode du parent 

  29:     -- + numéro de l'enfant actuel

  30:     CAST(p.orgnode.ToString() + 

  31:     CAST(C.Num AS varchar(30)) + '/' AS hierarchyid), 

  32:     C.EmployeeID

  33:     FROM employees AS C 

  34:     JOIN hierarchies AS p ON C.ManagerID = P.EmployeeID 

  35: )

  36: -- Le select pour vérifier le résultat

  37: -- qui pourrait servir à faire un insert ou update

  38: -- de la table de destination

  39: SELECT orgnode.ToString(), * FROM hierarchies

Lorsque vous transférez une base de données d’un serveur à un autre, il y a souvent quelque chose que l’on oublie, c’est le transfert des logins associés, déclarés au niveau de votre Serveur SQL SERVER 2008.

Note : Vive les Contained Databases, qui feront leur apparition avec la prochaine version de SQL SERVER (nom de code DENALI)

Recréer un login manuellement

Pour remédier à ce problème, il suffit, avant de restaurer / rattacher votre base, de bien re créer le ou les logins sur le serveur cible:

  1. Si c’est un login de type Windows, pas de problème.
  2. Si c’est un login SQL, il vous faut réinitialiser le mot de passe, si vous ne le connaissez pas (potentiellement bien problématique).

Une fois le login (re) créé et la base de donnée remontée, il ne reste plus qu’à ré associer le login à l’utilisateur via la commande simple :

Alter User Joe With Login=Joe

Première question qui vient à l’esprit : Pourquoi, alors que mon login est créé AVANT la restauration de la base, celui ci n’est pas automatiquement associé à mon utilisateur ?

Eh bien tout simplement, car l’identifiant interne du login n’est plus le même. Cet identifiant est appellé un SID :

Voici le SID de mon login Joe sur le serveur source , suivi du SID du nouveau Joe, créé sur le serveur cible, récupéré via la requête suivante :

SELECT    p.sid, p.name FROM sys.server_principals p
WHERE p.name = ‘Joe’

Serveur Source :

sid                                                                             name

0x3D3DC05AFCC6774BA1DC1249E3F12C8D                   Joe

Serveur Cible;

sid                                                                             name

0x2905B53C3B7EB84A8BA42BFDF335471F                      Joe

Comment faire si vous voulez restaurer le Login AVEC le SID, et potentiellement ne pas avoir à recréer un mot de passe ?

Recréer un login avec son SID associé

Le problème concernant les SIDs et les Mots de passes, c’est que tout ça c’est du binaire, et qu’il nous faut l’hexadécimal correspondant.

Pour cela, deux méthodes :

  1. Utiliser les fonctionalités XQuery depuis SQL SERVER 2005 (issu du blog SQL Server Engine Tips)
  2. Utiliser une procédure stockée sp_hexadecimal, fourni par le support SQL SERVER (issu d’une KB du support )

Je vous mets les deux méthodes :

DECLARE @SID_varbinary varbinary (85)
DECLARE @SID_string1 varchar (514)
DECLARE @SID_string2 varchar (514)

SELECT @SID_varbinary =  p.sid
FROM sys.server_principals p
LEFT JOIN sys.syslogins l
ON ( l.name = p.name ) WHERE p.type IN ( ‘S’, ‘G’, ‘U’ ) AND p.name = ‘Joe’

– méthode 1 : XQuery
SELECT  @SID_string2 = ’0x’ + cast( » as xml).value(‘xs:hexBinary(sql:variable(« @SID_varbinary ») )’, ‘varchar(max)’);

– méthode 2 : Utilisation de la proc stock
EXEC sp_hexadecimal @SID_varbinary, @SID_string1 OUT

SELECT @SID_string1, @SID_string2

Les deux méthodes retournent (heuresement) le même résultat.

Ma préférence pour la méthode xquery qui ne requiert pas de créer une procédure stockée au préalable.

Il ne reste plus qu’à générer le script de création du login :

– Transfert du login

DECLARE @login_name sysname = ‘Joe’;

DECLARE @name sysname
DECLARE @type varchar (1)
DECLARE @password_binary  varbinary (MAX)
DECLARE @password_string  varchar (MAX)
DECLARE @sid_binary varbinary (MAX)
DECLARE @sid_string varchar (MAX)

DECLARE @scriptCreateLogin  varchar(MAX)

SELECT    @sid_binary = p.sid, @name =    p.name, @type = p.type
FROM sys.server_principals p
WHERE p.type IN ( ‘S’, ‘G’, ‘U’ ) AND p.name = @login_name

– Génération du script
SET @scriptCreateLogin = ‘– Login: ‘ + @name

IF (@type IN ( ‘G’, ‘U’))
BEGIN – Authentification NT
SET @scriptCreateLogin = ‘CREATE LOGIN ‘ + QUOTENAME( @name ) + ‘ FROM WINDOWS’
END

ELSE
BEGIN – Authentification SQL Server
              — Récupération du password encrypté
SET @password_binary = CAST( LOGINPROPERTY( @name, ‘PasswordHash’ ) AS varbinary (MAX) )

Récupération du password et du SID sous forme héxadécimal
SELECT  @password_string = ’0x’ + cast( » as xml).value(‘xs:hexBinary(sql:variable(« @password_binary ») )’, ‘varchar(max)’);
SELECT  @sid_string = ’0x’ + cast( » as xml).value(‘xs:hexBinary(sql:variable(« @sid_binary ») )’, ‘varchar(max)’);

– Génération du script

SET @scriptCreateLogin = ‘CREATE LOGIN ‘ + QUOTENAME( @name ) + ‘ WITH PASSWORD = ‘ + @password_string + ‘ HASHED, SID = ‘ + @sid_string
END

PRINT @scriptCreateLogin

 

Le résultat sous forme de script à éxécuter coté nouveau serveur :

CREATE LOGIN [Joe] WITH
PASSWORD = 0x0100936F8D718E15C2E862CF41023DC9E01F6B7328B68BE24827 HASHED,
SID = 0x3D3DC05AFCC6774BA1DC1249E3F12C8D

Lors de la restauration de la base de données, le login de Joe sera automatiquement affecté à l’utilisateur Joe de la base de données Smile

Bon scripts de logins !

Le problème :

Avec SQL SERVER 2008, vous avez la possibilité de lever des alertes et notifier (par mail par exemple) un opérateur de l’alerte.

J’ai eu un problème aujourd’hui : Des alertes non levées, et d’autres levées (grosso modo, je ne recevais pas de mail, et le compteur de l’alerte indiquant le nombre de ses occurences restant désèspérement à 0)

Une alerte correctement configurée :

Voici une copie d’écran d’une alerte permettant de notifier l’opérateur lorsqu’un fichier de log est full :

image

Lorsqu’un journal de log est rempli, voici l’erreur levée par SQL SERVER :

image

Notez 2 informations importantes dans notre exemple:

  • Le numéro du message : 9002 (L’alerte est basée sur ce numéro)
  • La Sévérité : 17

Je reçois par la suite mon superbe mail Smile

image

Ca, c’est l’alerte qui fonctionne … bien !

Avant de vous exposer l’alerte qui ne fonctionne pas, un petit rappel sur les sévérités dans SQL SERVER :

Les sévérités :

image

La sévérité est croissante : Grosso modo, plus on croit dans la sévérité, plus on est mal Smile

Mon alerte en erreur :

Sur ce, je rajoute une alerte sur mon serveur SQL, capable de ramener les erreurs de niveau de sévérité 16 :

image

Configuration identique mais résultat … différent ! Aucune levée de l’alerte, aucun mail, bref, pas bon…

La Raison

La raison est simple : Pour pouvoir déclencher une alerte, il faut que l’erreur soit loguée par SQL SERVER !

Et dans notre cas, les erreurs de sévérité 16 NE SONT PAS (toutes) loguées ..

Pour connaitre les messages logués ou non, il existe une vue système interrogeable : sys.messages

Pour vérifier cela, exécutez cette requête :

SELECT * FROM sys.messages
WHERE language_id = 1036
ORDER BY severity

Nous avons une colonne permettant d’identifier les erreurs loguées ou non (colonne is_event_logged)

image

On remarque par exemple que l’erreur 6531 de sévérité 16 n’est pas loguée.

A contrario, l’erreur 6532 de sévérité 16 est, elle, loguée.

Alors comment faire de mon cas ?

 

La résolution

Il existe une procédure stockée système permettant de changer le comportement de SQL SERVER vis à vis d’une erreur, en renseignant dans le catalogue sys.messages la colonne is_event_logged du message ciblé :

sp_altermessage 2812, ‘WITH_LOG’, ‘true’;

Dans ce cas, l’erreur 2812 va maintenant être loguée et donc remontée via mon alerte !

 

Pour aller plus loin RAISERROR

Qu’en est il pour les erreurs utilisateurs ?

Un exemple de la levée d’une exception utilisateur :

RAISERROR (
  The current database ID is:%d, the database name is: %s.’,
  10, — Severity.
  1, — State.
  @DBID, — First substitution argument.
  @DBNAME); — Second substitution argument.

Lors d’un raise error, l’erreur est numérotée 5000.

image

Cette erreur n’est pas loguée (une requête sur sys.messages nous indique que cette erreur n’existe pas dans le catalogue)

Il suffit donc de RAJOUTER dans sys.messages l’erreur avec un numéro que vous choisissez via la procédure stockée système sp_addmessage (et ne pas oublier de rajouter l’option “with_log” Smile :

EXECUTE sp_addmessage
@msgnum =50005,
@severity = 16,
@with_log = ‘TRUE’,
@msgtext = N’The current database ID is: %d, the database name is: %s.’;

Une fois le message déclaré, y’a plus qu’à !

GO DECLARE @DBID INT;
SET @DBID = DB_ID();

DECLARE @DBNAME NVARCHAR(128);
SET @DBNAME = DB_NAME();

RAISERROR (50005, 16, 1, @DBID, @DBNAME);

Et hop, mon mail arrive (vu que je logue toutes les erreurs de niveau 16)  Smile

image

(Notez l’heure, rien de particulier hein, juste que Master Chef va commencer, faut que je finisse Open-mouthed smile)

Vous pouvez aussi biensur supprimer un message de sys.messages via la procédure stockée sp_dropmessage :

EXECUTE sp_dropmessage 50005;

Voilà, bon log, bonnes alertes !

,

Aujourd’hui petite précision sur les IO (vous savez ce qui préocupe les DBAs toute la sainte journée Smile)

Il existe deux types d’accés :

  1. Physical IO : Accès au disque pour récupérer les pages de données.
    • Une fois récupérée la page est placée dans le Buffer Cache
  2. Logical IO : Accès direct à une page de données situé dans le Buffer Cache

Comment améliorer les performances ? En minimisant au possible les Physical IO.

  • Avoir assez de mémoire (ouais c’est évident, mais faut bien le préciser Winking smile)
  • Optimiser l’architecture physique et logique de votre base (les index !)
  • Optimiser vos requêtes pour éviter de trop avoir besoin de récupérer des page sur le disque

Comment faire pour “voir” les IO générés ?

 

SET STATISTICS IO ON

image

Ok, il fait 1240 Logical Read, pour 2 Physical Read

Vous noterez que Môôssieur ne récupère QUE 2 pages sur le disque alors que j’ai au préalable vidé les Buffers Cache.

Et bien il faut savoir que SQL SERVER utilise une technique de lecture anticipée (lors de la compilation de la requête) pour engranger des données en mémoire “Juste Au Cas Où” : Ce sont les Read-Ahead Reads

Je ré exécute cette requête, dans la foulée :

image

Là on remarque que SQL SERVER effectue bien ses lectures directement dans le cache SQL SERVER.

Que pouvez vous faire contre les Physical IO ?

Nous venons de voir que les Physical IO sont ceux qui coutent le plus cher. Mais que pouvez y faire ?

Et bien … RIEN ! (oui c’est balot)

Le seul moyen de réduire les IO Physical, c’est d’améliorer les IO Logical, enfin bref d’améliorer les IO en général !

Meilleurs requêtes, Plus de ram, Meilleurs indexs.

Quelles sont les outils d’investigations:

 

Profiler SQL

image

Notez que le profiler ne différencie pas les types d’IO (Physical, Logical, Read Ahead)

Vous avez donc une donnée qui représente les Logical Read.

 

DMV

Quelques DMV peuvent vous aider. Elles sont en général basées sur sys.sysprocesses :

Select db_name(sp.dbid) as ‘Database’
,cpu,physical_io
,[program_name]
,sql_handle,st.text
from sys.sysprocesses sp
cross apply
sys.dm_exec_sql_text(sp.sql_handle) st
where db_name(sp.dbid) not in (‘master’,'model’,'tempdb’,'msdb’)
order by cpu desc

 

Compteur de performances

Les compteurs relevés sont :

  • % Durée d’inactivité
  • % Temps d’écriture
  • % Temps de lecture

D’une manière générale, le % d’inactivité doit être toujours le plus proche de 100%

A contrario, les % d’écriture et de lecture doivent être le plus proche de 0%

image

Ici on remarque que le Disque est soumis à rude épreuve, même s’il tient le choc (Les pics de durée d’inactivité n’atteignent pas 0% sur une longue durée)

 

Quoi d’autres ?

Il existe d’autres éléments, qui sont plus ou moins en rapport avec les IO :

  • Amélioration des Index
  • Fragmentation des index
  • Pression mémoire
  • Amélioration des procédures stockées et requêtes
  • Nouveaux index etc …

Un véritable sacérdoce ces IO !! Smile