Практические различия между типами инстансов Amazon RDS (PostgreSQL) - PullRequest
1 голос
/ 14 июля 2020

Я относительно новичок в настройке PostgreSQL баз данных в целом и AWS.

Я пытаюсь выяснить, в чем практические различия между типами инстансов Amazon RDS . Некоторый контекст о моей организации и вариантах использования:

  • Мы в основном небольшая команда (менее 5 пользователей) аналитиков данных / специалистов по данным
  • Нам не нужно 100% время безотказной работы. Скорее всего, я буду включать базу данных в обычное рабочее время, а потом отключать. Наш вариант использования в первую очередь предназначен для целей аналитики / науки о данных, на нем не будет работающих приложений.
  • На данный момент нам понадобится 1 база данных.
  • База данных будет содержать около 300 - 500 ГБ данных. Большинство таблиц небольшие (менее 1 ГБ). Однако есть несколько довольно больших таблиц. Самая большая таблица будет иметь размер около 80 ГБ и будет запрашиваться часто. Есть еще несколько таблиц размером около 10 ГБ.

Я начал с уровня бесплатного пользования db.t2.micro, чтобы набраться опыта, разработать и протестировать то, что мне нужно. Однако мне трудно понять, как это соотносится с другими случаями. Наша команда прямо сейчас очень заботится о бюджете, поэтому я пытаюсь оценить это, прежде чем предлагать обновление.

Примеры операций, которые я пытаюсь выполнить

  1. Загрузка таблицы из CSV: У нас есть много CSV на диске, которые я буду загружать в базу данных PostgreSQL. Я только что протестировал один прямо сейчас, создав таблицу и загрузив CSV в таблицу (используя \copy) файла размером 11 ГБ (35 401 551 строк и 40 столбцов), заняв около 27 минут. Поможет ли в этом обновить экземпляр? Если да, то я не уверен, до чего бы я хотел перейти?
  2. A select count(*) из этой таблицы заняло около 15 минут (при первом запуске; во втором запуске потребовалось около 3 минут, вероятно потому что это кеширует статистику? 3 минуты мне все равно кажутся медленными.) Опять же, не уверены, поможет ли в этом обновление экземпляра? Также следует отметить, что у меня нет добавленных первичных ключей или индексов. Значит, могут быть другие способы оптимизации производительности без обновления экземпляра? Например, может оказаться полезным разбиение на разделы: https://www.postgresql.org/docs/10/ddl-partitioning.html. В таблице есть столбец state, который очень часто является одним из первых фильтров, используемых пользователями, поскольку часто пользователи хотят видеть только одно или несколько определенных состояний.
    1. Простая группа по запросу: select ColA, count(*) group by ColA заняло около 2,5 минут

EDIT Просто отмечу некоторые другие полезные ресурсы, которые я найдено:

  1. https://www.apptio.com/blog/ec2-m5-vs-t3/ при выборе между m5 и t3

1 Ответ

0 голосов
/ 14 июля 2020

В основном для типов инстансов в RDS основные различия заключаются в следующем:

  • Доступная память
  • Доступный ЦП
  • Максимальная пропускная способность сети
  • Burstable vs non-burstable (семейство экземпляров T использует пакетные кредиты, когда они исчерпаны, ваш ЦП ограничен).

Поскольку вы используете T2.micro, у вас есть только один доступный ЦП . После того, как кредиты будут исчерпаны, вы также будете ограничены только 20% максимальной загрузкой ЦП, что ограничит ваши возможности.

Я также хотел бы отметить, можете ли вы инвестировать больше в платформу AWS есть специальное решение для хранилища данных для аналитики: Redshift , оно, вероятно, будет работать лучше, но будет стоить дороже, оно также разветвлено от Postgres.

Если придерживаться Postgres в RDS вы также должны учитывать Aurora Postgres, он обычно обеспечивает производительность в 2-3 раза выше, чем обычный Postgres на RDS.

...