Introduction
Cet article propose un benchmark pour étudier l’influence de la taille des blocs IQ (IQ block size) et des pages IQ (IQ Page size) sur les chargements massifs dans un serveur IQ 12.7. L’objectif est de déterminer le meilleur compromis entre temps de chargement et espace consommé.
L’influence de la taille du bloc des systèmes de fichiers ZFS sur les chargements massifs IQ a été retirée de la version initiale de cette documentation : une article spécifique est proposé sur ce sujet : IQ 12.7 et les chargements massifs : influence de la taille des blocs des systèmes ZFS
Caractéristiques
Caractéristiques du serveur Solaris ( zfs list )
Les benchs sont réalisés sur une machine Solaris SPARC 10 (V445), machine qui dispose de 2 CPU à 1,5 GHz. L’écriture durant les tests est réalisée sur un système de fichiers ZFS ayant une taille de blocs de 2K et les disques sont locaux.
Pour retrouver la taille de bloc d’un système de fichier ZFS
: utiliser la commande zfs list
pour la propriété
recordsize
(volblocksize
lorsqu’il s’agit d’un volume) :
zfs list -o name,recordsize
NAME RECSIZE ... DATADEVICES/DBA_T1_ASE/DATADEVICES 2K ... LOG-EXPORTS/DBA_T1_ASE/LOGDEVICES 4K ...
Caractéristiques du serveur IQ 12.7
Le serveur IQ est une version 12.7 ESD 5 64 bits. Les espaces de stockage IQ Main Store et IQ Temp Store sont respectivement de 10Gb et 2Gb.
Les configurations du serveur IQ dans les jeux de tests restent toujours identiques (caches, etc.) : l’iso-configuration est respectée.
Caractéristiques de la table à charger
Les chargements massifs sont réalisés sur une table
d’environ 71 millions de lignes (INVESTMENT_POSITION
) et ces 71
millions de lignes sont réparties sur 8 fichiers correspondant
aux 8 trimestres (ou quarter) 2007 et 2008. La commande LOAD TABLE
est
utilisée pour le chargement massif des trimestres. Voici la
répartition du nombre de lignes par trimestre :
Trimestre | Nombre de lignes |
---|---|
Q1 2006 | 7 354 139 |
Q2 2006 | 7 602 069 |
Q3 2006 | 8 222 181 |
Q4 2006 | 8 694 465 |
Q1 2007 | 9 145 929 |
Q2 2007 | 9 432 082 |
Q3 2007 | 10 026 387 |
Q4 2007 | 10 533 146 |
La structure de la table INVESTMENT_POSITION
est la suivante, elle
possède un index unique sur 3 colonnes (index HG unique) :
CREATE TABLE IDW.INVESTMENT_POSITION
(
PORTFOLIO_ID int NOT NULL IQ UNIQUE(5000),
INSTRUMENT_ID int NOT NULL IQ UNIQUE(500000),
[DATE] date NOT NULL,
TECH_QUANTITY float NOT NULL,
PHYSICAL_QUANTITY float NOT NULL,
STATUS char(2) NOT NULL IQ UNIQUE(50),
LAST_RECORD_DATE datetime NULL,
VALUATION float NULL,
LAST_VALUATION_DATE datetime NULL,
CREATED_BY varchar(20) NOT NULL,
CREATED_ON datetime NOT NULL,
UPDATED_BY varchar(20) NULL,
UPDATED_ON datetime NULL,
PRIMARY KEY(PORTFOLIO_ID,INSTRUMENT_ID,[DATE])
);
L’option de création des indexes FP est activée lors de ces chargements. Aussi les chargements massifs sont réalisés sur une table présentant :
- un index HG unique
- 13 indexes FP
Les trimestres sont toujours montés dans le même ordre
et 3 chargements sont réalisés pour une configuration
données (IQ PAGE SIZE/BLOCK SIZE
) afin d’obtenir une moyenne
représentative sur les paramètres suivants :
- Temps de chargement (phase 1 et 2)
- Consommation en espace (compression)
Rappels sur les tailles de pages et de blocs dans IQ (IQ PAGE SIZE, BLOCK SIZE)
La commande CREATE DATABASE
permet de spécifier la taille des
pages et la taille des blocs.
Voici à titre de rappel la syntaxe de la commande CREATE
DATABASE
uniquement pour les paramètres gouvernant les tailles
de pages et de blocs, les autres paramètres sont occultés
:
CREATE DATABASE db-name
... ...
... [ PAGE SIZE page-size ]
... ...
... [ IQ PAGE SIZE iq-page-size ]
... [ BLOCK SIZE block-size ]
... ...
Les valeurs possibles pour page-size
, iq-page-size
et block-size
sont les suivantes :
page-size
:{ 4096 | 8192 | 16384 | 32768 }
iq-page-size
:{ 65536 | 131072 | 262144 | 524288 }
block-size
:{ 4096 | 8192 | 16384 | 32768 }
Paramètre PAGE SIZE
Le paramètre PAGE SIZE
gouverne la taille des pages du
segment Adaptive Server Anywhere ( db-name.db
) contenant les tables du
catalogue. Les valeurs peuvent être 4096, 8192, 16384 et 32768
(4K, 8K, 16K et 32K).
La taille de page du catalogue limite le nombre de colonnes que peut supporter une base de données IQ ainsi que la longueur des lignes de commande.
4KB est largement suffisant, mais dans de rares cas le paramètre PAGE SIZE
doit être augmenté pour pouvoir gérer des très longues commandes,
comme les commandes RESTORE DATABASE
qui référence de très nombreux DBSpace, ou bien pour pouvoir gérer un nombre très important de colonnes.
Influence sur les performances : comme le catalogue compte pour une fraction minuscule d’I/Os, la taille de page du catalogue n’a pratiquement pas d’impacts sur les performances.
Paramètre IQ PAGE SIZE
Le paramètre IQ PAGE SIZE
gouverne la taille des pages dans
les segments IQ physiques contenant les tables et indexes IQ et dans
les segments IQ temporaires. La valeur doit être une puissance de
2, de 65536 (64K) à 524288 (512K). Lorsque le paramètre
IQ PAGE SIZE
n’est pas spécifié, la valeur par
défaut est 128K (131072).
La taille de page ne peut plus être modifiée après la création de la base de données et elle détermine la taille limite supérieure des objets de la base de données (les tables notamment).
Il faut être vigilant sur l’éventuelle existence de très larges tables, notamment les tables avec de très larges colonnes varchar
.
La taille de page détermine également 2 facteurs de performances :
- la taille du bloc de transfert par défaut.
- le maximum de compression de données.
Paramètre BLOCK SIZE
Tous les I/Os (écriture / lecture) se produisent en blocs de
transfert. La taille de ces blocs de transfert est gouvernée par
le paramètre BLOCK SIZE
: elle est définie à la
création de la base IQ et ne peut plus être
modifiée par la suite.
La valeur du paramètre BLOCK SIZE
doit être
inférieure au paramètre IQ PAGE SIZE
et doit être
également une puissance de 2 entre 4096 (4K) et 32768 (32K). Une
autre contrainte également : la taille de page divisée
par la taille du bloc doit être égal à 2, 4, 8 ou
16, ainsi les seuls couples possibles PAGE SIZE (K) / BLOCK SIZE (K)
sont :
64K / 4K |
64K / 8K |
64K / 16K |
64K / 32K |
128K / 8K |
128K / 16K |
128K / 32K |
|
256K / 16K |
256K / 32K |
||
512K / 32K |
Lorsque le couple n’est pas respecté, la création de la base de données est en échec avec l’erreur suivante :
The PAGE SIZE divided by the BLOCK SIZE must be equal to 2, 4, 8, or 16.
DATABASE: /dba/asiq/IDB_T2_ASQ/investment.db PAGE SIZE: 524288 BLOCK
SIZE: 4096
Lorsque le paramètre BLOCK SIZE
n’est pas
spécifié dans la commande CREATE DATABASE
, la valeur par
défaut dépend de la valeur du paramètre IQ PAGE
SIZE :
Taille de Page (IQ PAGE SIZE ) |
64K |
128K |
256K |
512K |
Taille de bloc par défaut (BLOCK SIZE ) |
4K |
8K |
16K |
32K |
La valeur par défaut est toujours optimum. La taille par défaut du bloc pour une taille de page donnée est un compromis optimal entre le taux de transfert I/O et la consommation d’espace disque pour la plupart des systèmes. Ce compromis est en faveur de l’économie d’espace.
Compression des données et chargements
Compression des données
La documentation est très pauvre au sujet de l’optimisation
de la compression des données avec les paramètres IQ PAGE
SIZE
et BLOCK SIZE
, même dans le manuel "Performance & Tuning
guide". Tout ce que l’on peut lire est l’information suivante : Sybase
IQ compresse les données lors du stockage sur disque; la
compression des données réduit l’espace disque
consommé et contribue aux performances; le taux de compression
est déterminé automatiquement par le moteur IQ et
dépend de la taille de page.
L’étude va montrer que le taux de compression
est fortement lié au couple IQ PAGE SIZE / BLOCK SIZE
et que les
préconisations des valeurs par défaut du paramètre
BLOCK SIZE
par rapport au paramètre IQ PAGE SIZE
vont vers
l’optimisation par le moteur IQ de la compression des données lors du stockage sur disque.
Chargements massifs (phases 1 & 2)
Les chargements massifs par la commande LOAD TABLE
notifient dans le
fichier de message du serveur IQ 2 phases (Insert Pass 1
et Insert Pass
2
), exemple :
I. 12/30 16:19:11. 0000000054 [20895]: Insert Pass 1 completed in 109 seconds.
I. 12/30 16:21:36. 0000000054 [20895]: Insert Pass 2 completed in 145 seconds.
- La phase 1 correspond au chargement des données dans les indexes FP.
- La phase 2 correspond au chargement des nouvelles données dans les indexes HG, HNG, LF, etc.
Lorsqu’une table ne contient aucun index autre que les indexes systématiques FP par colonne, la phase 2 est de 0 seconde.
Résultats des chargements
Les tests dans ce paragraphe ont tous pour support d’écriture un système de fichiers ZFS ayant une taille de bloc de 2K.
Dans les tests, les chargements massifs de la table
INVESTMENT_POSITION
sont réalisés pour tous les couples
possibles IQ PAGE SIZE/BLOCK SIZE
.
Influence des tailles de pages et de blocs sur la compression des données
Les résultats obtenus sur la taille de la table
INVESTMENT_POSITION
en Gb sont résumés dans le graphique
ci-dessous, l’évolution de la taille de la table est
représentative de l’efficacité de la compression des
données par le moteur IQ durant les chargements massifs :
Quelles conclusions en tirer ?
La taille de la table INVESTMENT_POSITION
et donc la
compression est toujours la meilleure lorsqu’il s’agit des valeurs par défaut pour le couple IQ PAGE SIZE / BLOCK SIZE
.
Lorsque l’on s’écarte progressivement des valeurs par défaut, les compressions demeurent homogènes :
- 3,2 GB pour les couples
64K/8K
,128K/16K
et256K/32K
- 3,7 GB pour les couples
64K/16K
et128K/32K
Le meilleur taux de compression est observé pour le couple
128K/8K
.
Les meilleures compressions sont obtenues pour les couples 128K/8K
et 256K/16K
avec en tête de liste le couple 128K/8K
: cette
observation confirme les préconisations de Sybase pour les
plateformes 64 bits, à savoir une taille de page de 128K ou de
256K en laissant la taille de bloc par défaut (128K/8K
et
256K/16K
).
Influence des tailles de pages et de blocs sur les temps de chargements
Les résultats obtenus sur les temps de chargement (phase 1 +
phase 2) de la taille de la table INVESTMENT_POSITION
sont
résumés dans le graphique ci-dessous :
Quelles conclusions en tirer ?
Le temps de chargement de la taille de la table
INVESTMENT_POSITION
est toujours la meilleure lorsqu’il s’agit des valeurs par défaut pour le couple IQ PAGE SIZE / BLOCK SIZE
.
Lorsque l’on s’écarte des valeurs par défaut IQ PAGE SIZE/BLOCK SIZE
,
la dégradation existe mais peu significative comparativement à la perte en espace et en compression.
Le meilleur temps obtenu est le couple 256K/16K
qui correspond au
couple de valeurs par défaut pour un serveur IQ construit avec
une taille de pages de 256K.
Une dégradation très notable du temps de chargement
est observé lorsque l’on passe du couple 64K/8K
(27 min) au
couple 64K/16K
(31 min). Ce saut violent est également
confirmé dans le taux de compression qui chute brutalement de
98% à 91% lors de la transition 64K/8K
=> 64K/16K
(voir
graphiques ci-dessous).
Les pertes en temps de chargement sont toujours dues aux phases 2 des chargements (mises à jour des indexes HG, LF …). Le temps de chargement des phases 1 reste homogène quelle que soit la configuration du serveur IQ (12 minutes).
Conclusions
- Il ne faut jamais s’écarter du couple par défaut
IQ PAGE SIZE/IQ BLOCK SIZE
(64K/4K, 128K/8K, 256K/16K
et512K/32K
) pour obtenir le meilleur taux de compression et le meilleur temps de chargement. - Le meilleur taux de compression est observé pour le couple
128K/8K
sur un système de fichiers ZFS défini en 2K. - Le meilleur temps de chargement est observé pour le couple
256K/16K
sur un système de fichiers ZFS défini en 2K. Si l’on souhaite privilégier le taux de compression par rapport au temps de chargement, le couple128K/8K
est le couple idéal : toutefois un gain de performances de 11% pour le temps de chargement est observé lorsque l’on migre du couple128K/8K
vers le couple256K/16K
pour une dégradation du taux de compression de 0,2%. Les résultats de performances obtenus sont conformes aux préconisations et valeurs par défautIQ PAGE SIZE/BLOCK SIZE
pour les plateformes 64bits.
Si une hésitation subsiste
encore dans le choix du couple 128K/8K
et 256K/16K
, Sybase
préconise pour les plateformes 64bits :
- Le couple
128K/8K
si la plus large table contient plus d’un milliard de lignes et moins de 4 milliards de lignes. - Le couple
256K/16K
si la plus large table dépasse 4 milliards de lignes. - Dans tous les cas de figure, les couples
128K/8K
et256K/16K
sont les couples optimaux préconisés pour les bases de données qui peuvent croître au délà de 8Tb.
Le choix du couple peut également provenir de la taille maximale des tables consommatrices en colonnes varchar.