Mise en œuvre de dbcc checkstorage


1- 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

2- É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 :

2-1- Étude du plan de ressources requises pour dbccdb.

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

Parmi les ressources qui doivent être configurées :

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

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 :

2-2- 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

A l'issue de 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

2-3- 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

2-3-1- 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

2-3-2- 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"

2-3-3- 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

2-4- Création des workspaces pour dbccdb

La base de données dbccdb requiert deux workspaces :

2-4-1- 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

2-4-2- 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.

2-5- 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.

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.

2-5-1- Nombre maximum de worker processes

sp_dbcc_updateconfig db_target, "max worker processes", "nb worker processes"
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')

2-5-2- Cache nommé dédié à dbccdb

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.

2-5-3- Workspace scan de la base de données cible

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

2-5-4- Workspace text de la base de données cible

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

2-6- É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

3- Exécution de dbcc checkstorage

3-1- Processus détaillé

dbcc checkstorage [ (database_name) ]

La commande dbcc checkstorage effectue les opérations suivantes :

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

3-1-1- 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 corruption.

3-1-2- 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.

3-2- Processus simplifié

La commande sp_dbcc_runcheck, permet d'enchainer l'exécution des commandes checkstorage, checkverify et summary report

exec sp_dbcc_runcheck [dbname]

3-3- 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

3-4- Maintenance de dbccdb

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

4- 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
cat 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
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

Annexe

Historique

Version Date Commentaires
1.0 07/2002 Version initiale
1.1 05/2009 Ajout d'un script awk pour formater automatiquement le résultat de la procédure stockée sp_plan_dbccdb

Liens

Sybase BOL : dbcc checkstorage
Sybase BOL : Checking database consistency
Sybase BOL : dbcc stored procedures