Кричите и спасибо всем, кто дает ценную информацию! Из всех советов, которые вы, ребята, дали, я думаю, что начинаю лучше понимать проблему и начинаю сужать ее:
Первое, что я нашел, было мое значение по умолчанию innodb_buffer_pool_size
134 МБ. Из-за сортировки и количества данных, которые я обрабатываю, это смехотворно мало - поэтому я смог увеличить их. Очень полезный пост: https://dba.stackexchange.com/a/27341 И из документов: https://dev.mysql.com/doc/refman/8.0/en/innodb-buffer-pool-resize.html
Теперь, когда я увеличил его до 2 ГБ и могу контролировать его использование и использование ОЗУ в целом (cli: cat / proc / meminfo) Я понимаю, что моя 4 ГБ ОЗУ на самом деле находится на низком уровне. Я нигде не вижу каких-либо неиспользованных служебных данных (использование буфера по-прежнему составляет 99%, а объем свободной оперативной памяти - около 100 МБ).
Далее я начну оптимизировать использование оперативной памяти моего демона и посмотрим, к чему это приведет - но это не освободит В целом достаточно оперативной памяти.
@ danblack упомянул innodb_buffer_pool_dump_now
и innodb_buffer_pool_load_now
. Это интересный подход, который можно использовать всякий раз, когда демон обращается к БД, поскольку я хотел бы отделить использование буфера моего демона от внешнего интерфейса (очевидно, это невозможно!). Я рассмотрю это далее, но, поскольку мой демон работает все время (не только ночью), это может оказаться невозможным.
@ Gordan Bobi c упомянул "обновление" DBtables с помощью ANALYZE TABLE tableName
. Я обнаружил, что это довольно быстро, и включал его в демон после каждого расширенного чтения / записи. Это увеличивает время работы демона на несколько секунд, но это не проблема. И я полагаю, что не могу go ошибиться:)
Итак, в конце концов, я считаю, что моя проблема - это сочетание вещей: слишком маленький размер буфера, слишком маленький объем ОЗУ, слишком много чтения / операции записи для этой среды (исключение буферизованных индексов и т. д. c.). Также мне нужно будет больше узнать о распределении памяти et c и оптимизировать его лучше (large-pages = 1 et c).