IQ 12.7, performances de la commande LOAD TABLE. Influence des paramètres iqmc, iqtc et minimize_storage

Logo

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
Influence des caches

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.