Найти в Дзене
Шардирование vs репликация: масштабируем БД
Пример Представим себе БД услуг барбершопа в Южном Бутово. Данные лежат в одной табличке в PostgreSQL и используются внутренней системой для составления расписания мастеров, расчета премий и т. д. Бородачей в Бутово оказалось сильно больше, чем предполагалось в изначальном бизнес-плане. Владельцам барбершопа пришлось выкупить соседний спортзал и нанять еще 100 барберов. Бизнес процветает. Роскошные бороды заполонили Бутово. Однако, БД начала подводить: • из-за выхода из строя сервера БД 400...
2977 читали · 6 лет назад
Ищем самые дорогие query в PostgreSQL
PostgreSQL стал тормозить? Давай разбираться! Установка экстеншенов Для получения необходимой инфы, нужно поставить 2 extension: CREATE EXTENSION pg_stat_statements; CREATE EXTENSION pg_stat_kcache; Есть 2 ментальных ловушки Не хочу еще больше грузить бедную БД Оба этих расширения создают несколько системных табличек и вьюшек, в которые скидывается инфа о выполнении запросов. Звучит страшно? На практике при нагрузке 5000 запросов/сек включение этих экстеншенов никак не повлияло ни на CPU, ни на latency...
1044 читали · 6 лет назад
Простой способ анализировать GC в проде
Проблема У тебя есть сервер в продакшене. Он успешно работает какое-то время. Но ты стал замечать, что • раз в минуту он уходит в себя на пару секунд • через неделю работы падает с OutOfMemoryError • любые другие симптомы, которые намекают на проблемы с утилизацией памяти Значит пора уже разобраться со своим garbage collector. Тем более, что это совсем не сложно! План такой 1. Включаем специальные флажки JVM при следующем редеплое, чтобы она писала логи GC 2. Закачиваем логи на специальный бесплатный сайт gceasy...
792 читали · 6 лет назад
Java GC: Mark-Sweep-Compact и поколения
Коротко о Mark-Sweep Чтобы чистить ненужные объекты GC делает так: 1. Обходит граф всех объектов в хипе (heap) и помечает их 2. Не помеченные объекты никто не использует - их можно удалить. Пример кода Рассмотрим такой код: Так будет выглядеть дерево зависимостей для каждого телефона Nokia. Коротко о поколениях Чтобы каждый раз не обходить полностью весь граф объектов, GC разделяет объекты на поколения: Объекты из Old generation хранятся в Old регионе GC. Объекты из Young generation хранятся в регионах Eden или Survivor...
751 читали · 6 лет назад
Кэширование in-memory vs redis
Пример задачи: У нас есть сайт по учёту павлинов всего мира. Он неожиданно для всех стал безумно популярным и мы хотим масштабироваться. Мы храним информацию о павлинах в PostgreSQL в таблице peacock: * Новые павлины рождаются примерно 1 раз в секунду. * Различные запросы по этой таблице выполняются около 100 раз в секунду. Наш PostgreSQL спокойно выдерживает такую нагрузку. Но тут мы решили добавить на главную страницу сайта диаграмму распределения павлинов по зонам в стране пользователя в реальном времени...
623 читали · 6 лет назад
Если нравится — подпишитесь
Так вы не пропустите новые публикации этого канала