Dies hängt mit dieser Frage zusammen . Es hilft, eine bessere Leistung für InnoDB-Tabellen zu erzielen.
Laut MySQL - Handbuch , innodb_flush_log_at_trx_commit
ist eine globale dynamische Variable. Daher kann ich es mit dem Befehl SET GLOBAL ändern und es scheint zu funktionieren.
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
Die tatsächliche MySQL-Einstellung wurde jedoch nicht geändert. Als ich my.cnf aktualisiert und den MySQL-Server neu gestartet habe, hat es funktioniert. Ich kann die globale Variable also zur Laufzeit nicht ändern.
Ich bevorzuge den Standardwert innodb_flush_log_at_trx_commit=1
, muss ihn jedoch auf 2 ändern, bevor ich einen Wiederherstellungsprozess ausführe, damit eine große Datenbank schneller wird. Aber wenn der Vorgang abgeschlossen ist, möchte ich den Wert wieder auf 1 ändern. Ist dies zur Laufzeit möglich?
Ich habe auf meinem gemeinsam genutzten Hosting-Server keinen Zugriff auf my.cnf .
quelle
SET GLOBAL max_connections = 1000;
und wenn ichSHOW VARIABLES LIKE 'max_connections';
den alten Wert sehe , oft zu verrückten Nüssen führt, bis ich mich abmelde und wieder anmelde . +1 für diesen Standpunkt, der für selbstverständlich gehalten und oft vergessen wird.connect
ist für mich in MySQL eigentlich neu. Ich habe das millionenfach in PostgreSQL und Oracle gemacht. Ich habe nie daran gedacht, dass MySQL dasconnect
). Mit dem Wert 2 dauerte das Importieren von 2.241.319 Datensätzen 27 Minuten und 43 Sekunden, während es mit dem Wert 1 ungefähr 1 Tag dauerte. Die Einstellung scheint in der aktuellen Sitzung zu funktionieren, stellte jedochmy.cnf
nach dem Neustart die ursprüngliche Einstellung (von ) wieder her.innodb_flush_log_at_trx_commit
? Oder hat die Einstellung für alle Einstellungenglobal
keinen Einfluss auf die aktuelle Sitzung?Durch die Einstellung innodb_flush_log_at_trx_commit , riskieren Sie eine Verwechslung mit mysqld / O Interoperabilität. Ich sage dies, weil dem Betriebssystem vertraut wird, dass es den Flush ausführt.
Beachten Sie die Vorsicht in der MySQL-Dokumentation
Dies sagt Folgendes aus: Das Betriebssystem kann wie ein betrügerischer Ehemann lügen. Das Betriebssystem sagt, dass es auf die Festplatte gespült wird und tut es einfach nicht. Selbst wenn Sie innodb_flush_log_at_trx_commit festlegen, müssen Sie daher das Betriebssystem-Flushing auf die Festplatte von mysqlds Flushing auf die Festplatte trennen.
Versuchen Sie, innodb_flush_method auf O_DIRECT zu setzen, falls Sie dies noch nicht getan haben. Möglicherweise sehen Sie einen Unterschied, da sich die Flush-Methode stark unterscheidet (siehe meinen
Mar 04, 2011
Beitrag Erläuterung zur Variablen mySQL innodb_flush_method ).VORBEHALT
Wie Sie bereits erwähnt haben, haben Sie keinen Zugriff auf
my.cnf
. Bitte kontaktieren Sie den SysAdmin bei Ihrem Provider und lassen Sie innodb_flush_method ändern.UPDATE 2012-12-10 12:45 EDT
Ich verwende derzeit MySQL 5.5.12 auf meinem PC. Wenn ich mich verbinde und renne,
show variables like 'innodb_flush_method';
bekomme ichDa es leer ist, zeigt es nur an, dass die Standardeinstellung verwendet wird. Bitte lesen Sie meinen Beitrag vom 04. März 2011 zur Erläuterung der Variablen mySQL innodb_flush_method
quelle
innodb_flush_method
inmy.ini
(nichtmy.cnf
) finden. Serverinformationen - Apache 2.4.1, PHP 5.4.4, MySQL 5.5innodb_flush_method
Einstellungen hat undSHOW VARIABLES
diese nicht anzeigt .my.ini
oder nicht finden konntemy.cnf
und es keine dynamische Variable ist, bin ich mir nicht sicher, wie ich es konfigurieren kann.