innodb_flush_log_at_trx_commit и рекомендуемые значения

Thank you for reading this post, don't forget to subscribe!

Пара­метр innodb_flush_log_at_trx_commit поз­во­ля­ет выбрать стра­те­гию сбро­са дан­ных на диск при рабо­те MySQL.

Этот пара­метр настра­и­ва­ет­ся в фай­ле my.cnf (обыч­но /etc/mysql/my.cnf).

Три варианта значений

Зна­че­ние "1" озна­ча­ет, что любая завер­шен­ная тран­зак­ция будет син­хрон­но сбра­сы­вать лог на диск. Это вари­ант по-умол­ча­нию, он явля­ет­ся самым надеж­ным с точ­ки зре­ния сохран­но­сти дан­ных, но самым мед­лен­ным по ско­ро­сти работы.

Зна­че­ние "2" дела­ет то же самое, толь­ко сбра­сы­ва­ет лог не на диск, а в кеш опе­ра­ци­он­ной систе­мы (т.е. не про­ис­хо­дит flush после каж­дой опе­ра­ции). Это зна­че­ние подой­дет в боль­шин­стве слу­ча­ев, т.к. не выпол­ня­ет доро­гой опе­ра­ции запи­си после каж­дой тран­зак­ции. При этом лог пишет­ся на диск с задерж­кой в несколь­ко секунд, что весь­ма без­опас­но с точ­ки зре­ния сохран­но­сти данных.

Зна­че­ние "0" даст наи­боль­шую про­из­во­ди­тель­ность. В этом слу­чае буфер будет сбра­сы­вать­ся в лог файл неза­ви­си­мо от тран­зак­ций. В этом слу­чае риск поте­ри дан­ных возрастает.

После изме­не­ния это­го пара­мет­ра, необ­хо­ди­мо пере­за­гру­жать mysql: