oracle 12c in memory en action

53
Oracle 12c In Memory en action Laurent Léturgez – Techsys 12 Novembre 2014 1

Upload: laurent-leturgez

Post on 22-Jan-2018

610 views

Category:

Data & Analytics


2 download

TRANSCRIPT

Page 1: Oracle 12c in memory en action

Oracle 12c In Memory en action

Laurent Léturgez – Techsys

12 Novembre 2014

1

Page 2: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 2

Page 3: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 3

Contexte :

- Base d’historique des ventes- Deux schémas de 15Go environ

- Schéma 1 (TPCH_PART) : Fonctionnement classique- Schéma 2 (TPCHIM_PART) : Fonctionnement in Memory

- Exécution de deux requêtes analytiques dans les deux schémas

Page 4: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 4

Page 5: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 5

Volumétries grandissantes

Besoin en analyse de données

Besoin de rapidité

d’exécution

Page 6: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 6

Volumétries grandissantes

Besoin en analyse de données

Besoin de rapidité

d’exécution

Structure de données adaptée

Page 7: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 7

Page 8: Oracle 12c in memory en action

Oracle 12c In Memory

• Quoi de neuf avec Oracle 12c In Memory ColumnStore ?

– Une nouvelle zone mémoire: « in Memory column store »

– Un nouveau format : les données sont organisées en colonne dans cette zone mémoire

– Le format en ligne est conservé

09/02/2016 8

Page 9: Oracle 12c in memory en action

Oracle 12c In Memory

• In Memory column store : paramétrage

– Configuré en SGA par le paramètre INMEMORY_SIZE (mini 100Mo)

– Ce n’est pas un cache mais un « magasin » … donc pas d’algorithme de vieillissement (LRU/MRU)

09/02/2016 9

Page 10: Oracle 12c in memory en action

Oracle 12c In Memory

• In Memory column store : Constitution

• Pool IMCU : In Memory Compression Unit

– Contient les unités de compression (CU) : Données formatées en colonne

• Pool SMU

– Stocke les Snapshot Metadata Unit (Equivalent des undo pour l’IM)

09/02/2016 10

Page 11: Oracle 12c in memory en action

Oracle 12c In Memory

• L’IMCU structure de données centrale

– Unité d’allocation pour le stockage des données d’une colonne

– Chaque colonne est stockée dans un espace contigüe séparé des autres colonnes

09/02/2016 11

Page 12: Oracle 12c in memory en action

Oracle 12c In Memory

• L’IMCU structure de données centrale

09/02/2016 12

Marque

Karmeliet

Chimay

Chimay

Duvel

Chimay

Duvel

Westmalle

Duvel

Karmeliet

Clé Valeur

0 Chimay

1 Duvel

2 Karmeliet

3 Wesmalle

CUMin = ChimayMax = Westmalle

2

0

0

1

0

1

3

1

2

Dictionnaire :

Page 13: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 13

Page 14: Oracle 12c in memory en action

Oracle 12c In Memory

• Provisionnement du pool In Memory

• Montée d’une table dans le pool In Memory

09/02/2016 14

SQL> ALTER SYSTEM SET INMEMORY_SIZE=10G SCOPE=SPFILE;

SQL> SHUTDOWN IMMEDIATE

SQL> STARTUP

SQL> ALTER TABLE SALES INMEMORY;

SQL> ALTER TABLE SALES INMEMORY (PRODUCT_ID);

SQL> ALTER TABLE SALES NO INMEMORY;

SQL> ALTER TABLE SALES

2 > MODIFY PARTITION SALES_Q2_1998 INMEMORY;

Page 15: Oracle 12c in memory en action

Oracle 12c In Memory

• Priorité de montée en mémoire

– NONE < LOW < MEDIUM < HIGH < CRITICAL

– Détermine comment sont montées les colonnes en mémoire• NONE (Défaut) : montée lors du premier accès

• CRITICAL : montée immédiate ET au démarrage d’instance

09/02/2016 15

SQL> ALTER TABLE CUSTOMER INMEMORY PRIORITY CRITICAL;

SQL> ALTER TABLE CUSTOMER INMEMORY PRIORITY NONE;

Page 16: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 16

Volumétries grandissantes

Besoin en analyse de données

Besoin de rapidité

d’exécution

Structure de données adaptée

Compression des données

Page 17: Oracle 12c in memory en action

Oracle 12c In Memory

• Compression

– Objectif : réduire la volumétrie des données en mémoire

– Format IMCU adapté à une compression efficace

– Différents niveaux• DML

• QUERY LOW (défaut)

• QUERY HIGH

• CAPACITY LOW

• CAPACITY HIGH

09/02/2016 17

SQL> ALTER TABLE CUSTOMER INMEMORY MEMCOMPRESS FOR QUERY HIGH;

SQL> ALTER TABLE ORDERS INMEMORY MEMCOMPRESS FOR DML;

Taux decompression

Rapiditéd’exécution

des requêtes

Page 18: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 18

Volumétries grandissantes

Besoin en analyse de données

Besoin de rapidité

d’exécution

Structure de données adaptée

Compression des données

Algorithmes adaptés

Page 19: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 19

Page 20: Oracle 12c in memory en action

Oracle 12c In Memory

• Algorithmes et optimisations

–Objectifs

• Réduire les volumes traités (filtres)

• Réduire le nombre d’opérations (traitements à plusieurs, utilisation du format adéquat)

• Limiter l’impact des volumes sur les traitements (optimisation des jointures, des opérations d’agrégation)

09/02/2016 20

Page 21: Oracle 12c in memory en action

Oracle 12c In Memory

• Algorithmes et optimisations– Utilisation du format adéquat

09/02/2016 21

• Transactionnel et analytique en même temps– Les traitements OLTP tirent bénéfice de l’organisation en lignes

– Les traitements analytiques tirent bénéfice de l’organisation en colonnes

CBO

Page 22: Oracle 12c in memory en action

Oracle 12c In Memory

• Algorithmes et optimisations– Réduire le nombre d’opérations

09/02/2016 22

Suppression des index analytiques (Bitmap)

Optimisation par le format de l’IMCU qui intègre la valeur minimale et maximale

Page 23: Oracle 12c in memory en action

Oracle 12c In Memory

• Si une transaction est enregistrée sur le buffer cache

– le pool IM est maintenu consistant par le Transaction Manager

– L’image avant est maintenue dans le pool IM (SMU)

– La lecture consistante est gérée via le SCN … comme auparavant

– La transaction est enregistrée dans les redo log … comme auparavant

09/02/2016 23

Page 24: Oracle 12c in memory en action

Oracle 12c In Memory

• Traitement à plusieurs + filtrage

• Opérations SIMD (Single Instruction Multiple Data)

– Instructions CPU non spécifiques à Oracle

– Disponibles chez Intel dans les jeux d’instructions SSE (SSE, SSE2, SSE3, SSE4), AVX, AVX2 et AVX-512

– Disponibles sur Power PC, Sparc (VIS & VIS2)

– Utilisation de registres vectoriels

– Permet de traiter plusieurs données en une seule instruction

09/02/2016 24

Page 25: Oracle 12c in memory en action

Oracle 12c In Memory

• Opérations SIMD

– Registre de 128 octets (8 x 16 octets)

– 1024 opérations en mode scalaire = 128 op. en SIMD

09/02/2016 25

Le format d’IMCU estparticuliérement adapté à

ces opérations

Page 26: Oracle 12c in memory en action

Oracle 12c In Memory

• Opérations SIMD

– Les nouveaux processeurs Intel Xeon E5-V3 intégreront les instructions AVX-512 avec des registres de 512 octets

– Références• http://www.intel.com/content/dam/www/public/us/en/documents/white-

papers/performance-xeon-e5-v3-advanced-vector-extensions-paper.pdf

• https://software.intel.com/sites/default/files/m/d/4/1/d/8/Intro_to_Intel_AVX.pdf

09/02/2016 26

Page 27: Oracle 12c in memory en action

Oracle 12c In Memory

• Filtrage et optimisation des jointures

• Filtre de Bloom

– Structure de données probabiliste (tableau de bits)

– Permet d’affirmer :• Avec certitude, qu’une valeur ne fait pas partie d’un jeu de

données

• Sans certitude, qu’une valeur fait partie d’un jeu de données (faux positifs qui diminuent avec la taille du jeu de données)

09/02/2016 27

Plus d’information sur la structure - http://antognini.ch/papers/BloomFilters20080620.pdf

- http://fr.wikipedia.org/wiki/Filtre_de_Bloom

Page 28: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 28

• Filtres de bloom

– Utilisés depuis Oracle 10g notamment :

• Partition Pruning

• Optimisation des jointures par HASH

• Smart Scan Exadata (Elimination des données sur le storage server)

Page 29: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 29

• Filtres de bloom sur Oracle 12c In Memory– Optimisation des jointures en utilisant la structure de données IMCU

et les instructions SIMD

CL_ID NOM PAYS

1 Dupont FR

2 Gilmour UK

3 Martin FR

4 Schultz DE

5 Durand FR

6 Waters UK

7 Mason UK

8 Wright UK

9 Lindemann DE

10 Kruspe DE

CL_ID V_ID MONTANT

1 1 150

2 2 300

9 3 10

8 4 350

2 5 180

7 6 654

4 7 1524

4 8 354

9 9 136

10 5 789

…/… …/… …/…

SELECT c.NOM, v.V_IDFROM CLIENT c, VENTE vWHERE PAYS=‘UK’ AND v.MONTANT>150AND C.CL_ID=V.CL_ID

Bloom FilterCL_ID in 2,6,7,8

HASH JOIN

4 Lignes 4 Lignes

Page 30: Oracle 12c in memory en action

Oracle 12c In Memory

• Optimisation des agrégations

• Transformation par double vecteur de clé

– Optimiser les agrégations de données (GROUP BY) en tirant partie du format en colonne (VECTEUR)

– Transformation opérée par le CBO

– Optimisation des requêtes analytiques avec le format en colonne

09/02/2016 30

Page 31: Oracle 12c in memory en action

Oracle 12c In Memory

• Transformation par double vecteur de clé

09/02/2016 31

MAG_ID LIEU

EN001 Englos

LE001 Leers

LE002 Lens

SE001 Seclin

V2001 V2

…/… …/…

PR_ID NOM

CHI1 Chimay

DUV1 Duvel

GRI1 Grimbergen

KAR1 Karmeliet

KWA1 Kwak

LEF1 Leffe

WES1 Westmalle

MAG_ID

PR_ID MONTANT

SE001 GRI1 150

SE001 DUV1 300

LE002 KWA1 10

SE001 LEF1 350

V2001 WES1 180

LE001 GRI1 654

SE001 WES1 1524

EN001 KAR1 354

LE001 CHI1 136

V2001 WES1 789

…/… …/… …/…

0 3 1 2 4 5

1 0 2 4 5 6 3

CHI1 DUV1 GRI1 KAR1 KWA1 LEF1 WES1

EN001

LE001

LE002

SE001 150 1524

V2001 180 789

1- Création d’un vecteur de clés sur PR_ID

1- Création d’un vecteur de clés sur MAG_ID

2- Applications des vecteurs de clés(prédicat de jointure)

3 - Création d’un accumulateur des données IM(à la volée)

4 – Calcul des agrégats

Page 32: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 32

Page 33: Oracle 12c in memory en action

Oracle 12c In Memory

• Contexte #1– Base d’environ 15Go

– Oracle Enterprise Linux 7 : 4 vCPU

– Extensions ssse3 (SIMD)

– Charge de type TPC-H : historique des ventes

• 22 requêtes analytiques

• Résultats exprimés en QphH (Queries per hour)

– Passe 1 : SGA : 22Go et INMEMORY_SIZE : 0 (Buffer Cache : 20Go), PGA : 5Go

– Passe 2 : SGA : 22Go et INMEMORY_SIZE : 10Go (Buffer Cache : 10Go) sans données montées en pool IM , PGA : 5Go.

– Passe 3 : SGA : 22Go et INMEMORY_SIZE : 10Go (Buffer Cache : 10Go) avec données montées (Compression QUERY HIGH), PGA : 5Go.

09/02/2016 33

Page 34: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 34

0

5000

10000

15000

20000

25000

30000

R1 R2 R3 R4 R5 R6 R7 R8 R9 R10 R11 R12 R13 R14 R15 R16 R17 R18 R19 R20 R21 R22

TEM

PS

(1/1

00

SEC

ON

DE)

REQUETE

Comparaison In Memory serveur local (Elasped time)

TPCH@10 BC 20Go - T2 TPCH@10 BC 10Go - T2 TPCH@10 IM 10Go - T2

Page 35: Oracle 12c in memory en action

Oracle 12c In Memory

• Contexte #2– Base d’environ 50 Go

– Instance EC2 Amazon : 8 vCPU sous Redhat EL 7

– Extensions AVX

– Charge de type TPC-H : historique des ventes

• 22 requêtes analytiques

• Résultats exprimés en en QphH (Queries per hour)

– Passe 1 : SGA : 55Go et INMEMORY_SIZE : 22,5 Go (Buffer Cache : 10Go) sans données montées en pool IM, PGA : 5Go.

– Passe 2 : SGA : 55Go et INMEMORY_SIZE : 22,5 Go (Buffer Cache : 10Go) avec données montées (Compression QUERY HIGH), PGA : 5Go.

09/02/2016 35

Page 36: Oracle 12c in memory en action

Oracle 12c In Memory

09/02/2016 36

0

10000

20000

30000

40000

50000

60000

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22

Comparaison In Memory Amazon EC2 (Elasped time)

TPCH@30 BC (AWS 55Go SGA + 22,5Go IM) TPCH@30 IM (AWS 55Go SGA + 22,5Go IM)

Page 37: Oracle 12c in memory en action

Oracle 12c In Memory

• Résultats

09/02/2016 37

Page 38: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 38

Page 39: Oracle 12c in memory en action

Oracle 12c In Memory

• RAC

– Chaque nœud dispose de son pool IM

– Les objets sont automatiquement distribués sur tous les nœuds

– La distribution est gérée au niveau segment (TABLE, PARTITION, SOUS PARTITION)

– Les requêtes peuvent être parallélisées sur tous les nœuds pour obtenir des données locales

09/02/2016 39

SQL> ALTER TABLE CUSTOMER INMEMORY DISTRIBUTE AUTO;

SQL> ALTER TABLE SALES INMEMORY DISTRIBUTE BY PARTITION;

Page 40: Oracle 12c in memory en action

Oracle 12c In Memory

• Multitenant

– Par défaut, les pluggable databases (PDB) héritent de la configuration du conteneur root

– La taille du pool IM est configurable par PDB

– Le surprovisionnement est possible

09/02/2016 40

Page 41: Oracle 12c in memory en action

Oracle 12c In Memory

• Ai-je encore besoin de mon Exadata ?

– Exadata étend les données analytiques au cache Flash et aux disques de l’Exadata

– Bénéfice du Smart Scan

– Sur Exadata les IMCU sont copiés sur les autres computes nodes afin d’assurer la tolérance de panne

09/02/2016 41

In Memory ne remplace pas Exadata, il en augmente

la puissance

Page 42: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 42

Page 43: Oracle 12c in memory en action

Oracle 12c In Memory

• Combien ça coûte ?– Option de l’Enterprise Edition

– 23 000$ / CPU Oracle (2 cores Intel) soit environ 18400€

… non négocié par votre partenaire

• Vous trouvez ça cher ?

• Qui a dit ? : « Nous reconnaissons que notre technologie est plus chère qu’Oracle »

• Qui a dit ? : « Nous assumons n’accorder aucune réduction à nos produits, contrairement aux usages en France »

09/02/2016 43

Franck CohenPrésident EMEA - SAP

Franck CohenPrésident EMEA - SAP

Source : http://www.silicon.fr/usf-sap-hana-trop-cher-89969.html

Page 44: Oracle 12c in memory en action

Oracle 12c In Memory

• SAP Hana– Nécessite une appliance dédiée supportée par HANA (Dell, IBM etc.)

