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"
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
...
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.
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 :
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 :
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 :
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).
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.
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 détermine également 2 facteurs de performances :
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 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.
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.
Lorsqu'une table ne contient aucun index autre que les indexes systématiques FP par colonne, la phase 2 est de 0 seconde.
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 (voir paragraphe 3-3).
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 ?
Lorsque l'on s'écarte progressivement des valeurs par défaut, les compressions demeurent homogènes :
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).

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 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).


Le choix du couple peut également provenir de la taille maximale des tables consommatrices en colonnes varchar.
| Version | Date | Commentaires |
|---|---|---|
| 1.0 | 01/2009 | Version initiale |
Sybase
Books Online IQ 12.7
SUN Books Online zfs
SUN Solaris ZFS Administration Guide