Назад | Перейти на главную страницу

Настройте сервер MySQL, чтобы минимизировать использование диска

У меня есть компьютер Raspberry PI с некоторым измерительным устройством и скриптом, который выполняет измерения каждые пять минут и сохраняет результат в базе данных MySQL. Я настроил сервер MySQL для хранения базы данных на внешнем жестком диске USB, чтобы минимизировать износ SD-карты, используемой в качестве корневой файловой системы в Rpi.

Все данные, сохраняемые на моем жестком диске каждые пять минут, состоят только из нескольких чисел - в результате - двух чисел, отметки времени и идентификатора в качестве первичного ключа для таблицы MySQL - и все же сервер MySQL продолжает записывать их на диск каждый раз, когда становятся доступными новые данные. . Это приводит к тому, что диск раскручивается каждые пять минут, что увеличивает потребление энергии и изнашивает жесткий диск. Есть ли способ настроить MySQL для кэширования некоторых данных в ОЗУ до тех пор, пока их не будет достаточно для записи на жесткий диск? Я предполагаю, что конфигурация по умолчанию оптимизирована для больших объемов данных за короткие периоды и надежности в случае, например. сбой питания, но на самом деле меня это не волнует. Даже если произойдет сбой питания (что маловероятно), это не будет проблемой, если я все равно пропущу несколько результатов больше, чем необходимо.

Я просмотрел документацию MySQL и искал ее в Google, но все ресурсы, касающиеся MySQL и использования диска, похоже, сосредоточены на увеличении пропускной способности жесткого диска или оптимизации ее для быстрого отклика.

Если это важно, mysqld -V возвращает:

mysqld  Ver 5.5.46-0+deb7u1 for debian-linux-gnu on armv7l ((Debian))

РЕДАКТИРОВАТЬ:

Я понимаю, что использую MySQL здесь как золотой молоток - MySQL никогда не создавался для моего приложения. Возможно, кто-нибудь может предложить альтернативное решение моей проблемы, которое потребует аналогичного объема работы для настройки.

Я нашел способ обойти свою проблему, который зависит не от конфигурации сервера, а от схемы базы данных. Я создал дополнительный массив с engine=memory настройка хранилища, в которую мой процесс измерения добавил данные. Я также добавил задание cron, которое перемещает данные из этой временной таблицы в дисковую. Он запускается каждые пару часов и при выключении системы, поэтому я не думаю, что я потеряю много данных. Мне также нужно было изменить свои SQL-запросы, выбрав из обеих таблиц и объединив наборы результатов с помощью UNION.

Эта настройка может быть непригодна для всех, кто хочет минимизировать доступ к дискам MySQL, и если я найду другое решение (включая другой сервер базы данных, который является прозрачным для сети и допускает простые запросы), которое можно настроить для минимального использования жесткого диска, я выложу здесь.

Вам следует взглянуть на "Буферизацию изменений InnoDB"

https://dev.mysql.com/doc/refman/5.5/en/innodb-parameters.html#sysvar_innodb_change_buffering