Introduction
Une saisie un peu rapide, une faute de syntaxe et la commande disk init
retourne une erreur et son usage. Là, surprise en regardant la syntaxe
proposée, un nouveau paramètre skip_alloc
dans la commande disk init
est
proposé.
Ce paramètre skip_alloc
n’est pas encore dans les manuels mais figure dans
les pages "Changed commands" du manuel des nouvelles fonctionnalités de Sybase
Adaptive Server Enterprise 15.0.2 (BOL). La commande disk resize
propose
également ce nouveau paramètre skip_alloc
avec la version 15.0.2.
L’option skip_alloc
évite l’initialisation des pages de données
réalisée dans le cadre de la création d’un device avec disk init
. Elle est
supportée pour tous les systèmes de fichiers excepté les systèmes de fichiers
Windows NTFS. Pour Windows, seuls les systèmes de fichiers NT de type Raw sont
supportés.
Le document suivant va montrer un usage intéressant de ce paramètre, qui
associé à la commande "create database for load
" permet une duplication très
rapide de base.
La nouvelle option skip_alloc de la commande disk init
disk init
Usage: DISK INIT NAME="<name>", PHYSNAME="<device>", VDEVNO=<devnumber>, SIZE=<size> [,CNTRLTYPE=<controller>] [,VSTART=<offset>] [,CONTIGUOUS] [,DSYNC={TRUE|FALSE}] [,DIRECTIO={TRUE|FALSE}] [,SKIP_ALLOC={TRUE|FALSE}]
Cette nouvelle option skip_alloc
est également disponible avec la commande
disk resize
.
Benchmark de duplication de bases de données : scénario
Objectifs du benchmark
Les temps de création d’une base de données d’une dizaine de Go sont mesurés suivant 2 stratégies :
- Méthode classique :
disk init
,create database
,load database
- Méthode rapide :
disk init
avec l’optionskip_alloc
,create database
avec l’optionfor load
,load database
.
Le résultat est connu d’avance puisqu’en mode rapide, deux étapes
d’initialisation des pages vides sont évitées (disk init
+ create database
).
L’objectif est de savoir dans quelles proportions.
Méthode classique
disk init name='data_01', physname='/test/data_01.dat', size='1000M'
go
disk init name='log_01', physname='/test/log_01.dat', size='100M'
go
create database test on data_01=1000 log on log_01=100
go
load database test from '/dump/test.dmp'
go
online database test
go
Le fichier de log du serveur ASE montre l’initialisation des pages lors de
l’exécution de la commande disk init
:
tail -f $LOG/$DSQUERY.log
01:00000:00075:2010/01/31 12:31:04.06 kernel Virtual device 12 started using asynchronous i/o. 01:00000:00075:2010/01/31 12:31:04.06 kernel Initializing device /dba/sybase/test/data_01.dat from offset 0 with zeros. 01:00000:00075:2010/01/31 12:34:13.80 kernel Finished initialization. 01:00000:00075:2010/01/31 12:36:06.08 kernel Initializing virtual device 13, '/dba/sybase/test/log_01.dat' with dsync 'on'. 01:00000:00075:2010/01/31 12:36:06.08 kernel Virtual device 13 started using asynchronous i/o. 01:00000:00075:2010/01/31 12:36:06.08 kernel Initializing device /dba/sybase/test/log_01.dat from offset 0 with zeros. 01:00000:00075:2010/01/31 12:36:22.90 kernel Finished initialization.
Méthode rapide avec skip_alloc
disk init name='data_02', physname='/test/data_02.dat', size='1000M'
, skip_alloc=true
go
disk init name='log_02', physname='/test/log_02.dat', size='100M'
, skip_alloc=true
go
create database test2 on data_02=1000 log on log_02=100
for load
go
load database test2 from '/dump/test.dmp'
go
online database test
go
Le fichier de log du serveur ASE affiche un avertissement lorsque l’option
skip_alloc
est utilisée.
Aucun droit à l’erreur dans ce contexte, l’espace disponible dans le système de fichiers pour les futures
allocations n’est pas vérifiée : warning: 'disk init' command with 'skip_alloc' option turned on for device "<device>", does not ensure allocation of the specified number of pages
.
tail -f $LOG/$DSQUERY.log
00:00000:00075:2010/01/31 13:22:38.91 kernel Initializing virtual device 12, '/dba/sybase/test/data_01.dat' with dsync 'on'. 00:00000:00075:2010/01/31 13:22:38.91 kernel Virtual device 12 started using asynchronous i/o. 00:00000:00075:2010/01/31 13:22:38.91 kernel warning: 'disk init' command with 'skip_alloc' option turned on for device "/dba/sybase/test/data_01.dat", does not ensure allocation of the specified number of pages. 00:00000:00075:2010/01/31 13:23:11.87 kernel Initializing virtual device 13, '/dba/sybase/test/log_01.dat' with dsync 'on'. 00:00000:00075:2010/01/31 13:23:11.87 kernel Virtual device 13 started using asynchronous i/o. 00:00000:00075:2010/01/31 13:23:11.87 kernel warning: 'disk init' command with 'skip_alloc' option turned on for device "/dba/sybase/test/log_01.dat", does not ensure allocation of the specified number of pages.
Résultats
Commande | Temps (s) méthode classique | Temps (s) méthode rapide |
---|---|---|
disk init data |
190 | 1 |
disk init log |
19 | 1 |
create database |
260 | 15 |
load database |
220 | 220 |
Les étapes importantes d’initialisation des pages réalisées avec les
commandes "disk init
" et "create database
" peuvent être omises dans le cadre
d’une duplication de base par rechargement. Les durées sont dès lors divisées
par 3.