Ceci est lié à cette question . Cela aide à obtenir de meilleures performances pour les tables InnoDB.
Selon le manuel MySQL , innodb_flush_log_at_trx_commit
est une variable dynamique globale. Ainsi, je peux le changer en utilisant la commande SET GLOBAL et cela semble fonctionner.
mysql> SET GLOBAL innodb_flush_log_at_trx_commit=2;
Query OK, 0 rows affected
mysql> SHOW VARIABLES LIKE 'innodb_flush_log_at_trx_commit';
+--------------------------------+-------+
| Variable_name | Value |
+--------------------------------+-------+
| innodb_flush_log_at_trx_commit | 2 |
+--------------------------------+-------+
1 row in set
Mais, cela n'a pas modifié le paramètre MySQL réel. Lorsque j'ai mis à jour my.cnf et redémarré le serveur MySQL, cela a fonctionné. Donc, je ne peux pas changer la variable globale au moment de l'exécution?
Je préfère la valeur par défaut innodb_flush_log_at_trx_commit=1
, mais je dois la changer à 2 avant d'exécuter un processus de restauration pour une grande base de données pour obtenir plus rapidement. Mais une fois le processus terminé, je souhaite redéfinir la valeur sur 1. Est-il possible de le faire au moment de l'exécution?
Je n'ai pas accès à my.cnf sur mon serveur d'hébergement partagé.
la source
SET GLOBAL max_connections = 1000;
et quand je coursSHOW VARIABLES LIKE 'max_connections';
pour voir l'ancienne valeur conduirait à des écrous méchants jusqu'à ce que je me déconnecte et me reconnecte . +1 pour ce point de vue qui est tenu pour acquis et souvent oublié.connect
est en fait nouveau pour moi dans MySQL. Je l'ai fait un million de fois dans PostgreSQL et Oracle. Je n'ai jamais pensé à MySQL permettant celaconnect
). Avec la valeur 2, l'importation de 2 241 319 enregistrements a pris 27 minutes 43 secondes, alors qu'il a fallu environ 1 jour avec la valeur 1. Le paramètre semble fonctionner dans la session en cours, mais il a restauré le paramètre d'origine (à partir demy.cnf
) après le redémarrage.innodb_flush_log_at_trx_commit
? Ou est-ce que pour tous les paramètres, la définition deglobal
n'affecterait pas la session en cours?En définissant innodb_flush_log_at_trx_commit , vous risquez de confondre avec l'interopérabilité mysqld / OS. Je dis cela parce que le système d'exploitation est approuvé pour effectuer le vidage.
Notez la prudence dans la documentation MySQL
Ce que cela dit est le suivant: l'OS peut mentir comme un mari qui triche. Le système d'exploitation indique qu'il videra le disque et ne le fera tout simplement pas. Par conséquent, même si vous définissez innodb_flush_log_at_trx_commit, vous devez dissocier le vidage du système d'exploitation sur le disque du vidage de mysqld sur le disque.
Essayez de définir innodb_flush_method sur O_DIRECT si vous ne l'avez pas déjà fait. Vous pouvez voir une différence parce que la méthode de vidage diffère considérablement (voir ma
Mar 04, 2011
publication Clarification sur la variable innodb_flush_method de MySQL ).CAVEAT
Comme vous l'avez mentionné, vous n'y avez pas accès
my.cnf
. Veuillez contacter le SysAdmin de votre fournisseur et faire modifier innodb_flush_method .MISE À JOUR 2012-12-10 12:45 EDT
J'utilise actuellement MySQL 5.5.12 sur mon PC. Quand je me connecte et que
show variables like 'innodb_flush_method';
je cours, je reçoisPuisqu'il est vide, cela indique simplement que le paramètre par défaut est utilisé. Veuillez lire mon article du 04 mars 2011 pour des clarifications sur la variable MySQL innodb_flush_method
la source
innodb_flush_method
dansmy.ini
(nonmy.cnf
). Informations sur le serveur - Apache 2.4.1, PHP 5.4.4, MySQL 5.5innodb_flush_method
paramètre etSHOW VARIABLES
ne l'affiche pas.my.ini
oumy.cnf
et que ce n'est pas une variable dynamique, je ne sais pas comment je peux le configurer.