Reprise d’activité étape par étapes : le poster de Paul Randal

Paul Randal est très connu dans la communauté SQL Server puisqu’il publie très régulièrement des détails sur le fonctionnement interne de SQL Server, dont certains ne sont pas documentés, à travers son site SQLSkills.com (son blog et ceux d’autres experts sont référencés en bas à droite de la page).

Paul Randal vient donc de mettre à la disposition de la communauté un poster qui détaille les étapes de la reprise d’activité par un diagramme décisionnel.

Ce diagramme contient certaines étapes qui référencent un numéro, et chaque numéro correspond à un article publié par Paul Randal. Ils sont tous référencés sur cette page.

Toujours bon à avoir sous la main !

Cadeau de Noël de Kalen Delaney : un livre sur le verrouillage, le blocage et le versionnement de ligne

Le site de RedGate, créé par Bard Mc Gehee, publie depuis quelques années déjà de nombreux ouvrages, dont certains abordent des thèmes que l’on voit rarement explorés en détails, parfois même par les mêmes auteurs chez d’autres éditeurs.

Vous n’avez plus grand chose à vous mettre sous la dent après avoir lu comment fonctionne l’optimiseur de requêtes ? On ne peut pas déclarer cela sérieusement avec la sortie récente de SQL Server 2012, et de ses nombreuses innovations ou améliorations :)

Malgré toutes ces nouveautés à décortiquer, les fondamentaux du fonctionnement de SQL Server demeurent. Donc pour Noël, Kalen Delaney nous fait le cadeau de son dernier ouvrage, SQL Server Concurrency: Locking, Blocking and Row Versioning, et que l’on peut déjà télécharger gratuitement en PDF (d’habitude RedGate ne le permet qu’après quelques mois).

Bonne lecture de Noël à tous !

Trouver et corriger les index uniques (non filtrés) sans contrainte

Exception faite des index unique filtrées, il n’y aucune différence en termes de performances entre l’ajout d’un index unique, et l’ajout d’une contrainte d’unicité (qui est elle-même supportée par un index unique).
La contrainte d’unicité permet de signifier que l’intégrité des données est le but, alors que le but premier d’un index est l’accélération des requêtes.
La majorité des index unique étant ajoutés pour renforcer l’intégrité des données, voici donc un script pour trouver tous les index unique non filtrés qui n’ont pas de contrainte d’unicité.

Lire la suite

Rafraîchir les métadonnées des modules SQL

Après un certain temps de vie, ou après que la structure d’une base de données de développement ait été copiée depuis celle de production puis modifiée, il arrive que lorsqu’on recherche les dépendances d’un objet, dans les tables systèmes ou en choisissant l’option Dépendances du menu contextuel proposé par le clic-droit sur un module SQL (une procédure stockée, une fonction, un trigger, ou une vue définis par l’utilisateur), les données ou l’affichage soient incorrects, bien que l’on soit pourtant certain que l’objet que l’on vient de modifier dépend bien d’un autre.
Voici comment remédier à ce désagrément …
Lire la suite

Connaître la longueur maximale des lignes des tables, et calculs relatifs

Il est intéressant de connaître la longueur maximale qui peut être stockée par une table pour tenter de prévoir la taille d’une base de données lorsque le système sera arrivé à maturité.
Voici une petite requête pour nous y aider sous SQL Server 2005 et 2008…
Lire la suite

Une procédure stockée pour trouver sous quel compte de service s’exécute une instance SQL Server

Voici une petite procédure stockée qui affiche dans la console de SSMS le nom du compte de service sous lequel s’exécute une instance SQL Server :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
CREATE PROCEDURE spGetSQLServerServiceAccountName
AS
BEGIN
  DECLARE @nomInstance SYSNAME,
    @nomMachine SYSNAME
   
  SELECT @nomInstance = CAST(SERVERPROPERTY('InstanceName') AS SYSNAME),
    @nomMachine = @@SERVERNAME
 
  DECLARE @cle NVARCHAR(256),
    @compteDeService NVARCHAR(128)
   
  SELECT @cle = CASE  
      WHEN @nomInstance IS NULL THEN N'SYSTEM\CurrentControlSet\Services\MSSQLServer'
      ELSE N'SYSTEM\CurrentControlSet\Services\MSSQL$' + @nomInstance
    END
 
  EXEC master.dbo.xp_regread N'HKEY_LOCAL_MACHINE',
       @cle,
       N'ObjectName',
       @compteDeService OUTPUT,
       N'no_output'
       
  PRINT 'Le compte de service est ' + @compteDeService
END

ElSuket

Connaître les caractéristiques d’une trace SQL Profiler

Sur un serveur à la configuration sous-dimensionnée que je surveille de temps en temps, j’ai trouvé une trace SQL Profiler en cours d’exécution.
J’ai voulu en savoir plus sur les caractéristiques de cette trace.
Voici la requête :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
-------------------------------
-- Nicolas SOUQUET - 16/06/2010
-------------------------------
SELECT    C.name
    , FI.value
    , T.start_time
    , T.last_event_time
    , T.event_count
    , S.login_name
    , S.session_id
    , 'EXEC sp_trace_setstatus ' + CAST(T.id AS varchar(10)) + ', 0' AS stop_trace_stmt
FROM    sys.traces AS T
CROSS APPLY  sys.fn_trace_getfilterinfo (T.id) AS FI
INNER JOIN  sys.trace_columns AS C ON FI.columnid = C.trace_column_id
INNER JOIN  sys.dm_exec_sessions AS S ON S.session_id = T.reader_spid

On sait tout de suite quel filtres ont été utilisés à l’aide des deux premières colonnes.
La dernière colonne contient l’instruction qui permet d’arrêter la trace : le développeur a donc toujours ses résultats.

Pour savoir comment créer une trace côté serveur, c’est par ici

Bon traçage !

ElSüket