Introduction
Une instance standalone MariaDB ColumnStore 1.2.3 est installée et configurée sur Ubuntu 18 dans cet article.
- L’installation est réalisée avec un compte non root (user
mcs
). MariaDB ColumnStore s’exécutera avec le usermcs
. - Le stockage est interne.
- La base de données frontale MySQL/MariaDB est installée dans le répertoire
/sqlpac/mcs/mysql
. - Un DBRoot ColumnStore avec un seul disque est créé (
DBRoot1
) et installé dans le répertoire/sqlpac/mcs/data1
.
Pré-requis
Préparation du user mcs
MariaDB ColumnStore sera installé et s’exécutera avec le user mcs
(id: 10010, $HOME : /opt/mcs)
.
Pour une installation non root :
- Le répertoire home (
$HOME
) doit être le répertoire d’installation racine de MariaDB ColumnStore. - Le nom du groupe doit avoir le même nom que le nom du user (
mcs
). - Lors de la préparation de l’installation de multiples instances, le user id et le group id doivent être les mêmes sur toutes les machines.
root@vps$ useradd -d /opt/mcs -m -u 10010 -s /bin/bash mcs
Configuration système requise
Augmenter les paramètres "number of opened files
" dans le fichier de configuration /etc/security/limits.conf
pour le user mcs
.
/etc/security/limits.conf
mcs hard nofile 65536
mcs soft nofile 65536
Installation des dépendances de packages
Les packages suivants sont requis :
- libboost
- libjemalloc (memory allocator)
- libsnappy (bibliothèque de compression)
Si ils ne sont pas installés, en tant que root
:
root@vps$ apt-get install libboost-all-dev
root@vps$ apt-get install libjemalloc1
root@vps$ apt-get install libsnappy1v5
MariaDB ColumnStore - Téléchargement et installation
Télécharger MariaDB ColumnStore 1.2.3 depuis le site MariaDB : mariadb-columnstore-1.2.3-1-bionic.amd64.bin.tar.gz.
Avec l’utilisateur mcs
, dézipper et extraire l’archive dans le répertoire $HOME
.
mcs@vps$ cd $HOME
mcs@vps$ gunzip mariadb-columnstore-1.2.3-1-bionic.amd64.bin.tar.gz
mcs@vps$ tar xvf mariadb-columnstore-1.2.3-1-bionic.amd64.bin.tar
Ne pas changer la structure du répertoire lors de l’extraction, le répertoire d’installation doit absolument être $HOME/mariadb/columnstore
,
sinon le setup échoue.
Configuration et installation
Modification des localisations des bases de données
Avant de lancer le moindre script post installation et de construire le système, dans cet article la base de données frontale MySQL et le DBRoot ColumnStore ne sont pas installés
dans leurs emplacements par défaut, respectivement $HOME/mariadb/columnstore/mysql/db
et $HOME/mariadb/columnstore/data1
.
Dans un tel cas, des liens symboliques doivent être créés :
mcs@vps$ ln -s /sqlpac/mcs/mysql /opt/mcs/mariadb/columnstore/mysql/db
mcs@vps$ ln -s /sqlpac/mcs/data1 /opt/mcs/mariadb/columnstore/data1
Vérifier que le user mcs
est le propriétaire de ces nouveaux emplacements.
post-install
Avec le user mcs
, lancer le script post-install
.
S’assurer que le script post-install
est exécuté avec pour répertoire courant le répertoire $HOME
.
mcs@vps$ ./mariadb/columnstore/bin/post-install --installdir=$HOME/mariadb/columnstore
Diverses configurations sont préparées par ce script (liens vers les librairies, répertoires…).
La sortie du script donne les prochaines étapes à réaliser en fonction du contexte.
NOTE: For non-root install, you will need to run the following commands as root user to
setup the MariaDB ColumnStore System Logging
export COLUMNSTORE_INSTALL_DIR=/opt/mcs/mariadb/columnstore
export LD_LIBRARY_PATH=:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib
/opt/mcs/mariadb/columnstore/bin/syslogSetup.sh --installdir=/opt/mcs/mariadb/columnstore --user=mcs install
The next steps are:
If installing on a pm1 node using non-distributed install
export COLUMNSTORE_INSTALL_DIR=/opt/mcs/mariadb/columnstore
export LD_LIBRARY_PATH=:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib
/opt/mcs/mariadb/columnstore/bin/postConfigure -i /opt/mcs/mariadb/columnstore
If installing on a pm1 node using distributed install
export COLUMNSTORE_INSTALL_DIR=/opt/mcs/mariadb/columnstore
export LD_LIBRARY_PATH=:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib
/opt/mcs/mariadb/columnstore/bin/postConfigure -i /opt/mcs/mariadb/columnstore -d
If installing on a non-pm1 using the non-distributed option:
export COLUMNSTORE_INSTALL_DIR=/opt/mcs/mariadb/columnstore
export LD_LIBRARY_PATH=:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib
/opt/mcs/mariadb/columnstore/bin/columnstore start
syslogSetup.sh
Un seul script doit être exécuté en tant que root
: syslogSetup.sh
. Ce script configure les fonctionnalités de journalisation dans le
répertoire /var/log/mariadb/columnstore
. Si ce n’est pas réalisé, les fichiers de log ne seront pas disponibles à des fins
de diagnostic (crit.log, warn.log, info.log, debug.log, warn.log…
).
root@vps$ export COLUMNSTORE_INSTALL_DIR=/opt/mcs/mariadb/columnstore
root@vps$ export LD_LIBRARY_PATH=:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib
root@vps$ /opt/mcs/mariadb/columnstore/bin/syslogSetup.sh --installdir=/opt/mcs/mariadb/columnstore --user=mcs install
System logging being used: rsyslog
postConfigure
Le système columnstore est alors construit avec le script postConfigure
en tant que mcs
.
Un module de performance pm1 est généré en utilisant une installation non distribuée.
mcs@vps$ export COLUMNSTORE_INSTALL_DIR=/opt/mcs/mariadb/columnstore
mcs@vps$ export LD_LIBRARY_PATH=:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib
mcs@vps$ /opt/mcs/mariadb/columnstore/bin/postConfigure -i /opt/mcs/mariadb/columnstore
Un assistant démarre :
- Type de serveur système : standalone/unique (
single
) - Nom du système (System name) :
mcs1
- Type de stockage de données : interne (
internal
) - DBRoot IDs assignés au module pm1 : 1
This is the MariaDB ColumnStore System Configuration and Installation tool.
It will Configure the MariaDB ColumnStore System and will perform a Package
Installation of all of the Servers within the System that is being configured.
IMPORTANT: This tool requires to run on the Performance Module #1
Prompting instructions:
Press 'enter' to accept a value in (), if available or
Enter one of the options within [], if available, or
Enter a new value
===== Setup System Server Type Configuration =====
There are 2 options when configuring the System Server Type: single and multi
'single' - Single-Server install is used when there will only be 1 server configured
on the system. It can also be used for production systems, if the plan is
to stay single-server.
'multi' - Multi-Server install is used when you want to configure multiple servers now or
in the future. With Multi-Server install, you can still configure just 1 server
now and add on addition servers/modules in the future.
Select the type of System Server install [1=single, 2=multi] (2) > 1
Performing the Single Server Install.
Enter System Name (columnstore-1) > mcs1
===== Setup Storage Configuration =====
----- Setup Performance Module DBRoot Data Storage Mount Configuration -----
There are 2 options when configuring the storage: internal or external
'internal' - This is specified when a local disk is used for the DBRoot storage.
High Availability Server Failover is not Supported in this mode
'external' - This is specified when the DBRoot directories are mounted.
High Availability Server Failover is Supported in this mode.
Select the type of Data Storage [1=internal, 2=external] (1) > 1
Enter the list (Nx,Ny,Nz) or range (Nx-Nz) of DBRoot IDs assigned to module 'pm1' (1) >1
Lorsque l’installation est terminée avec succès :
===== Performing Configuration Setup and MariaDB ColumnStore Startup =====
NOTE: Setting 'NumBlocksPct' to 50%
Setting 'TotalUmMemory' to 25% of total memory.
Running the MariaDB ColumnStore setup scripts
post-mysqld-install Successfully Completed
post-mysql-install Successfully Completed
Starting MariaDB Columnstore Database Platform
Starting MariaDB ColumnStore Database Platform Starting, please wait ..... DONE
System Catalog Successfull Created
MariaDB ColumnStore Install Successfully Completed, System is Active
Enter the following command to define MariaDB ColumnStore Alias Commands
. /opt/mcs/.profile
Enter 'mcsmysql' to access the MariaDB ColumnStore SQL console
Enter 'mcsadmin' to access the MariaDB ColumnStore Admin console
NOTE: The MariaDB ColumnStore Alias Commands are in /etc/profile.d/columnstoreAlias.sh
Variables d’environnement post installation
Après l’installation, le fichier .profile
pour le user mcs
est mis à jour. Des alias et variables d’environnement
très utiles sont définis.
$HOME/.profile
# MariaDB Columnstore Non-Root Environment Variables
export COLUMNSTORE_INSTALL_DIR=/opt/mcs/mariadb/columnstore
export LD_LIBRARY_PATH=:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib:/opt/mcs/mariadb/columnstore/lib:/opt/mcs/mariadb/columnstore/mysql/lib
# MariaDB Columnstore Non-Root Alias Variables
# MariaDB Columnstore Alias Commands
#
alias mcsmysql='/opt/mcs/mariadb/columnstore/mysql/bin/mysql --defaults-extra-file=/opt/mcs/mariadb/columnstore/mysql/my.cnf -u root'
alias ma=/opt/mcs/mariadb/columnstore/bin/mcsadmin
alias mcsadmin=/opt/mcs/mariadb/columnstore/bin/mcsadmin
alias cpimport=/opt/mcs/mariadb/columnstore/bin/cpimport
alias mcshome='cd /opt/mcs/mariadb/columnstore'
alias log='cd /var/log/mariadb/columnstore/'
alias core='cd /var/log/mariadb/columnstore/corefiles'
alias tmsg='tail -f /var/log/messages'
alias tdebug='tail -f /var/log/mariadb/columnstore/debug.log'
alias tinfo='tail -f /var/log/mariadb/columnstore/info.log'
alias terror='tail -f /var/log/mariadb/columnstore/err.log'
alias twarning='tail -f /var/log/mariadb/columnstore/warning.log'
alias tcrit='tail -f /var/log/mariadb/columnstore/crit.log'
alias dbrm='cd /opt/mcs/mariadb/columnstore/data1/systemFiles/dbrm'
alias mcsmodule='cat /opt/mcs/mariadb/columnstore/local/module'
Architecture des process Mariadb ColumnStore
11 process sont lancés dans un module de performance MariaDB ColumnStore, ProcMon (ProcessMonitor) est le processus parent
de tous les autres process à l’exception de mysql
:
mcs@vps$ ps -fauxwww | grep 'mcs'
\_ /opt/mcs/mariadb/columnstore/bin/ProcMon \_ [ProcMgr] \_ /opt/mcs/mariadb/columnstore/bin/controllernode fg \_ /opt/mcs/mariadb/columnstore/bin/ServerMonitor \_ /opt/mcs/mariadb/columnstore/bin/workernode DBRM_Worker1 fg \_ [PrimProc] \_ [ExeMgr] \_ [WriteEngineServ] \_ [DDLProc] \_ [DMLProc] \_ /opt/mcs/mariadb/columnstore/mysql//bin/mysqld --basedir=/opt/mcs/mariadb/columnstore/mysql/ \ --datadir=/opt/mcs/mariadb/columnstore/mysql/db \ --plugin-dir=/opt/mcs/mariadb/columnstore/mysql/lib/plugin \ --log-error=/opt/mcs/mariadb/columnstore/mysql/db/vps.err \ --pid-file=/opt/mcs/mariadb/columnstore/mysql/db/vps.pid \ --socket=/opt/mcs/mariadb/columnstore/mysql/lib/mysql/mysql.sock \ --port=3306
Les process écoutent sur différents ports, ports définis dans le fichier de configuration $HOME/mariadb/columnstore/etc/Columnstore.xml
:
mcs@vps$ lsof -i -P -n | grep LISTEN | grep 'mcs'
mysqld 16684 mcs 28u IPv6 182203 0t0 TCP *:3306 (LISTEN) controlle 16789 mcs 5u IPv4 183378 0t0 TCP *:8616 (LISTEN) ServerMon 16810 mcs 3u IPv4 183939 0t0 TCP *:8622 (LISTEN) workernod 16836 mcs 9u IPv4 183420 0t0 TCP *:8700 (LISTEN) PrimProc 16895 mcs 10u IPv4 183479 0t0 TCP *:8620 (LISTEN) ExeMgr 16979 mcs 11u IPv4 183577 0t0 TCP *:8601 (LISTEN) WriteEngi 17039 mcs 9u IPv4 183653 0t0 TCP *:8630 (LISTEN) DDLProc 17079 mcs 10u IPv4 183747 0t0 TCP *:8612 (LISTEN) DMLProc 17138 mcs 10u IPv4 183871 0t0 TCP *:8614 (LISTEN) ProcMon 24558 mcs 4u IPv4 150911 0t0 TCP *:8800 (LISTEN) ProcMon 24558 mcs 11u IPv4 150920 0t0 TCP *:8604 (LISTEN) ProcMgr 24680 mcs 9u IPv4 151557 0t0 TCP *:8603 (LISTEN) ProcMgr 24680 mcs 10u IPv4 151555 0t0 TCP *:8606 (LISTEN)
Un schéma est plus explicite :
Utiliser la console mcsadmin
pour gérer MariaDB Columnstore.
Lister les process - getProcessStatus
mcs@vps$ mcsadmin getProcessStatus
getprocessstatus Thu Dec 12 13:50:04 2019 MariaDB ColumnStore Process statuses Process Module Status Last Status Change Process ID ------------------ ------ --------------- ------------------------ ---------- ProcessMonitor pm1 ACTIVE Fri Nov 15 13:37:48 2019 22045 ProcessManager pm1 ACTIVE Fri Nov 15 13:37:54 2019 22171 DBRMControllerNode pm1 ACTIVE Fri Nov 15 13:38:00 2019 22581 ServerMonitor pm1 ACTIVE Fri Nov 15 13:38:02 2019 22604 DBRMWorkerNode pm1 ACTIVE Fri Nov 15 13:38:03 2019 22656 PrimProc pm1 ACTIVE Fri Nov 15 13:38:06 2019 22694 ExeMgr pm1 ACTIVE Fri Nov 15 13:38:10 2019 22771 WriteEngineServer pm1 ACTIVE Fri Nov 15 13:38:14 2019 22853 DDLProc pm1 ACTIVE Fri Nov 15 13:38:19 2019 22916 DMLProc pm1 ACTIVE Fri Nov 15 13:38:23 2019 22981 mysqld pm1 ACTIVE Fri Nov 15 13:38:00 2019 22470
Démarrer / Stopper le système ColumnStore
Utiliser mcsadmin
pour démarrer et arrêter le système de base de données ColumnStore :
mcs@vps$ mcsadmin startSystem
startsystem Thu Dec 12 14:32:13 2019 startSystem command, 'columnstore' service is down, sending command to start the 'columnstore' service on all modules System being started, please wait........... Successful start of System
mcs@vps$ mcsadmin shutdownSystem y
shutdownsystem Thu Dec 12 14:38:02 2019 This command stops the processing of applications on all Modules within the MariaDB ColumnStore System Checking for active transactions Stopping System... Successful stop of System Shutting Down System... Successful shutdown of System
L’option shutdownSystem
arrête l’intégralité du système. Avec l’option stopSystem
, tous les process
sont arrêtés sauf ProcessMonitor et ProcessManager.
Configuration, utilisation des ressources
mcsadmin
donne des informations utiles sur la configuration (DBRoot…), l’utilisation des ressources (CPU, mémoire…) :
mcs@vps$ mcsadmin getStorageConfig
getstorageconfig Thu Dec 12 15:17:49 2019 System Storage Configuration Performance Module (DBRoot) Storage Type = internal System Assigned DBRoot Count = 1 DBRoot IDs assigned to 'pm1' = 1
mcs@vps$ mcsadmin getResourceUsage
getsystemresourceusage Thu Dec 12 15:18:23 2019 System Resource Usage per Module Module 'pm1' Resource Usage CPU: 3% Usage Mem: 7973380k total, 657728k used, 584824k cache, 8% Usage Swap: 0 k total, 0k used, 0% Usage Top CPU Process Users: f2b/server 6% Top Memory Process Users: mysqld 2%, systemd-journald 1%, mono 1%, DMLProc 1%, workernode 1% Disk Usage: / 78%
mcs@vps$ mcsadmin getModuleMemory pm1
getmodulememory Thu Dec 12 15:19:32 2019 Module Memory Usage (in K bytes) Module Mem Total Mem Used cache Mem Usage % Swap Total Swap Used Swap Usage % ------ --------- ------- ------- ---------- ---------- --------- ----------- pm1 7973380 658000 584840 8 0 0 0
Pour la liste complète des options disponibles avec la console mcsadmin
: utiliser mcsadmin help
.
La base de données frontale MySQL/MariaDB (Front End)
mcsmysql
Localement, utiliser l’alias mcsmysql
pour se connecter à la base de données. MariaDB 10.3.13 est embarqué avec MariaDB ColumnStore 1.2.3.
mcs@vps$ mcsmysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 10.3.13-MariaDB-log Columnstore 1.2.3-1
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
Moteurs de stockage (Storage engines), plugins, variables
Le moteur de stockage ColumnStore est installé et InnoDB est le moteur de stockage par défaut :
MariaDB [(none)]> show storage engines;
+--------------------+---------+----------------------------------------+--------------+------+------------+ | Engine | Support | Comment | Transactions | XA | Savepoints | +--------------------+---------+----------------------------------------+--------------+------+------------+ | Columnstore | YES | Columnstore storage engine | YES | NO | NO | | ... | | | | | | | MyISAM | YES | Non-transactional engine with good | NO | NO | NO | | | | performance and small data footprint | | | | | ... | | | | | | | InnoDB | DEFAULT | Supports transactions, | YES | YES | YES | | | | row-level locking, foreign keys | | | | | | | and encryption for tables | | | | | ... | | | | | | | Aria | YES | Crash-safe tables with MyISAM | NO | NO | NO | | | | heritage | | | | | ... | | | | | | +--------------------+---------+----------------------------------------+--------------+------+------------+
Plusieurs plugins relatifs au moteur de stockage ColumnStore sont activés :
MariaDB [(none)]> show plugins;
+-------------------------------+----------+--------------------+---------------------------+---------+ | Name | Status | Type | Library | License | +-------------------------------+----------+--------------------+---------------------------+---------+ | Columnstore | ACTIVE | STORAGE ENGINE | libcalmysql.so | GPL | | InfiniDB | ACTIVE | STORAGE ENGINE | libcalmysql.so | GPL | | COLUMNSTORE_TABLES | ACTIVE | INFORMATION SCHEMA | is_columnstore_tables.so | GPL | | COLUMNSTORE_COLUMNS | ACTIVE | INFORMATION SCHEMA | is_columnstore_columns.so | GPL | | COLUMNSTORE_EXTENTS | ACTIVE | INFORMATION SCHEMA | is_columnstore_extents.so | GPL | | COLUMNSTORE_FILES | ACTIVE | INFORMATION SCHEMA | is_columnstore_files.so | GPL |
Historiquement, le moteur de stockage ColumnStore a d’abord été développé par la société Calpont, société qui n’existe plus, et il s’appelait
InfiniDB. MariaDB ColumnStore est un "fork" de Calpont/InfiniDB. C’est pourquoi des librairies s’appellent par exemple libcalmysql.so
, cal
pour Calpont.
Les variables relatives au moteur de stockage ColumnStore sont nommées infinidb%
:
MariaDB [(none)]> show variables like 'infinidb%';
+---------------------------------------------+-------+ | Variable_name | Value | +---------------------------------------------+-------+ | infinidb_compression_type | 2 | | infinidb_decimal_scale | 8 | | infinidb_diskjoin_bucketsize | 100 | | infinidb_diskjoin_largesidelimit | 0 | | infinidb_diskjoin_smallsidelimit | 0 | | infinidb_double_for_decimal_math | OFF | | infinidb_import_for_batchinsert_delimiter | 7 | | infinidb_import_for_batchinsert_enclosed_by | 17 | | infinidb_local_query | 0 | | infinidb_ordered_only | OFF | | infinidb_string_scan_threshold | 10 | | infinidb_stringtable_threshold | 20 | | infinidb_um_mem_limit | 0 | | infinidb_use_decimal_scale | OFF | | infinidb_use_import_for_batchinsert | ON | | infinidb_varbin_always_hex | OFF | | infinidb_vtable_mode | 1 | +---------------------------------------------+-------+
Par défaut, la compression est définie à 2 (infinidb_compression_type : 2
), compression active.
Configuration cliente
ColumnStore utilise une base de données dédiée appelée infinidb_vtable
pour la création de toutes les tables temporaires
utilisées dans le traitement des requêtes impliquant des tables ColumnStore. La permission "CREATE TEMPORARY TABLES"
doit être
donnée à tous les comptes utilisateurs dans la base infinidb_vtable
.
MariaDB [(none)]> create user flightsdbo@'%' identified by '************';
MariaDB [(none)]> grant create temporary tables on infinidb_vtable.* to flightsdbo;
MariaDB [(none)]> flush privileges;
Lorsque la permission n’est pas donnée, une erreur se produit lors du traitement des requêtes :
ERROR 1044 (42000): Access denied for user 'flightsdbo'@'%' to database 'infinidb_vtable'
Création d’une table ColumnStore
Pour créér une table ColumnStore, utiliser simplement l’option engine=columnstore
dans la commande CREATE TABLE
.
MariaDB [(none)]> use flights;
MariaDB [(flights)]>
create table airlines (
iata_code char(2),
airline varchar(30)
) engine=columnstore default character set=utf8;
Chargement des données avec cpimport
cpimport
est l’utilitaire pour le chargement en masse de données à partir de fichiers plats.
Exemple : chargement des aéroports dans la table airports
(base de données flights
) à partir du fichier airports.csv
.
mcs@vps$ cpimport -m 2 -s ',' -E '"' flights airports -l $SCHEMA_DIR/airports.csv
2019-11-18 12:36:14 (25992) INFO : Running distributed import (mode 2) on all PMs... 2019-11-18 12:36:16 (25992) INFO : For table flights.airports: 342 rows processed and 342 rows inserted. 2019-11-18 12:36:16 (25992) INFO : Bulk load completed, total run time : 2.11828 seconds
La base de données flights
Une base de données de démo est disponible : Mariadb ColumnStore Flights Demo Database.
Dans cette base de données de démo, 3 tables : airlines
, airports
et flights
. Tous les vols intérieurs des États Unis pour l’année 2018 y sont stockés.
/opt/mcs/flights/data/2018-03.csv
2019-11-18 12:01:07 (2547) INFO : Running distributed import (mode 2) on all PMs...
2019-11-18 12:01:10 (2547) INFO : For table flights.flights: 665810 rows processed and 665810 rows inserted.
2019-11-18 12:01:10 (2547) INFO : Bulk load completed, total run time : 3.24067 seconds
/opt/mcs/flights/data/2018-04.csv
2019-11-18 12:01:11 (2674) INFO : Running distributed import (mode 2) on all PMs...
2019-11-18 12:01:15 (2674) INFO : For table flights.flights: 649023 rows processed and 649023 rows inserted.
2019-11-18 12:01:15 (2674) INFO : Bulk load completed, total run time : 4.22641 seconds
La variable infinidb_vtable_mode
Une variable importante : infinidb_vtable_mode
. Ce paramètre peut être défini au niveau serveur ou au niveau de la session.
MariaDB [(none)]> show variables like 'infinidb_vtable_mode%';
+----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | infinidb_vtable_mode | 1 | +----------------------+-------+
Valeur | Comportement |
---|---|
0 |
Des clauses WHERE peuvent être traitées par ColumnStore,
mais les jointures sont traitées dans leur intégralité par mysqld
avec le mécanisme de jointure boucles imriquées (nested-loop). |
1 |
Par défaut : la syntaxe de la requête est évaluée par ColumnStore pour compatibilité lors d’une exécution distribuée et les requêtes incompatibles sont rejetées. |
2 |
Mode Auto-switch : ColumnStore essaie de traiter la requête en interne, si il ne peut pas la requête bascule automatiquement en mode ligne à ligne. |
La valeur nécessaire va dépendre du mode de requêtage de l’application cible.
Informations méta-données ColumnStore
Consommation en espace
Dans la base de données columnstore_info
, la procédure stockée total_usage
renvoie l’espace utilisé dans le système ColumnStore :
MariaDB [(none)]> call columnstore_info.total_usage();
+-----------------+------------------+ | TOTAL_DATA_SIZE | TOTAL_DISK_USAGE | +-----------------+------------------+ | 701.76 MB | 764.35 MB | +-----------------+------------------+
Utiliser la procédure stockée columnstore_info.table_usage()
pour afficher l’espace utilisé par les tables ColumnStore.
MariaDB [(none)]> call columnstore_info.table_usage(null,null);
+--------------+------------+-----------------+-----------------+-------------+ | TABLE_SCHEMA | TABLE_NAME | DATA_DISK_USAGE | DICT_DATA_USAGE | TOTAL_USAGE | +--------------+------------+-----------------+-----------------+-------------+ | flights | airlines | 2.52 MB | 2.01 MB | 4.52 MB | | flights | airports | 9.55 MB | 6.02 MB | 15.58 MB | | flights | flights | 744.25 MB | 0.00 Bytes | 744.25 MB | +--------------+------------+-----------------+-----------------+-------------+
MariaDB [(none)]> call columnstore_info.table_usage('flights','flights');
+--------------+------------+-----------------+-----------------+-------------+ | TABLE_SCHEMA | TABLE_NAME | DATA_DISK_USAGE | DICT_DATA_USAGE | TOTAL_USAGE | +--------------+------------+-----------------+-----------------+-------------+ | flights | flights | 744.25 MB | 0.00 Bytes | 744.25 MB | +--------------+------------+-----------------+-----------------+-------------+
Taux de compression
Le taux de compression moyen est calculé avec la procédure stockée columnstore_info.compression_ratio
.
MariaDB [(none)]> call columnstore_info.compression_ratio();
+-------------------+ | COMPRESSION_RATIO | +-------------------+ | 2.7716:1 | +-------------------+
INFORMATION_SCHEMA
MariaDB ColumnStore implémente quatre tables "Information Schema" qui exposent les informations sur les tables, colonnes et leur stockage :
COLUMNSTORE_TABLES
COLUMNSTORE_COLUMNS
COLUMNSTORE_EXTENTS
COLUMNSTORE_FILES
Les procédures stockées columnstore_info.total_usage()
, columnstore_info.table_usage()
,
columnstore_info.compression_ratio()
reposent sur ces tables d’information.
MariaDB [information_schema]> select * from columnstore_tables;
+--------------+------------+-----------+---------------+--------------+---------------+ | TABLE_SCHEMA | TABLE_NAME | OBJECT_ID | CREATION_DATE | COLUMN_COUNT | AUTOINCREMENT | +--------------+------------+-----------+---------------+--------------+---------------+ | flights | airlines | 3000 | 2019-11-18 | 2 | NULL | | flights | airports | 3004 | 2019-11-18 | 7 | NULL | | flights | flights | 3015 | 2019-11-18 | 32 | NULL | +--------------+------------+-----------+---------------+--------------+---------------+
Pour trouver où est stockée une colonne, ses propriétés et sa taille, par exemple la colonne year
dans la table flights
:
MariaDB [information_schema]> SELECT b.table_name as "Table", b.column_name as "Column", a.filename, a.file_size, a.compressed_data_size, c.min_value as "Min", c.max_value as "Max" FROM COLUMNSTORE_FILES a, COLUMNSTORE_COLUMNS b, COLUMNSTORE_EXTENTS c WHERE a.object_id = b.object_id AND b.object_id = c.object_id AND b.COLUMN_NAME='year' AND b.table_name='flights'
+-----------+--------+----------------------------------------------------------------------------------------+ | Table | Column | filename | +-----------+--------+----------------------------------------------------------------------------------------+ | flights | year | /opt/mcs/mariadb/columnstore/data1/000.dir/000.dir/012.dir/136.dir/000.dir/FILE001.cdf | +-----------+--------+----------------------------------------------------------------------------------------+ | file_size | compressed_data_size | Min | Max | +-----------+----------------------+---------+--------+ | 16785408 | 860160 | 2015 | 2017 | +-----------+----------------------+---------+--------+
Les valeurs min
et max
sont des informations importantes lorsque le moteur ColumnStore exécute les requêtes,
ces valeurs gouvernent l’élimination des partitions.
Conclusion
L’installation d’un systèmes MariaDB ColumnStore standalone est assez simple et adéquate pour démarrer et tester avant de planifier des architectures avec de multiples modules de performance.
Premiers tests réalisés avec des requêtes analytiques : les performances sont très bonnes. Mais il y a un gros inconvénient : impossible de créér des contraintes d’unicité pour renforcer la qualité des données. Si des lignes en doubles sont insérées par erreur, les tuples en double doivent être supprimés manuellement.
Un autre inconvénient (pour l’heure actuelle), l’alimentation n’est vraiment efficace qu’en utilisant cpimport
.
Comme la plupart des systèmes stockage en colonnes, les mises à jour atomiques au fil de l’eau (INSERT, UPDATE, DELETE
) ne sont pas optimales avec MariaDB ColumnStore
en performances et en stockage. C’est probablement la raison pour laquelle la réplication n’est pas (encore) implémentée et supportée.