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_dbccdb
Recommended 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
ettext
- 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 typetext
ouimage
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_evaluatedb
Recommended 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’exécution 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
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édentesdbcc checkstorage
sp_dbcc_deletedb
supprime toutes les informations pour une base de données spécifiée dansdbccdb
sp_dbcc_deletehistory
supprime les résultats des opérationsdbcc 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