Требование к MySQL Cluster RAM


8

Начиная с MySQL 5.1, данные больше не должны полностью храниться в памяти.

Я читал, что индексированные столбцы (я думаю, что вся структура индекса) все еще должны находиться в памяти ( MySQL High Availability, 2010, стр. 533 , «MySQL Cluster сохраняет все индексированные столбцы в основной памяти» ).

В свете этого, что произойдет, если недостаточно памяти (т. Е. Огромная база данных (> 100 ГБ или 1 ТБ), работающая на серверах с низким объемом конфигурации памяти (например, 2 узла данных, каждый с 1 ГБ ОЗУ))?


Я спросил об этом, потому что мне стало интересно, что произойдет, если узлу данных не хватит основной памяти. Разве MySQL Cluster не будет хранить часть индекса во вторичной памяти вообще? Что делать, если у меня мало оперативной памяти и размер базы данных огромен. Тогда MySQL Cluster не вариант для меня?
GSB

Ответы:


4

MySQL Cluster поддерживает хранение неиндексированных столбцов на диске только с LRU-кэшем недавно полученных данных. Однако индексированные столбцы всегда хранятся в памяти.

MySQL Cluster предварительно выделяет всю память в соответствии с параметрами DataMemory и IndexMemory. Он не будет запрашивать у базовой ОС больше памяти динамически.

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

При настройке DataMemory и IndexMemory лучше ограничить себя несколькими объемами физической памяти в каждой системе. Некоторая физическая память должна быть зарезервирована для ОС и других процессов.

Теоретически MySQL Cluster может быть настроен так, чтобы он использовал виртуальную память через устройство подкачки (например, больше, чем физическая память), но, как указано в другом ответе, это не предназначенный для использования вариант. Перестановка структур в памяти на диск обычно неоптимальна, так как шаблоны произвольного доступа в памяти приводят к произвольному доступу к диску, что приводит к перегрузке и замедлению перестановки в системе. С MySQL Cluster наиболее вероятным результатом является сбой сердцебиения и сбой кластера из-за перестановки узла данных, не отвечающего на сигналы достаточно быстро.

Для эффективной поддержки индексов, превышающих совокупную память, MySQL Cluster должен был бы поддерживать форматы индексов на диске (возможно, дерево B и т. Д.) С шаблонами кэширования и доступа, согласованными со свойствами доступа к диску.


3

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

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


Твой ответ и Фрейзер довольно хороши. Но так как он ответил первым, я дам ему кредиты. Надеюсь, ты не возражаешь. :)
GSB

Нет, не против;) Фрейзер работает на кластере MySQL.
Морган Токер

2

В свете этого, что происходит, если не хватает памяти

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

Обязательно правильно ограничьте MySQL, чтобы он не занимал всю вашу память, необходимую для других системных процессов.


1

По сути, цепочка настолько же сильна, насколько ее самое слабое звено.

При настройке частных виртуальных серверов (с помощью VMWare для настройки кластеров ESX) предполагается, что все серверы с открытым исходным кодом в кластере должны иметь одинаковый объем оперативной памяти.

MySQL Cluster следует обрабатывать такими же перчатками. Если какие-либо серверы (даже всего 1) имеют меньше памяти, чем другие в кластере, это было бы ограничивающим фактором. Меня не удивит, если сервер с 2 ГБ ОЗУ заставит другие серверы в MySQL Cluster (даже если каждый из этих серверов имеет 8 ГБ ОЗУ) вести себя так, как если бы они имели максимум 2 ГБ.

По крайней мере, вы должны

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.