Мы столкнулись с проблемой, когда запрос таблицы, содержащей около 50 миллионов строк и размером индекса 4 ГБ (размер таблицы около 6 ГБ), приводит к перестановке памяти на сервере базы данных и резкому замедлению. Я почти уверен, что это связано с превышением размера временной таблицы и ее переносом на диск.
Если я обновлю свой сервер базы данных с 32 ГБ ОЗУ до 64 ГБ ОЗУ, мне будет интересно, сможет ли база данных MySQL полностью использовать преимущества этой дополнительной памяти, а не подкачки. Я просмотрел несколько переменных (например, KEY_BUFFER_SIZE и т. Д.), И они, похоже, поддерживают значения настроек более 64 ГБ. Однако в документации MySQL говорится, что tmp_table_size максимально достигает 4 ГБ.
Так стоит ли обновление памяти? Извлекает ли из этого проблему «большая таблица запросов» или она не поможет из-за ограничения в 4 ГБ? Я знаю, что потенциально существуют другие решения, такие как реструктуризация таблицы, которая будет разделена различными способами и т.д.
Кроме того, в целом, существуют ли другие переменные, связанные с памятью, которые MySQL не сможет использовать при перемещении от 32 до 64 ГБ ОЗУ?
Мы используем 64-битную Linux (Ubuntu) в качестве сервера базы данных.
Спасибо, Гален
Возможно, стоило бы потратить дополнительное время и силы на изучение причин перестановки системы, прежде чем тратить деньги на память?
32 ГБ памяти оставляет много доступной памяти даже после загрузки всей таблицы, индекса и максимального значения temp_table в память. Быстрый поиск выявил две части документации, которые могут иметь отношение к теме:
источник
Если вы думаете, что это связано с созданием очень большой временной таблицы, вы можете подумать, как можно улучшить запрос, чтобы избежать временных таблиц.
Вы можете опубликовать в Stackoverflow сообщение, содержащее схему, запрос, план объяснения и некоторые детали проблемы.
источник