IQ 12.7 et les chargements massifs : influence de la taille des pages et des blocs IQ

Logo

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 :

Evolution compression IQ (IQ PAGE SIZE/BLOCK SIZE)

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 et 256K/32K
  • 3,7 GB pour les couples 64K/16K et 128K/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 :

Taux de compression IQ PAGE SIZE/BLOCK SIZE par défaut

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 et 512K/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 couple 128K/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 couple 128K/8K vers le couple 256K/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éfaut IQ 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 et 256K/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.