Это связано с этим вопросом . Это помогает повысить производительность таблиц InnoDB.
Согласно руководству MySQL , innodb_flush_log_at_trx_commit
это глобальная динамическая переменная. Таким образом, я могу изменить его с помощью команды SET GLOBAL, и это, похоже, работает.
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
Но это не изменило фактические настройки MySQL. Когда я обновил my.cnf и перезапустил сервер MySQL, он заработал. Итак, я не могу изменить глобальную переменную во время выполнения?
Я предпочитаю значение по умолчанию innodb_flush_log_at_trx_commit=1
, но мне нужно изменить его на 2, прежде чем запустить процесс восстановления для большой базы данных, чтобы ускориться. Но когда процесс завершен, я хочу изменить значение обратно на 1. Возможно ли это сделать во время выполнения?
У меня нет доступа к my.cnf на сервере общего хостинга.
источник
SET GLOBAL max_connections = 1000;
и когда я запускаю,SHOW VARIABLES LIKE 'max_connections';
чтобы увидеть старое значение, приводит к сумасшествию, пока я не выйду из системы и не вернусь обратно. +1 для этой точки зрения, которая считается само собой разумеющейся и часто забываемой.connect
на самом деле является новой для меня в MySQL. Я делал это миллион раз в PostgreSQL и Oracle. Я никогда не думал, что MySQL разрешит этоconnect
). При значении 2 импорт 2 241 319 записей занял 27 минут 43 секунды, тогда как при значении 1 это заняло около 1 дня. Параметр, кажется, работает в текущем сеансе, ноmy.cnf
после перезапуска восстановил исходную настройку (из ).innodb_flush_log_at_trx_commit
? Или для всех настроек установкаglobal
не повлияет на текущую сессию?Установив innodb_flush_log_at_trx_commit , вы рискуете запутаться с совместимостью mysqld / OS. Я говорю это, потому что ОС доверяют для выполнения сброса.
Обратите внимание на осторожность в документации MySQL
Это говорит о следующем: ОС может лгать как изменяющий муж. ОС говорит, что будет сбрасывать на диск и просто не делает этого. Поэтому, даже если вы установите innodb_flush_log_at_trx_commit, вы должны отделить сброс ОС на диск от сброса mysqld на диск.
Попробуйте установить innodb_flush_method в O_DIRECT, если вы еще этого не сделали. Вы можете увидеть разницу, потому что метод flush сильно отличается (см. Мой
Mar 04, 2011
пост прояснение по переменной MySQL innodb_flush_method ).ПРЕДОСТЕРЕЖЕНИЕ
Как вы упомянули, у вас нет доступа к
my.cnf
. Пожалуйста, свяжитесь с SysAdmin у вашего провайдера и измените innodb_flush_method .ОБНОВЛЕНИЕ 2012-12-10 12:45 ПО ВОСТОЧНОМУ ВРЕМЕНИ
Я сейчас использую MySQL 5.5.12 на моем ПК. Когда я подключаюсь и бегаю,
show variables like 'innodb_flush_method';
я получаюПоскольку он пуст, он просто указывает, что используется настройка по умолчанию. Пожалуйста, прочитайте мой пост от 04.03.2011 для разъяснения по переменной MySQL innodb_flush_method
источник
innodb_flush_method
вmy.ini
(неmy.cnf
). Информация о сервере - Apache 2.4.1, PHP 5.4.4, MySQL 5.5innodb_flush_method
настроек иSHOW VARIABLES
не показывает их.my.ini
или,my.cnf
и это не динамическая переменная, я не уверен, как я могу его настроить.