Introduction
Dans le cadre d’opérations de chargement de données dans un serveur IQ via la commande LOAD TABLE
, ce document expose l’impact de quelques éléments de configurations de l’instance. Les paramètres de configuration étudiés sont :
- Le dimensionnement des caches (Main et Temp)
- Le paramètre '
minimize_storage
' - Le placement du dbspace temporarire temp store (zfs, ram ou raw device).
Contexte
Version de Sybase IQ 12.7
La version étudiée de Sybase IQ est la version 12.7 ESD#5 64 bit sur une machine Solaris X86 AMD Opteron.
start_asiq -v2
start_asiq -v2
9.0.2.2056
Sybase IQ/12.7.0/080707/P/ESD 5/Sun_Opteron/OS 5.10/64bit/2008-07-07
Structure de la table chargée
La table à charger est très diversifiée dans les typages des colonnes : elle contient des colonnes de type date, int, float, varchar, datetime.
CREATE TABLE IDW.QUOTE
(
RETRIEVAL_DTE date NOT NULL,
INSTRUMENT_ID int NOT NULL IQ UNIQUE(500000),
SOURCE_ID varchar(12) NOT NULL IQ UNIQUE(500),
QUOTE float NULL,
QUOTE_DATE date NULL,
UNIT_PRICE float NULL,
ACCRUED_INTEREST float NULL,
ACCRUED_INTEREST_DATE date NULL,
CREATED_BY varchar(20) NOT NULL,
CREATED_ON datetime NOT NULL,
UPDATED_BY varchar(20) NULL,
UPDATED_ON datetime NULL,
PRIMARY KEY(INSTRUMENT_ID, RETRIEVAL_DTE, SOURCE_ID)
) ;
3 indexes en plus de la clé primaire sont créés sur cette table :
create lf index QUOTE_lf_1 on IDW.QUOTE(RETRIEVAL_DTE)
create lf index QUOTE_lf_2 on IDW.QUOTE(SOURCE_ID)
create hg index QUOTE_hg_1 on IDW.QUOTE(INSTRUMENT_ID)
La densité est quasi proche de 1 à l’issue de chaque chargement.
(sa)> sp_iqrowdensity 'table IDW.QUOTE';
Execution time: 0.004 seconds Tablename Column Name IndexType Density ------------------------------------------------------ IDW.QUOTE RETRIEVAL_DTE Two Byte FP 1.0 IDW.QUOTE SOURCE_ID Two Byte FP 1.0 IDW.QUOTE QUOTE Flat style FP 1.0 IDW.QUOTE UNIT_PRICE Flat style FP 1.0 IDW.QUOTE ACCRUED_INTEREST Flat style FP 1.0 IDW.QUOTE ACCRUED_INTEREST_DATE Two Byte FP 1.0 IDW.QUOTE QUOTE_DATE Two Byte FP 1.0 IDW.QUOTE CREATED_BY Flat style FP 1.0 IDW.QUOTE INSTRUMENT_ID Flat style FP 1.0 IDW.QUOTE CREATED_ON Flat style FP 1.0 IDW.QUOTE UPDATED_BY Flat style FP 1.0 IDW.QUOTE UPDATED_ON Flat style FP 1.0
Volumétrie des données chargées
La taille du fichier en entrée de la commande LOAD TABLE
est un fichier de 1,1 Gb contenant environ 8 970 000 lignes.
DAS_U1_ASQ> ls -l QUOTE_2007Q4.bcpc
-rw-r--r-- 1 sybase dba 1134379064 Mar 19 11:05 QUOTE_2007Q4.bcpc
Nombre de lignes :
DAS_U1_ASQ > wc -l QUOTE_2007Q4.bcpc
8970523 QUOTE_2007Q4.bcpc
Options mémoire (load_memory_mb), taille des blocs et des pages du serveur IQ
Dans la configuration des tests, le serveur IQ est défini avec une taille de page à 64k et une taille de bloc à 4k : IQ Page Size 64k / IQ Block Size 4k.
Le paramètre load_memory_mb
ne rentre pas dans le cadre de l’étude et demeure à sa valeur par défaut : 0.
load_memory_mb = default
block size = default
IQ page size 64K
Résultats
Pour chaque paramètre, trois mesures de durée sont réalisées et la moyenne des 3 prises en compte.
Influences de la taille des caches Main et Temp (iqtc et iqmc)
À l’installation du serveur, la toute première mesure indique une durée de chargement de 34 secondes. Le tableau suivant montre de quelle manière va évoluer cette durée en fonction des valeurs choisies pour définir les tailles des caches 'Main' et 'Temp', tailles définies dans le fichier de configuration du serveur IQ.
- | - | Temp (iqtc) | ||||
---|---|---|---|---|---|---|
- | - | 0 |
100 |
500 |
1000 |
1500 |
Main (iqmc) | 0 | 34.0 | 31.0 | 29.3 | 28.7 | 29.0 |
100 | 33.7 | 30.7 | 28.7 | 29.0 | 29.0 | |
500 | 34.7 | 30.3 | 29.3 | 29.0 | 29.0 | |
1000 | 34.3 | 31.0 | 29.0 | 29.0 | 29.0 | |
1500 | 34.2 | 30.8 | 29.1 | 29.0 | 29.0 |
Trois éléments importants à noter dans les résultats :
- Un écart de près de 20% entre les temps extrêmes.
- Seule la définition du cache temporaire Temporary Cache a de l’influence sur le temps de chargement.
- La durée optimale (dans ce contexte) est obtenue assez rapidement avec relativement peu de mémoire dans le cache temporaire..
Paramètre minimize_storage à on
Dans les études qui suivent, les tests sont réalisés avec les paramètres mémoire suivants pour les caches Main et Temp :
iqtc = 1500
iqmc = 1000
Le même test de chargement est réalisé en recréant la table avec l’option
minimize_storage
(sa)> set option minimize_storage = 'on'; (sa)> sp_iqrowdensity 'table IDW.QUOTE';
Tablename Column Name IndexType Density ------------------------------------------------------ IDW.QUOTE RETRIEVAL_DTE One Byte FP 1.0 IDW.QUOTE SOURCE_ID Two Byte FP 1.0 IDW.QUOTE QUOTE Flat style FP 1.0 IDW.QUOTE UNIT_PRICE Flat style FP 1.0 IDW.QUOTE ACCRUED_INTEREST Flat style FP 1.0 IDW.QUOTE ACCRUED_INTEREST_DATE One Byte FP 1.0 IDW.QUOTE QUOTE_DATE Two Byte FP 1.0 IDW.QUOTE CREATED_BY One Byte FP 1.0 IDW.QUOTE INSTRUMENT_ID Flat style FP 1.0 IDW.QUOTE CREATED_ON One Byte FP 1.0 IDW.QUOTE UPDATED_BY Flat style FP 1.0 IDW.QUOTE UPDATED_ON Two Byte FP 1.0
Le test n’a pas montré de différence significative, la durée de chargement est toujours de 29 à 30 secondes.
Localisation des dbspace temporaire temp_store (raw device, RAM)
Dans les tests précédents, le dbspace temporaire temp store était localisé
sur un volume de type ZFS configuré comme suit (recordsise
à 8k) :
zfs list -o mountpoint,recordsize /test
MOUNTPOINT RECSIZE /test 8K
Il n’a pas été noté de gains notables sur les chargements massifs avec la
commande LOAD TABLE
en positionnant le dbspace temporaire temp store sur un
support de type raw device ou en mémoire RAM (/tmp).
Le temps de chargement est toujours de 29 secondes, alors que la documentation officielle préconise de localiser les dbspaces temporaires sur des supports de type raw device pour des performances optimales.