Правильное использование MySQL таблиц памяти для повышения производительности - PullRequest
1 голос
/ 06 мая 2020

У меня есть таблица с 60 столбцами (и тысячами строк), и она ссылается на 15 таблиц каталога и 3 из них ссылаются на еще 3 таблицы каталога (вся база данных меньше 1 ГБ). Эти таблицы используются для выполнения некоторого поискового запроса "onchange" в веб-приложении (я имею в виду, что пользователь выбирает или записывает значение в поле выбора / ввода на экране и автоматически обновляет результаты, пока он / она не найдет то, что ищет).

Как и следовало ожидать, этот поисковый запрос выполняется часто, поэтому MySQL изо всех сил пытается получить результаты (с 10 одновременными пользователями ... пока).

Я понимаю что использование таблиц памяти (копии исходных таблиц) только для этого запроса было бы хорошим вариантом, но я никогда не работал с такими таблицами. Я не знаю, как управлять вставкой / обновлением / удалением в этих таблицах. Должен ли я выполнять это действие дважды (одно в таблице памяти и одно в исходной таблице)? У меня нет проблем с этим, но есть ли другой / лучший способ?

Я понимаю ограничения таблиц памяти относительно размера (я могу изменить max_heap_table_size) и если система cra sh (с использованием init_file для повторного заполнения таблиц), и у меня достаточно оперативной памяти (система использует только 6 ГБ из установленных 16 ГБ). Есть ли еще одна вещь, которую я должен учитывать при использовании этих таблиц?

1 Ответ

1 голос
/ 06 мая 2020

Если вся ваша база данных умещается в innodb_buffer_pool_size, изменения состоят в том, что ENGINE = MEMORY будет работать медленнее, особенно если у вас есть какие-либо записи, потому что механизм MEMORY имеет такие же характеристики блокировки, как MyISAM (блокировка на уровне таблицы при записи). Таким образом, в рабочей нагрузке только для чтения, когда все данные помещаются в буферный пул, производительность InnoDB должна быть аналогичной. В рабочей нагрузке чтения-записи InnoDB значительно превзойдет ее.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...