innodb_flush_method и значения O_DSYNC / O_DIRECT

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

Настрой­ка innodb_flush_method опре­де­ля­ет метод сбро­са дан­ных из памя­ти на диск. Выбор под­хо­дя­ще­го зна­че­ния — это выбор меж­ду ско­ро­стью и надежностью.

Основ­ные зна­че­ния — это O_DIRECT и O_DSYNC.

O_DIRECT

Этот метод исполь­зу­ет 4 опе­ра­ции запи­си на диск на каж­дый вызов. Все эти опе­ра­ции вери­фи­ци­ру­ют­ся, что обес­пе­чи­ва­ет допол­ни­тель­ную надеж­ность запи­си на диск, одна­ко замед­ля­ет выполнение.

Луч­ше исполь­зо­вать когда для БД не настро­ен бэкап, и нет воз­мож­но­сти быст­ро пере­клю­чить­ся на резерв­ную копию.

O_DSYNC

Этот метод так­же исполь­зу­ет 4 опе­ра­ции запи­си на диск на каж­дый вызов. Одна­ко при этом, толь­ко две из этих опе­ра­ций будут вери­фи­ци­ро­ва­ны (ска­жем так — 2 опе­ра­ции выпол­нять­ся после­до­ва­тель­но, а еще 2 парал­лель­но, но без гаран­тий). Это обес­пе­чит более эффек­тив­ную запись, что поз­во­лит уве­ли­чить про­пуск­ную спо­соб­ность запи­си MySQL.

Луч­ше исполь­зо­вать когда БД резер­ви­ру­ет­ся, и есть воз­мож­ность быст­ро пере­клю­чить­ся на копию.

В итоге

O_DSYNC будет рабо­тать быст­рее, чем O_DIRECT, но не так надеж­но. Настрой­ка ука­зы­ва­ет­ся в my.cnf: