Mise en œuvre de dbcc checkstorage

Introduction

La commande dbcc checkstorage vérifie l'homogénéité d'une base de données dans son intégralité, y compris les pages non utilisées.

Elle verrouille de manière minimale les tables durant le processus, ce qui autorise une activité concurrente.

Son temps d'exécution est dépendant de la taille de la base de données. Il n'est pas affecté par le paramètre de remplissage de la base de données

Elle nécessite l'installation d'une base de données technique : dbccdb

Étapes de la mise en œuvre de la commande dbcc checkstorage

La mise en œuvre de la commande dbcc checkstorage nécessite plusieurs étapes fondamentales dont l'installation de la base dbccdb. Ces étapes sont au nombre de 6 et sont rappelées ci-dessous :

  • étude du plan de ressources pour l'installation de dbccdb
  • installation de la base de données dbccdb
  • configuration d'un cache pour dbccdb
  • ajout de segments workspaces pour la base dbccdb
  • spécification des attributs de la base de données cible pour le lancement de la commande dbcc checkstorage
  • évaluation de l'installation

Étude du plan de ressources requises pour dbccdb

Les ressources requises pour la commande dbcc checkstorage dépendent :

  • de la taille des bases de données à vérifier
  • du nombre de base de données à vérifier de manière concurrente

Parmi les ressources qui doivent être configurées :

  • les devices
  • les espaces de travail
  • les caches nommés
  • les worker processes

Une procédure système, sp_plan_dbccdb permet d'obtenir des recommandations sur les ressources évoquées précédemment.

exec sp_plan_dbccdb [dbname]
exec sp_plan_dbccdbRecommended size for dbccdb database is 16MB (data = 14MB, log = 2MB).
dbccdb database already exists with size 12MB.
Recommended values for workspace size, cache size and process count are:

dbname                            scan ws    text ws    cache    process
                                                                 count

master                            96K        48K        640K     1
tempdb                            192K       48K        1280K    2
model                             64K        48K        640K     1
dbtest                            192K       48K        1280K    2
sybsystemdb                       64K        48K        640K     1
sybsystemprocs                    1232K      320K       640K     1
dbccdb                            176K       48K        1280K    2

Les premières recommandations concernent le dimensionnement de la base de données dbccdb (taille en Mo pour les données et pour le log). Par la suite, sont indiqués :

  • les tailles minimales des workspaces scan et text
  • la taille minimale du cache pour le pool de buffer de 16 Ko
  • le nombre de worker process

Installation de la base de données dbccdb

La création de la base de données dbccdb doit être effectuée en utilisant la taille minimale recommandée par sp_plan_dbccdb.

use master
go
disk init name=data_dbccdb_1, physname='/dba/sybase/TST_T1_ASE/dbccdbdevices/data_dbccdb_1.dat', size="100M"
disk init name=log_dbccdb_1, physname='/dba/sybase/TST_T1_ASE/dbccdbdevices/log_dbccdb_1.dat', size="20M"
go
create database dbccdb on data_dbccdb_1=100 log on log_dbccdb_1=20
go
exec sp_dboption dbccdb, 'trunc log', true
go
use dbccdb
go
checkpoint
go

Après la création de la base dbccdb, le script installdbccdb doit être lancé pour la création des tables et des procédures stockées propres à la base dbccdb, ces dernières procédures stockées sont évoquées dans le paragraphe concernant l'analyse des résultats notamment.

isql -S TST_T1_ASE -U sa -P $SA_PWD -i $SYBASE/$SYBASE_ASE/scripts/installdbccdb

Configuration d'un cache pour dbccdb

Une portion du cache de données doit être dédiée à dbccdb en créant un cache nommé et en liant ce cache nommé à dbccdb. Un pool de buffer de 16 Ko doit par ailleurs être alloué dans ce cache nommé dédié à dbccdb. A noter que l'on peut parfaitement utiliser le default data cache en prenant soin de mesurer l'impact éventuel son contenu

Création du cache nommé

La taille du cache recommandée doit être au moins être égale à la somme de la taille minimale préconisée pour le pool de buffer de 16 K avec la procédure sp_plan_dbccdb et de la taille d'une page de pool de cette valeur.

Taille du cache >= Taille du cache préconisée pour le pool de buffer de 16K + Taille d'une page de pool (512 K)

La création du cache nommé pour dbccdb s'effectue de manière classique avec la procédure sp_cacheconfig.

exec sp_cacheconfig dbccdb_cache, "1792K"

Création d'un pool de buffer de 16K

Dans le dernier cache nommé, un pool de buffer de 16 K doit être créé avec au minimum la taille préconisée par la procédure sp_plan_dbccdb.

exec sp_poolconfig dbccdb_cache, "1280K", "16K"

Attribution du cache nommé à la base de données dbccdb

L'attribution du cache nommé à la base de données dbccdb s'effectue avec la procédure système sp_bindcache.

