Jest to związane z tym pytaniem . Pomaga uzyskać lepszą wydajność dla tabel InnoDB.
Według instrukcji MySQL , innodb_flush_log_at_trx_commit
to zmienna globalna dynamiczny. Dlatego mogę to zmienić za pomocą polecenia SET GLOBAL i wydaje się, że działa.
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
Ale nie zmieniło to faktycznego ustawienia MySQL. Kiedy zaktualizowałem my.cnf i zrestartowałem serwer MySQL, zadziałało. Więc nie mogę zmienić globalnej zmiennej w czasie wykonywania?
Wolę wartość domyślną innodb_flush_log_at_trx_commit=1
, ale muszę ją zmienić na 2, zanim uruchomię proces przywracania dużej bazy danych, aby przyspieszyć. Ale gdy proces się zakończy, chcę zmienić wartość z powrotem na 1. Czy można to zrobić w czasie wykonywania?
Nie mam dostępu do pliku my.cnf na moim udostępnionym serwerze hostingowym.
źródło
SET GLOBAL max_connections = 1000;
kiedy biegnę,SHOW VARIABLES LIKE 'max_connections';
aby zobaczyć starą wartość, doprowadzałaby do szału, aż wyloguję się i wrócę. +1 za ten punkt widzenia, który jest oczywisty i często zapominany.connect
jest dla mnie nowa w MySQL. Zrobiłem to milion razy w PostgreSQL i Oracle. Nigdy nie myślałem, że MySQL na to pozwalaconnect
). Przy wartości 2 importowanie 2 241 319 rekordów zajęło 27 minut 43 sekund, podczas gdy wartość 1 zajęła około 1 dnia. Ustawienie wydaje się działać w bieżącej sesji, ale przywróciło oryginalne ustawienie (zmy.cnf
) po ponownym uruchomieniu.innodb_flush_log_at_trx_commit
? A może dla wszystkich ustawień ustawienie opcjiglobal
nie wpłynie na bieżącą sesję?Ustawiając innodb_flush_log_at_trx_commit , ryzykujesz pomylenie z interoperacyjnością mysqld / OS. Mówię to, ponieważ system operacyjny ma zaufanie do wykonania czyszczenia.
Zwróć uwagę na ostrożność zawartą w dokumentacji MySQL
Mówi to następująco: system operacyjny może kłamać jak oszukujący mąż. System operacyjny mówi, że opróżni się na dysk i po prostu tego nie robi. Dlatego nawet jeśli ustawisz innodb_flush_log_at_trx_commit, musisz rozdzielić opróżnianie systemu operacyjnego na dysk z opróżniania mysqld na dysk.
Spróbuj ustawić innodb_flush_method na O_DIRECT, jeśli jeszcze tego nie zrobiłeś. Możesz zobaczyć różnicę, ponieważ metoda flush różni się znacznie (zobacz mój
Mar 04, 2011
post Wyjaśnienie na zmiennej MySQL innodb_flush_method ).CAVEAT
Jak wspomniałeś, nie masz dostępu do
my.cnf
. Skontaktuj się z SysAdmin u swojego dostawcy i zmień innodb_flush_method .AKTUALIZACJA 2012-12-10 12:45 EDT
Obecnie używam MySQL 5.5.12 na moim komputerze. Po podłączeniu i uruchomieniu
show variables like 'innodb_flush_method';
dostajęPonieważ jest pusty, oznacza to tylko, że używane jest ustawienie domyślne. Proszę przeczytać mój post z 4 marca 2011 r. W sprawie wyjaśnienia zmiennej MySQL innodb_flush_method
źródło
innodb_flush_method
wmy.ini
(niemy.cnf
). Informacje o serwerze - Apache 2.4.1, PHP 5.4.4, MySQL 5.5innodb_flush_method
ustawień iSHOW VARIABLES
nie pokazuje go.my.ini
lubmy.cnf
nie jest to zmienna dynamiczna, nie jestem pewien, jak ją skonfigurować.