Bonjour,

Je rencontre depuis plusieurs jours un problème que je n'ai toujours pas réussi à résoudre : J'essaye d'importer un dump d'une base de données, d'une taille de 38GB, dans ma base de données MySQL.
Le problème est qu'au bout d'un certains nombre de lignes insérées dans la base de données, le serveur commence à ralentir à tel point que l'importation durera plusieurs jours.
J'entend bien que l'importation d'un fichier de 38GB n'est pas une mince affaire pour le serveur, mais l'importation devient tellement lente que je suppose qu'un problème survient.

Comme le titre l'explique l'importation devient très, très lente après environ 400 millions de lignes insérées dans la base de données. Pour palier à ce problème j'ai testé plusieurs solutions sans aucun succès :
  • Utilisation de Percona Server 5.7 à la place de MySQL 5.7
  • Découper le fichier de 38GB en fichier de 1GB
  • Ajouter au début de chaque fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SET autocommit=0;
    SET unique_checks=0;
    SET foreign_key_checks=0;
  • Ajouter à la fin de chaque fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    COMMIT;
    SET unique_checks=1;
    SET foreign_key_checks=1;
  • Modifier mon fichier my.cnf pour obtenir quelque chose qui ressemble à ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    [mysqld]
    key-buffer-size                = 32M
    max-allowed-packet             = 16M
    max-connect-errors             = 1000000
    tmp-table-size                 = 32M
    max-heap-table-size            = 32M
    query-cache-type               = 0
    query-cache-size               = 0
    max-connections                = 500
    thread-cache-size              = 50
    open-files-limit               = 65535
    table-definition-cache         = 1024
    table-open-cache               = 100
    innodb-flush-method            = O_DIRECT
    innodb-log-files-in-group      = 2
    innodb-log-file-size           = 2G
    innodb-flush-log-at-trx-commit = 2
    innodb-file-per-table          = 1
    innodb-buffer-pool-size        = 26G
  • Utiliser Percona Server Wizard pour obtenir un fichier de configuration sur-mesure
  • Utiliser un RAID 0 à la place d'un RAID 1 pour le serveur


Toutes ces pistes mènent au même point, autour de 400 millions de lignes l'importation devient incroyablement lente, ce qui représente environ 40% de l'importation.
Quand je parle de ralentissement c'est qu'en règle générale le fichier de 1GB met environ 30 minutes pour s'importer entièrement, et quand c'est lent je parle de plus d'une demi-journée pour le même fichier.

Chaque fichier de 1GB contient exactement 1000 requêtes INSERT INTO qui ajoute environ 30 millions de lignes par fichier de 1GB.

Table où est importé le fichier (Le moteur de base de données est InnoDB) :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
+-------------------+-----------------+------+-----+---------+-------+
| Field             | Type            | Null | Key | Default | Extra |
+-------------------+-----------------+------+-----+---------+-------+
| pl_from           | int(8) unsigned | NO   | PRI | 0       |       |
| pl_namespace      | int(11)         | NO   | PRI | 0       |       |
| pl_title          | varbinary(255)  | NO   | PRI |         |       |
| pl_from_namespace | int(11)         | NO   | MUL | 0       |       |
+-------------------+-----------------+------+-----+---------+-------+
Je n'ai pas la main sur le serveur qui réalise le dump, donc il m'est impossible de modifier la façon dont le fichier est généré.

Configuration du Serveur :
Intel Xeon E3-1270v6 4c/8t - 3,8 GHz/4,2 GHz
32Go DDR4 ECC 2400 MHz
SoftRaid 2x2To
Ubuntu Server 16.04

Je me tourne donc vers vous pour savoir si je suis passé à côté de quelque chose dans la configuration, ou avoir des conseils pour l'importation de ce gros fichier.

Merci d'avance.

Lien du fichier de backup :
https://wikimedia.bytemark.co.uk/enw...gelinks.sql.gz (Dump d'une des tables du Wikipédia Anglais)