Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Performance avec MariaDB

Performance avec MariaDB

Présentation effectuée lors du meetup "Performance" organisé par LeMug.fr le 8 juin 2023

Avatar for lemugfr

lemugfr

June 08, 2023

Other Decks in Technology

Transcript

  1. Bonjour Sébastien GIRAUD Senior Solution Architect MariaDB Plc • Plus

    de 4 ans chez MariaDB • Précédemment client de MariaDB • Devops / Open Source • Architecture Mon job ? • Aider ! • Faire marcher des trucs ;)
  2. Agenda • Qu’est ce que MariaDB • Comprendre MariaDB •

    Bref rappel de l’architecture de MariaDB • Ou trouver les performances • Identifier les ralentissements • Les autres options
  3. Qu’est ce que MariaDB • Une base de donnée •

    Open source • Multi moteur • Hautement configurable (800 variables)
  4. Comprendre MariaDB • MariaDB est une solution modulaire ◦ Moteurs

    de stockage ◦ Plugins • Architecture Linux like ◦ Hautement ajustable ◦ 800 variables de configuration • Solution green (codé en C) ◦ Package de 100 Mo • Réplication entre différents moteurs • Ecosystem de plus en plus complet ◦ MaxScale ◦ MariaBackup ◦ MariaDB Shell ◦ Connecteurs ◦ Cloud DBaaS SkySQL
  5. Comprendre MariaDB • MariaDB est une solution modulaire • Architecture

    Linux like • Ne pas utiliser la configuration par défaut en production • Bien comprendre les besoins de l’application ◦ R/W ratio ◦ Nombre de connections max ◦ Cache hit ratio
  6. Comprendre MariaDB • Pourquoi MariaDB est magique ? ◦ Réplication

    inter moteur de stockage ◦ Proxy fédérateur C’est quoi ce proxy ? En quoi c’est vraiment magique ?
  7. Performances locales : la mémoire globale • La mémoire contient

    les droits des utilisateurs utilisé à chaque requête • swappiness = 1 • Performance schema • MariaDB Shell
  8. Performances locales : la mémoire globale • La mémoire contient

    les droits des utilisateurs utilisé à chaque requête • table _open_cache • table_definition_cache • query_cache_size • thread_cache • MyIsam ◦ key_buffer_size • InnoDB ◦ innodb_buffer_pool_size ◦ innodb_additional_mem_pool_size ◦ innodb_log_buffer_size
  9. Performances locales : la mémoire par session • Allocation pour

    chaque client • Allocation pour les join et sort • Libération à la fermeture de la session ou de la connection • Toujours penser au OOM • SWAP (encore et toujours …)
  10. Performances locales : le disque • La persistance s’appuie sur

    le disque • Redondance des disque • Ajuster la réplication asynchrone au besoins réel de l’application considérée ◦ sync_binlog ◦ sync_relay_log
  11. Performances ailleurs ? • Adapter l’architecture aux besoins de performance

    • Comprendre le use case • Multiplier les moteur au besoin • Proxy fédérateur pour tout simplifier
  12. MaxScale distribue le traffic 16 Primary Replicas 172.20.0.2 172.20.0.3 172.20.0.4

    172.20.0.6:4006 Failover automatique et Read Write Split Service Applications & Tools Application connects to MaxScale
  13. MaxScale rattrappe le coup ;) 17 Primary Replicas 172.20.0.2 172.20.0.3

    172.20.0.4 172.20.0.6:4006 Read Write Split Service Applications & Tools Primary failure Replica promoted to primary
  14. MaxScale, euh non on a rien vu ! 18 Primary

    Replicas 172.20.0.2 172.20.0.3 172.20.0.4 172.20.0.6:4006 Read Write Split Service Replica Applications & Tools Server re-incorporate as replica
  15. Charges analytiques ? • Charge analytique ◦ Besoins en lecture

    principalement ◦ Overhead en écriture ◦ Très bonne solution dans les cas de requête en lecture portant sur un dataset conséquent • Les limites du modèle B-tree ?
  16. B-tree indexes The good B-tree indexes The bad • Well

    known technology • Works with most types of data • Scales reasonably well • Really good for OLTP transactional data • Really bad for unbalanced data • Index modifications can be really slow • Index modifications are largely single threaded • Slows down with the amount of data • Really not scalable with large amount of data
  17. En résumé, l’analytique ? • Quelque chose qui peut compresser

    BEAUCOUP de données • Quelque chose sur lequel on peut écrire avec des performances rapides et prévisibles • Quelque chose qui ne supporte pas nécessairement les transactions ◦ Cela ne fait pas de mal, mais les performances sont bien plus importantes. • Un système capable de prendre en charge les requêtes analytiques ◦ Requêtes ad hoc ◦ Requêtes agrégées ◦ Ensembles de données volumineux • Un système capable de s'adapter à la croissance des données • Un système capable d'assurer un niveau de haute disponibilité • Qui fonctionne avec des outils d'analyse, tels que Tableau, R, etc.
  18. Nouveauté ColumnStore https://mariadb.com/docs/server/whats-new/mariadb-enterprise-columnstore-6/ • Agrégation de résultat de requête sur

    disque ◦ Jeu de données de résultat supérieur à la mémoire disponible (>1TB) • Augmentation de la précision DÉCIMALE de 18 à 38 • Compression LZ4 et Snappy • Mise à jour des données transactionnelles à partir des données du ColumnStore en plus de la jointure Cross Engine UPDATE innodb_tab i JOIN columnstore_tab c ON i.col1 = c.col1 SET i.col2 = c.col2; [Restricted]
  19. Le cas du transactionnel • Quand les performances ne sont

    plus au rendez vous ? ◦ Passer en revue les serveurs ◦ Passer en revue les configurations ◦ Optimiser l’utilisation de la mémoire et du CPU ◦ Vérifier la complexité des requêtes ▪ ANALYZE FORMAT=JSON is a mix of the EXPLAIN FORMAT=JSON and ANALYZE statement features. The ANALYZE FORMAT=JSON $statement will execute $statement, and then print the output of EXPLAIN FORMAT=JSON, amended with data from the query execution. ▪ EXPLAIN FORMAT=JSON is a variant of EXPLAIN command that produces output in JSON form. The output always has one row which has only one column titled "JSON". The contents are a JSON representation of the query plan, formatted for readability: EXPLAIN FORMAT=JSON SELECT * FROM t1 WHERE col1=1\G • ET APRES ?
  20. Et pourquoi pas diviser les schémas ? • Le Sharding

    avec Spider CREATE TABLE s( id INT NOT NULL AUTO_INCREMENT, code VARCHAR(10), PRIMARY KEY(id) ) ENGINE=SPIDER COMMENT 'host "127.0.0.1", user "msandbox",\ password "msandbox", port "8607"';
  21. Et pourquoi pas diviser les schémas ? • Le Sharding

    avec MaxScale [accounts_east] type=server address=192.168.56.102 port=3306 [accounts_west] type=server address=192.168.122.85 port=3306 [Sharded-Service] type=service router=schemarouter servers=accounts_west,accounts_east user=sharduser password=YqztlYGDvZ8tVMe3GUm9XCwQi
  22. Apercu de MaxScale Advanced • Performance and scalability ◦ Read/write

    split ◦ Load balancing adaptatif ◦ Causal reads ◦ Caching des résultats de requête avec Redis • HA ◦ Failover Automatique ◦ Transaction replay ◦ Réplication Parallèle avec Xpand • Multiple Moniteurs ◦ Xpad, ColumnStore and Replicated environments. • Verrouillage coopératif ◦ MaxScale HA ◦ Multiple MaxScale Moniteurs dans un Cluster • Sécurité ◦ Pare-feu pour bases de données ◦ Masquage dynamique des données ◦ Limitation des requêtes ◦ Limitation des résultats des requêtes ◦ Statistiques de performance ◦ Enregistrement central des requêtes Basics
  23. En résumé Performances d'un seul noeud • Thread pool •

    Memory • Thread Performance d’un requête • Les outils Explain, Analyze, MariaDB shell En cluster async / semi sync • Maxscale • Réplication parallèle • Distribution de la charge r/w split Analytique • Columnstore Transactionnel • MyRocks • Spider • MaxScale