exec sp_bindcache dbccdb_cache, dbccdb

Création des workspaces pour dbccdb

La base de données dbccdb requiert deux workspaces :

  • un workspace scan qui contient une ligne pour chaque page de la base de données cible.
  • un workspace text qui contient une ligne pour chaque table de la base de données cible, table pour laquelle une colonne de type text ou image est présente.

Création des segments pour les workspaces

Un segment doit être créé pour chaque workspace pour contrôler son placement, ce qui améliore les performances.

exec sp_addsegment "scan_ws_dbtest", "dbccdb", "dbccdb_dev"
exec sp_addsegment "text_ws_dbtest", "dbccdb", "dbccdb_log"
go

Création des workspaces dbccdb

Les workspaces doivent être créés en utilisant la procédure sp_dbcc_createws appartenant à la base de données dbccdb, chaque workspace doit posséder un nom unique.

sp_dbcc_createws dbccdb, segment_name, [workspace_name], [{scan|text}], "wssize[K|M]"
exec sp_dbcc_createws dbccdb, scanseg, scan_ws_dbtest, scan, "192K"
exec sp_dbcc_createws dbccdb, textseg, text_ws_dbtest, text, "48K"

Les tailles des workspaces spécifiées avec la procédure sp_dbcc_createws sont les tailles recommandées données par sp_plan_dbccdb.

Spécification des attributs pour les bases de données cible

Il est impératif de préciser les attributs des bases de données cible, c'est-à-dire les bases de données pour lesquelles la commande dbcc checkstorage( ) sera exécutée.

  • le nombre maximum de worker processes à utiliser
  • le nom et la taille du cache nommé dédié à dbccdb
  • les noms des workspaces à utiliser.

dbcc checkstorage ne peut vérifier une base de données et en stocker l'historique sans la spécification de ces attributs. Pour spécifier ces attributs, la procédure sp_dbcc_updateconfig est prévue à cet effet :

Les paramètres définis sont fournis par la procédure sp_plan_dbccdb.

Nombre maximum de worker processes

exec sp_dbcc_updateconfig db_target, "max worker processes", "nb worker processes"
exec sp_dbcc_updateconfig dbtest, "max worker processes","2"

L'application de cet attribut suppose la mise en place du parallélisme avec un nombre de worker processes qui doit être au minimum égal à 2 (voir sp_configure 'number of worker processes')

Cache nommé dédié à dbccdb

exec sp_dbcc_updateconfig db_target, "dbcc named cache", "nom_cache", "taille cache"
exec sp_dbcc_updateconfig dbtest, "dbcc named cache","dbccdb_cache", "1280K"

La taille correspond à la taille mémoire attribuée pour le pool de buffer de 16 Ko dans le cache nommé dédié à dbccdb.

Workspace scan de la base de données cible

exec sp_dbcc_updateconfig db_target, "scan workspace", nom_workspace
exec sp_dbcc_updateconfig dbtest , "scan workspace", "scan_ws_dbtest"

Workspace text de la base de données cible

exec sp_dbcc_updateconfig db_target, "text workspace", nom_workspace
exec sp_dbcc_updateconfig dbtest , "text workspace", "text_ws_dbtest"

Évaluation de l'installation

Il est possible de vérifier l'installation d'une base de données cible dans la base dbccdb à l'aide de la procédure sp_dbcc_evaluatedb (dbccdb)

exec sp_dbcc_evaluatedbRecommended values for workspace size, cache size and process count are:
Database name : dbtest
current scan workspace size : 192K      suggested scan workspace size : 192K
current text workspace size : 48K      suggested text workspace size : 48K
current cache size : 1280K      suggested cache size : 1280K
current process count : 2      suggested process count : 2

Exécution de dbcc checkstorage

Processus détaillé

dbcc checkstorage [ (database_name) ]

La commande dbcc checkstorage effectue les opérations suivantes :

  • Initialisation : vérification de la configuration de la base de données cible et de la disponibilité des ressources requises.
  • Scan de la base de données à vérifier : lecture de l'intégrité de la base de données dans son intégralité, réalisation des vérifications et écriture d'un bref résumé de chaque page dans le workspace dbccdb.
  • Les vérifications restantes sont entièrement réalisées au sein de dbccdb, ce qui évite toute activité concurrente sur la base de données à vérifier.
  • Lorsqu'une inconsistence est trouvée et que cette dernière ne peut être attribuée à une activité concurrente de mise à jour, l'information est stockée dans dbccdb.

Lorsque dbcc checkstorage trouve une faute dans la base de données cible, cette dernière est stockée dans la table dbcc_faults de la base dbccdb. Il existe deux types de fautes issues de la commande dbcc checkstorage.

Certaines erreurs peuvent être dépendantes du contexte d'execution du dbcc, aussi, il est possible de filtrer les 'fausses' erreurs ( spurious ) relevées lors du dernier lancement de checkstorage.