– Appliances limitées par la DRAM (http://scn.sap.com/docs/DOC-

52522#jive_content_id_Supported_Hardware_Platforms_RHEL_for_SAP_HANA_Single_Node_ )

– SAP HANA utilise deux caches (lignes et colonnes)

– Les opérations de fusions des données de caches (automatiques) peuvent s’avérer problématiques lors de forte activité transactionnelle (http://scn.sap.com/community/developer-center/hana/blog/2014/06/08/oltp-performace-tunning-of-column-table-in-sap-hana)

“…/…

Two segments of data in different store format will be processed and the calculator always switches between column engine and row engine, which results in bad performance. We recommend doing a manual merge when data in Delta area is large enough or after executing sequences of transactions.

…/…”

– Nécessité de réécrire les applications et revoir les middleware

09/02/2016 44

Page 45: Oracle 12c in memory en action

Oracle 12c In Memory

• SAP Hana

– Coûts liés à l’OPEX : nouvelle équipe, formation du personnel, nouvelles procédures etc.

– Coûts liés au CAPEX : nouveau hardware, nouveaux logiciels

– Haute disponibilité via cluster « Shared Nothing »• Réplication du stockage et des systèmes

• Architecture complexe – Serveur de noms MASTER ou SLAVE : la topologie du cluster

– Serveur d’indexation WORKER ou STANDBY : contient les datastores et traite l’information

– Serveur de statistiques : collecte les informations de statut, performance et consommation ressources

• Rôle et nombre de serveurs difficilement interopérables09/02/2016 45

Page 46: Oracle 12c in memory en action

Oracle 12c In Memory

• SQL Server 2014 : OLTP In Memory Optimization

– Optimisation pour l’OLTP

– Pool In Memory limité à 250 Go (http://msdn.microsoft.com/en-

us/library/dn170449.aspx)

– De nombreuses limitations dans la gestion des transactions sur les tables InMemory (cf. http://msdn.microsoft.com/en-

us/library/dn133169.aspx, partie Limitations)

• Nécessité de réécrire une partie du code

09/02/2016 46

Page 47: Oracle 12c in memory en action

Oracle 12c In Memory

• IBM DB2 10.5 With BLU Acceleration

- Les tables sont organisées en ligne OU en colonne

- L’utilisation colonne + ligne (shadow tables) utilise un mécanisme de réplication basé sur IBM InfoSphere CDC (Réplication)

- Solution complexe à mettre en œuvre

- Solution nécessitant de nombreux produits (Information Server, Replication Server, Access Server, et Management Console)

- Utilise un stockage sur SSD mais pas en DRAM

09/02/2016 47

Page 48: Oracle 12c in memory en action

Oracle 12c In Memory

• Agenda

– Structure de données

– Opérations de chargement et de compression

– Algorithmes et optimisations

– Quelques résultats

– RAC, Multitenant, Exadata

– La concurrence

– Etude de ROI

09/02/2016 48

Page 49: Oracle 12c in memory en action

Oracle 12c In Memory

• ROI : Contexte – Application Oracle déjà en place sur EE + Partitionnement

– Estimation de coût en €/QphH

– Achat de 4 CPUs In Memory (8 cores Intel).

– Base de travail : test sur EC2 Amazon (plus représentatif)

– Investissement :

• Licences : 4 x 18 400€ = 73600 €

• Prestation d’accompagnement (5 à 10j) : 9000€

• 0 Formation, 0 DBA en plus

09/02/2016 49

Economie de : 201,84 € par QphH

Amortissement ≈ 409j ≈ 1,1 année

QphH@30g€/QphH

(Base de location AWS : 17500€/3ans)

TPCH@30 BC (AWS EC2) 61,06 286,60

TPCH@30 IM (AWS EC2) 206,47 84,76

Page 50: Oracle 12c in memory en action

Oracle 12c In Memory

• Cas d’utilisation

– Batch de calcul des approvisionnements magasins• Intégration des données de Stock

• Intégration de l’historique des ventes

• Intégration des offres promotionnelles

– Allongement de la durée (Criticité de fin de traitements)

– Problème dans l’approvisionnement des magasins

– Avec In Memory column Store• Le batch est réduit de 3h

• Les colis partent à temps

• Les magasins sont approvisionnés à l’heure09/02/2016 50

Page 51: Oracle 12c in memory en action
Page 52: Oracle 12c in memory en action

CONCLUSION

Emmanuel Docquois – Ingénieur Avant Vente

09/02/2016 52

Page 53: Oracle 12c in memory en action

@techsys_fr