Ssylka

Оптимизация базы данных монолитного приложения: стратегии и решения

Для снижения нагрузки на базу данных монолитного приложения, разработчики применили комплексный подход, включающий анализ «медленных» запросов, вынос таблиц в отдельные базы данных и сокращение объёма хранимых данных. Сначала была проведена оптимизация запросов, на основе анализа slow query логов, что позволило снизить нагрузку на CPU и ОЗУ.

Для ускорения процесса разгрузки основной базы данных был разработан инструмент TableSwitcher. Он позволяет переключать чтение и запись отдельных таблиц на новую БД, минимизируя риски. Изначально используется одновременная запись в обе базы, затем переключение чтения и генерации ID на новую. Процесс включает в себя последовательное переключение стратегий, основанных на первичных ключах, и последующую миграцию отсутствующих данных.

При выборе таблиц для переноса, учитывались нагрузка, использование в коде, связанность с другими таблицами и актуальность переноса. Для выноса выбрали 13 таблиц, преимущественно содержащих данные логирования. Столкнулись с проблемами из-за ограничений на количество подключений к БД в облаке, а также из-за проблем переключения мастера в другом дата-центре, которые были решены с использованием HAProxy и PgBouncer.

Дополнительно были реализованы стратегии по сокращению размера БД. Это включало отсеивание забытых таблиц, удаление устаревших данных, поиск неиспользуемых таблиц и индексов, и, наконец, сокращение срока хранения информации о заказах. В результате, размер БД был уменьшен с 4 ТБ до 750 ГБ, что позволило перенести её в облако.


Новое на сайте

8265Как обратная связь влияет на эффективность процессов? 8264Почему лиса зовется Патрикеевной и кто такой Патрикей? 8263Какая сушильная машина не съест пространство маленькой квартиры? 8262Как устроены конденсаторы КБГ-И и почему их стоит использовать с осторожностью? 8261Возрождение Илкли: новый фонтан, вдохновленный Болотным мхом, впервые за шесть десятилетий 8260Можно ли детектировать объекты без умножения? 8259Может ли человеческая алчность поглотить целое озеро? 8258Как ускорить разработку с Docker Compose и повысить её эффективность? 8257Почему космические струи плазмы бросают вызов пониманию? 8256Гастрономический триумф нового Орлеана: идеальный сэндвич По-бой в преддверии Super Bowl... 8255Зачем нужен сложный контроллер для солнечного коллектора? 8254Возможен ли триумф на Марсе к 2029 году? 8253Почему разные дорожные знаки имеют разную форму, и зачем? 8252Может ли электричество излечить душевную боль?