La commande dbcc checkverify va vérifier chacune des erreurs reportée et éventuellement reclassifier le code erreur

set command_status_reporting on
go
exec dbcc checkverify ( [dbname] )
go
  • les Soft faults
  • les Hard faults

Soft Faults

Une faute "soft" est une inconsistence dans ASE qui n'est pas généralement persistente. La plupart des fautes soft résultent d'inconsistences temporaires dans la base de données cible dues aux mises à jour des utilisateurs dans la base de données durant la commande dbcc checkstorage ou bien lorsque dbcc checkstorage rencontre des commandes DDL.

Ces fautes ne sont pas reproduites lors d'une seconde commande dbcc checkstorage. Lorsque ces fautes soft persistent dans des exécutions successives de dbcc checkstorage, elles peuvent indiquer une vraie corruption.

Hard Faults

Une faute "hard" est une corruption persistente d'ASE qui ne peut être corrigée en redémarrant ASE. Toutes les fautes hard ne sont pas équivalentes en gravité.

Quelques fautes hard peuvent être corrigées simplement en vidant la table affectée par l'erreur (truncate table), d'autres fautes hard sont résolues uniquement en restaurant une sauvegarde.

Processus simplifié

La commande sp_dbcc_runcheck enchaîne l'exécution des commandes checkstorage, checkverify et l'affichage du rapport résumé (summary report).

exec sp_dbcc_runcheck [dbname]

Examen des résultats de dbcc checkstorage

Plusieurs procédures permettent d'obtenir les informations utiles provenant de la commande dbcc checkstorage. Ces dernières procédures sont résumées dans le tableau qui suit.

Procédure de rapport Description fonctionnelle
sp_dbcc_summaryreport Affiche le résumé des données tel que le nombre de fautes graves ou mineures détectées.
sp_dbcc_faultreport Affiche les informations détaillées pour chaque faute rapportée
sp_dbcc_fullreport Affiche la configuration, les statistiques et les données de fautes pour une base de données ou un objet
sp_dbcc_differentialreport Affiche les résultats comparatifs des opérations dbcc checkstorage réalisées pour une base de données spécifiée à des dates spécifiées par l'utilisateur

Maintenance de dbccdb

Si la nature d'une base de données cible change, il est nécessaire de réévaluer la configuration dbccdb.

  • sp_dbcc_evaluatedb recommande les valeurs pour les paramètres de configuration en utilisant les résultats des opérations précédentes dbcc checkstorage
  • sp_dbcc_deletedb supprime toutes les informations pour une base de données spécifiée dans dbccdb
  • sp_dbcc_deletehistory supprime les résultats des opérations dbcc checkstorage pour une base de données spécifiée dans dbccdb

Script

Mettre en forme sp_plan_dbccdb

Le filtre awk suivant permet de transformer le résultat de la commande sp_plan_dbccdb en commandes sql générant la configuration de dbccdb

%> printf "sp_plan_dbccdb\ngo\n" | isql -S TST_T1_ASE -U sa -P $SA_PWD -o output.txt
output.txt
Recommended size for dbccdb database is 104MB (data = 102MB, log = 2MB).

dbccdb database already exists with size 120MB.

Recommended values for workspace size, cache size and process count are:

dbname                         scan ws  text ws  cache  comp mem  process count

master                         624K     160K     640K   0K        1
tempdb                         24640K   6176K    6164K  0K        2
model                          64K      48K      640K   0K        1
sybsystemdb                    64K      48K      640K   0K        1
sybsystemprocs                 1632K    416K     640K   0K        1
dbccdb                         1488K    384K     1280K  0K        2
SYB_STATS                      30736K   7696K    7687K  0K        2
tempdb_ice                     144K     48K      640K   0K        1
%> nawk -f convert_sp_plan_dbccdb.awk output.txt

Résultat :

use dbccdb
go

exec sp_dbcc_createws dbccdb, 'default', scan_ws, scan, '31M'
exec sp_dbcc_createws dbccdb, 'default', text_ws, text, '8M'
go

exec sp_dbcc_updateconfig SYB_STATS, 'max worker processes', '2'
exec sp_dbcc_updateconfig SYB_STATS, 'dbcc named cache', 'default data cache', '8M'
exec sp_dbcc_updateconfig SYB_STATS, 'scan workspace', scan_ws
exec sp_dbcc_updateconfig SYB_STATS, 'text workspace', text_wsgo

exec sp_dbcc_updateconfig master, 'max worker processes', '1'
exec sp_dbcc_updateconfig master, 'dbcc named cache', 'default data cache', '1M'
exec sp_dbcc_updateconfig master, 'scan workspace', scan_ws
exec sp_dbcc_updateconfig master, 'text workspace', text_ws
go

Écriture en une ligne:

%> printf "sp_plan_dbccdb\ngo\n" | isql -S TST_T1_ASE -U sa -P $SA_PWD | nawk -f convert_sp_plan_dbccdb.awk