Это канонический вопрос о планировании емкости баз данных.
Связанный:
Я ищу, чтобы создать канонический вопрос об инструментах и методах планирования емкости для баз данных. Это должно быть каноническим вопросом.
Очевидно, что общий рабочий процесс:
- Поместите свой сценарий в место
- Добавить мониторинг
- Добавить трафик
- Оценить результаты
- Исправить на основе результатов
- Промыть, повторить, пока не будет достаточно
Пожалуйста, не стесняйтесь описывать различные инструменты и методы для различных веб-серверов, фреймворков и т. Д., А также лучшие практики.
Ответы:
Планирование емкости дисков и оперативной памяти
Планирование дискового пространства и объема памяти для сервера базы данных является черным делом. Чем больше, тем лучше. Быстрее, тем лучше.В качестве общих указаний я предлагаю следующее:
Оцените, сколько дискового пространства вам потребуется в течение следующих 3-5 лет, а затем удвойте его.
Размер индекса зависит от вашей базы данных, а все остальное сильно зависит от вашего набора данных и структуры запроса / базы данных. Я предложу «По крайней мере, в два раза больше вашей самой большой таблицы» в качестве предложения, но учтите, что это предложение разбивает на действительно большие операции с хранилищами данных, где самая большая таблица может составлять десятки или сотни гигабайт.
У каждого поставщика базы данных есть некоторые инструкции по настройке производительности вашего диска / памяти / ядра ОС. Потратьте некоторое время с этой документацией перед развертыванием. Это поможет.
Сравнительный анализ рабочей нагрузки и планирование производительности
Предполагая, что вы еще не развернули ...
Многие системы баз данных поставляются с Benchmarking Tools. Например, PostgreSQL поставляется с pgBench .Эти инструменты должны стать вашей первой остановкой в тестировании производительности базы данных. Если возможно, вы должны запустить их на всех новых серверах баз данных, чтобы понять, «сколько работы» может выполнять сервер баз данных.
Вооружившись теперь исходным тестом,
ABSOLUTELY MEANINGLESS
давайте рассмотрим более реалистичный подход к тестированию: загрузите схему базы данных и напишите программу, которая заполняет ее фиктивными данными, а затем выполните запросы вашего приложения к этим данным.Это тестирует три важные вещи: 1. Сервер базы данных (аппаратное обеспечение) 2. Сервер базы данных (программное обеспечение) 3. Структура вашей базы данных и как она взаимодействует с (1) и (2) выше.
Обратите внимание, что это требует гораздо больше усилий, чем простые предварительно построенные тесты, такие как
pgBench
: вам нужно написать некоторый код для заполнения, и вам может понадобиться написать некоторый код для выполнения запросов и времени выполнения отчета.Этот вид тестирования также значительно более точен: поскольку вы работаете со своей схемой и запросами, вы можете увидеть, как они будут работать, и это дает вам возможность профилировать и улучшать вашу базу данных / запросы.
Результаты этих тестов являются идеальным представлением вашей базы данных. На всякий случай предположим, что вы достигнете только 50-70% этой производительности в вашей производственной среде (остальное - подушка, которая позволит вам справиться с неожиданным ростом, сбоями оборудования, изменениями рабочей нагрузки и т. Д.).
Слишком поздно! Это в производстве!
Как только ваши системы будут запущены в эксплуатацию, будет слишком поздно проводить «тестирование» - вы можете на короткое время включить ведение журнала / синхронизацию запросов и посмотреть, сколько времени потребуется для выполнения, и вы можете выполнить некоторые «стресс-тестовые» запросы для больших наборов данных во время отключения. ч. Вы также можете посмотреть на использование ЦП, ОЗУ и пропускной способностью диска системы, чтобы понять, насколько сильно она загружена.
К сожалению, все эти вещи помогут вам понять, что делает система, и смутное представление о том, насколько она близка к насыщению.
Это подводит нас к ...
Текущий мониторинг
Все тесты в мире не помогут вам, если ваша система вдруг увидит новые / другие модели использования.
К лучшему или худшему, развертывания баз данных не являются статичными: ваши разработчики будут что-то менять, ваш набор данных будет расти (они никогда не уменьшаются), и ваши пользователи каким-то образом будут создавать безумные комбинации событий, которые вы никогда не предсказывали при тестировании.
Чтобы правильно планировать емкость вашей базы данных, вам необходимо внедрить некоторый мониторинг производительности, чтобы предупредить вас, когда производительность базы данных больше не соответствует вашим ожиданиям. На этом этапе вы можете рассмотреть корректирующие действия (новое оборудование, схема БД или изменение запроса для оптимизации использования ресурсов и т. Д.).
источник
Как правило, вам нужны реалистичные варианты использования для тестирования производительности. Рекомендуется привлекать разработчиков приложений и конечных пользователей.
Запишите, что они обычно делают, параметризуйте его (контент, количество одновременных действий) для каждого варианта использования.
Затем создайте клиентскую часть. Часто одной физической машины недостаточно для создания производственной нагрузки.
Затем включите его, оцените, улучшите и проверьте снова.
Вы будете удивлены, где возникают узкие места.
источник