Сначала сложить три потребителя
Обе ступени — AMD EPYC 7543P, 32 ядра / 64 потока, 2,8–3,7 ГГц. 128GB стоит $449 в месяц, 256GB — $599. Память — DDR4-3200 ECC RDIMM. Её выбирают при заказе. Дополнительные планки после этого не ставятся. Решите до оплаты, будут ли основная база и кэш на одной машине. Третьей ступени памяти потом нет.
На одном хосте память делится как минимум на три части. Первая — операционная система, страничный кэш и соединения, включая процессы, с которыми вы заходите по SSH.
Вторая — горячие данные, которые база должна держать в памяти: у MySQL это в основном буферный пул InnoDB, у PostgreSQL — shared_buffers плюс страничный кэш, который система оставляет для неё.
Третья — Redis или другой кэш под maxmemory. Если приложение тоже работает здесь, вычтите и его резидентную память.
Сложите три части, оставьте запас и сравните с 128 и 256. Размер каталога на диске — это не потребность в памяти. Каталог на 400GB может содержать лишь несколько десятков гигабайт действительно горячих данных. Наоборот, 128GB закончится раньше, если кэш должен держать большую часть набора объектов, даже при небольшом диске.
ECC и число ядер на обеих ступенях одинаковые. Лишние $150 в месяц покупают только память. 256GB не добавляет ядер, 128GB не экономит процессор.
Текст про MySQL, PostgreSQL и Redis на Linux. Если выбран Windows Server, лимит памяти SQL Server считайте отдельно. Доли пула ниже не переносите в Windows. На Linux настройки меняют по SSH. Способ входа на обеих ступенях один.
Когда хватает 128GB
128GB хватает, когда несколько условий выполняются вместе. Пул покрывает горячий набор, доля попаданий уже стабильна. Redis держит сессии, горячие ключи или ограниченный кэш объектов, примерно 8–24GB, и вытеснения приемлемы. ОС, соединения и приложение на том же хосте оставляют ещё около 16–24GB. За полгода горячий набор не удвоится, и второй крупный сервис в памяти сюда не переезжает.
Это расчёт, а не обещание ёмкости. На 128GB сначала оставьте около 20GB системе и соединениям. Если Redis планируется на 16GB, базе остаётся около 90GB. Пул MySQL можно начать с 64–80GB, с местом для страничного кэша и сортировок на диске. Если Redis — лишь несколько гигабайт, пул можно приблизить к 80GB. Если Redis уже требует 24GB, пул выше 80GB не поднимайте.
PostgreSQL обычно ставит shared_buffers ниже пула MySQL, часто около четверти физической памяти. Остальное остаётся страничному кэшу ОС.
Тот же горячий набор тогда может остаться на 128GB, если параллельные сортировки и хеш-агрегации не раздувают work_mem в большой пик.
В одном запросе бывает несколько узлов сортировки, затем это умножают на число одновременных запросов. 64MB на несколько десятков параллельных операций обычно ещё помещаются. Сотни мегабайт work_mem на сотню одновременных операций съедают запас 128GB.
Когда выбирать 256GB
Достаточно одного из пунктов. Нужен пул около 80GB и одновременно Redis на несколько десятков гигабайт.
На текущей машине RSS базы плюс RSS кэша уже около или выше 90GB.
В PostgreSQL много параллельных сортировок, и work_mem, умноженный на эту параллельность, заполняет запас.
Кроме основной базы и Redis на том же хосте должен жить поиск или другой сервис с большой кучей. Приложение не вынесено и само требует больше 10GB.
На 256GB сначала оставьте 24–32GB системе и соединениям. Если Redis нужен на 32–48GB, пул всё ещё может стоять на 120–160GB. Это старт. После запуска верхние границы возвращают по попаданиям, временным файлам и вытеснениям Redis. Не отдавайте около 90 процентов памяти пулу и не запускайте рядом большой Redis. Когда растут оба, хост уходит в swap. Это труднее читать, чем промах кэша, ушедший на диск.
Разница — $150 в месяц. Квартал: $1,347 против $1,797. Полгода: $2,694 против $3,594. Год: $5,388 против $7,188. Срок только умножает месячную сумму. Выбор 256GB скидку не добавляет. Перенос базы из-за нехватки памяти обычно дороже этих $150. Если текущее потребление уже у линии 128GB, заказывайте 256GB. Если горячий набор собран, попадания высоки, а кэш всё ещё 8–24GB, оставайтесь на 128GB.
Сверить ступень со своими цифрами
Впишите измерения с продакшена или с предыдущего хоста. Любая строка в правом столбце значит: планировать 256GB. Если все пять строк слева, 128GB закрывает этот заказ.
| Что можно измерить | Ближе к 128GB | Ближе к 256GB |
|---|---|---|
| Горячий набор | Пул его покрывает, попадания стабильны | Сами горячие данные около или выше 100GB |
| Redis / кэш | 8–24GB горячих ключей или сессий | Ещё десятки GB, и пул тоже большой |
| Соединения и сортировки | Число соединений ограничено, сортировки редко уходят на диск | work_mem × параллельность заполняет запас |
| Кто ещё на хосте | В основном база и этот кэш | Ещё приложение, поиск или второй сервис в памяти |
| Следующие полгода | Горячий набор не удвоится | Текущее потребление уже около 90GB |
Высокие попадания, приемлемые вытеснения и собранный горячий набор остаются на 128GB. Если диск заменяет память или Redis выбрасывает ещё нужные ключи, выбирайте 256GB. Если цифры размыты, возьмите резидентную память предыдущего хоста, умножьте на 1,3 и сравните со 128 и 256. Ниже примерно 100GB этот план держит 128GB. Выше — заказывайте 256GB.
После установки зафиксировать оба потолка
Когда ступень выбрана, запишите потолки базы и кэша в конфигурацию. Без потолков InnoDB и Redis идут по своим значениям по умолчанию и спорят за одну и ту же память.
- 1Записать три числа
RSS базы,
used_memoryRedis и память, которая ещё свободна у ОС. У MySQL — попадания пула, у Redis —used_memoryиevicted_keys, у PostgreSQL — попадания кэша и временные файлы. - 2Ограничить пул и maxmemory отдельно
На общем хосте держите пул InnoDB примерно в 60–70 процентах памяти, если только Redis не мал. Задайте Redis
maxmemoryи политику вытеснения. Оба потолка должны существовать сразу. - 3Оставить зазор страничному кэшу
Сумма пула и потолка Redis должна быть ниже памяти за вычетом ОС и соединений. На 128GB сумму сначала пробуйте около 100GB. На 256GB — около 210GB.
- 4Посмотреть ещё раз через неделю
Если swap продолжает расти, потолки завышены. Сначала уменьшите пул или Redis, затем смотрите попадания. Чтение с диска само по себе не доказывает, что ступень памяти выбрана неверно.
Пул выше примерно 80 процентов памяти плюс большой Redis уводит хост в swap. Сложите два потолка, убедитесь, что они помещаются, и только потом перезапускайте службы.
Дополнительный диск не добавляет память
Диски по умолчанию — 2 × 1TB NVMe, без аппаратного RAID. Каждый диск подключён напрямую, доступный объём — 2TB. Если горячий набор не помещается в память, чтения уходят на эти диски. NVMe принимает промахи. Задержка всё равно выше, чем попадание в память. Дополнительный диск 2TB стоит $79 в месяц, не больше двух, тоже напрямую. Это ёмкость, а не планка памяти. Куда класть файлы данных и резервные копии — вопрос дисков. «Ещё один диск» не заменяет ступень 256GB.
Канал тоже не наполняет буферный пул. По умолчанию 250M, трафик без лимита. 1G добавляет $250 в месяц, 2G — $750. Меняется скорость исходящего канала. Обмен между базой и локальным Redis идёт через loopback и этот канал не занимает. Память и канал — разные строки. Если копии нужно вывозить с машины, смотрите, хватает ли 250M на эту передачу. Это другой выбор.
После выбора памяти решите, как два прямых диска держат данные. Это не аппаратный RAID. См. заметку про два диска.
Как это ложится на две машины
Когда горячий набор, кэш и запас сложены, в форме заказа две машины. 128GB — $449 в месяц, 256GB — $599.
Процессор на обеих — EPYC 7543P, 32 ядра / 64 потока, 2,8–3,7 ГГц. Память — DDR4-3200 ECC RDIMM, выбирается при заказе, без планок потом.
Серверы стоят в Токио, Япония. На Linux заходят по SSH и правят пул и maxmemory. Платы за установку нет.
К оплате — месячная сумма, умноженная на число месяцев. Месяц, квартал, полгода и год дополнительной скидки не дают. Опции этого хоста, включая диски и канал, предоплачиваются на тот же срок.
Если сумма уже больше того, что 256GB держит с запасом — большой пул, большой кэш, куча поиска и приложение вместе — не запихивайте всё на один 256GB. Вынесите кэш или поиск на вторую машину. Так яснее, чем писать каждый потолок в самый верх. Этот текст выбирает только между двумя ступенями, которые можно заказать.
Сначала память, потом база и кэш
128GB — $449 в месяц, 256GB — $599. Память выбирают при заказе. Серверы в Токио, Япония. Заказать можно до входа в аккаунт.