Перейти до вмісту

Проблеми з БД (shared Postgres / Valkey / Typesense)

  • Таймаути запитів у Abitly API / Strapi / Studsearch backend (часто одночасно — характерний індикатор shared-RDS).
  • too many connections.
  • Повільні відповіді API.
  • Помилки connection refused / SSL required.
  • BullMQ-задачі стоять у черзі (Valkey недоступний).
  • Пошук не повертає результати (Typesense).
  1. Postgres живий?aws rds describe-db-instances --db-instance-identifier studsearch-prod --query 'DBInstances[].{status:DBInstanceStatus,storage:AllocatedStorage,free:FreeStorageSpace}'.
  2. Конекшени — підключитись через psql (з dev-bastion або локально з aws ssm start-session) і:
    SELECT count(*), state FROM pg_stat_activity GROUP BY state;
    SELECT pid, application_name, now()-query_start AS dur, query
    FROM pg_stat_activity WHERE state='active' ORDER BY dur DESC LIMIT 10;
  3. Місце на дискуaws cloudwatch get-metric-statistics --metric-name FreeStorageSpace ....
  4. Valkeyaws elasticache describe-cache-clusters --cache-cluster-id abitly-prod-cache --show-cache-node-info.
  5. Typesensecurl https://<TYPESENSE_HOST>:<TYPESENSE_PORT>/health -H 'X-TYPESENSE-API-KEY: ...'.
СимптомЩо робити
Завис довгий запитСпочатку зрозуміти, який сервіс/схема. SELECT pg_terminate_backend(<pid>) — обережно, на чужій схемі може зламати інший сервіс.
Вичерпано пул конекшенівПеревірити який саме сервіс відкрив максимум (application_name). Перезапустити тільки його сервіс (не торкатися інших).
Місце закінчуєтьсяЗбільшити AllocatedStorage (aws rds modify-db-instance --allocated-storage <new>). Це не requires reboot на gp3.
Версія/тимчасова недоступністьПеревір Pending modifications (aws rds describe-db-instances).
СимптомЩо робити
OOM / evictionПеревірити maxmemory policy + ключі BullMQ (BULL:*). Можливо застрягли failed-jobs — почистити.
Pub/sub дропМожливий мережевий issue між ECS та ElastiCache (SG / route table).
  • Одна EC2-інстанція, без replica → якщо впала, пошук повністю мовчить. Restart: aws ssm start-session --target i-0c5c322b1c3fbbe24 --profile abitly → перевірити docker/systemd.

DDL / міграції — критично

Section titled “DDL / міграції — критично”
  • Координувати з власниками усіх трьох прод-сервісів. Спершу staging/dev, потім prod.
  • Ніколи не запускати DROP SCHEMA CASCADE чи DROP DATABASE — це знищить чужі дані.
  • TypeORM synchronize: true (в SSM /studsearch/prod/db/synchronize) — перевірити, що вимкнено в prod.
  • DBA / power-user: @Vladbandurin (поки що self — bus factor 1). Рекомендується явно зафіксувати backup-контакт коли команда виросте.
  • AWS Support: через AWS Console → Support Center (рівень підтримки TODO: — Developer/Business/Enterprise).
  • Connection-pool ліміти на сервіс (щоб один не з’їв усе).
  • Індекси на гарячих запитах.
  • Моніторинг pg_stat_activity у Grafana.
  • Регулярні automated RDS backups + Lambda abitly-dev-db-backup (S3 abitly-db-backups-v2).
  • Тримати t4g.small FreeStorageSpace > 5 GB (avg 25% reserved для WAL і temp).
  • Розглянути переходу на окремі RDS для prod-сервісів, якщо trade-off cost vs SPoF змінюється.