Skip to content

Performances Mariadb de base

Auteur : Philippe Le Van - @plv

Date : 30 mars 2021

Introduction

Cette page donne quelques infos pratiques autour des problèmes de performances MariaDB

Analyse temps réel

Parfois on a besoin de voir en direct les requêtes en cours pour comprendre les problèmes de performances.

1
2
3
4
5
6
7
8
# se connecter à la base en root
mysql -h <host> -uroot -p

# Voir la liste des requêtes en cours
SHOW FULL PROCESS_LIST;

# Voir la liste des éléments lockés
SHOW ENGINE INNODB STATUS\G

Parfois on a besoin de tuer des requêtes en cours

1
2
3
4
5
-- tuer tous les process d'un utilisateur mysql
kill user <username>

-- tuer un process particulier
kill <id_du_process>

Exemple de tunings

Le tuning par défaut d'un mariadb est très limité pour un site de prod.

Voilà un exemple de tuning qu'on utilise sur une machine de 16Go de RAM.

Créer un fichier tuning-mariadb.cnf

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[mysqld]
#
# * InnoDB
#
# devrait faire 80% de la mémoire de la machine
innodb_buffer_pool_size = 5G

# configuré pour 1Go / instance, comme 5Go de buffer_pull_size, ça fait
# 5 instances, recommandé par Maria
innodb_buffer_pool_instances = 5

# configuré pour 25% du innodb_buffer_pool_size
innodb_log_buffer_size  = 1G

# flush log à chaque commit ?
innodb_flush_log_at_trx_commit = 0

# old value : 400. Cache des tables ouvertes pour ne pas avoir à rouvrir les
# tables trop souvent.
table_open_cache = 10000

# old value : 400. Cache des définitions des tables pour les recalculer plus vite
table_definition_cache = 20000

Si votre mariadb est lancé avec docker, vous pouvez insérer le fichier avec docker-compose

1
2
3
4
5
6
7
8
9
  mysql:
    image: mariadb:10.2.14
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: dbname
      MYSQL_USER: username
      MYSQL_PASSWORD: userpass
    volumes:
      - tuning-mariadb.cnf:/etc/mysql/conf.d/tuning-mariadb.cnf