Может ли MySQL эффективно использовать 64 ГБ ОЗУ?

22

Мы столкнулись с проблемой, когда запрос таблицы, содержащей около 50 миллионов строк и размером индекса 4 ГБ (размер таблицы около 6 ГБ), приводит к перестановке памяти на сервере базы данных и резкому замедлению. Я почти уверен, что это связано с превышением размера временной таблицы и ее переносом на диск.

Если я обновлю свой сервер базы данных с 32 ГБ ОЗУ до 64 ГБ ОЗУ, мне будет интересно, сможет ли база данных MySQL полностью использовать преимущества этой дополнительной памяти, а не подкачки. Я просмотрел несколько переменных (например, KEY_BUFFER_SIZE и т. Д.), И они, похоже, поддерживают значения настроек более 64 ГБ. Однако в документации MySQL говорится, что tmp_table_size максимально достигает 4 ГБ.

Так стоит ли обновление памяти? Извлекает ли из этого проблему «большая таблица запросов» или она не поможет из-за ограничения в 4 ГБ? Я знаю, что потенциально существуют другие решения, такие как реструктуризация таблицы, которая будет разделена различными способами и т.д.

Кроме того, в целом, существуют ли другие переменные, связанные с памятью, которые MySQL не сможет использовать при перемещении от 32 до 64 ГБ ОЗУ?

Мы используем 64-битную Linux (Ubuntu) в качестве сервера базы данных.

Спасибо, Гален

гален
источник

Ответы:

5

Если вы используете InnoDB, наиболее важной переменной для установки является innodb_buffer_pool_size. Я бы установил его примерно на 80% вашей системной памяти. После разогрева кеша после некоторого использования ваши самые активные данные (рабочий набор данных) будут в памяти (innodb_buffer_pool_size), и ваши операции с ними должны быть очень быстрыми. С 64 ГБ памяти вы, безусловно, можете поместиться там. Память всегда выгодна для серверов БД.

vmfarms
источник
11

Да, если вы используете InnoDB и интенсивно читаете, вы можете использовать большие объемы ОЗУ (если ваш набор данных поместится в памяти - ваш сервер будет работать невероятно быстро).

Я использую MySQL с хранилищем InnoDB на серверах 8-16 ГБ с рабочим набором, помещающимся в память.

PQD
источник
То же самое и здесь - мы запускаем InnoDB на блоках по 64 ГБ, и это здорово.
Джеймс
9

Возможно, стоило бы потратить дополнительное время и силы на изучение причин перестановки системы, прежде чем тратить деньги на память?

32 ГБ памяти оставляет много доступной памяти даже после загрузки всей таблицы, индекса и максимального значения temp_table в память. Быстрый поиск выявил две части документации, которые могут иметь отношение к теме:

Мартин
источник
0

Если вы думаете, что это связано с созданием очень большой временной таблицы, вы можете подумать, как можно улучшить запрос, чтобы избежать временных таблиц.

Вы можете опубликовать в Stackoverflow сообщение, содержащее схему, запрос, план объяснения и некоторые детали проблемы.

MarkR
источник