AWS Postgres вставляет с SQLALchemy более чем в 1000 раз медленнее, чем локальный SQLite - PullRequest
1 голос
/ 29 мая 2019

У меня есть сервер Postgres (10.2) на AWS RDS (m4.large 2vCPU, 8 ГБ памяти) со стандартными настройками (кроме отключенной синхронной фиксации), и любые виды вставок SQLALchemy невероятно медленны по сравнению с локальным SQLite на моемноутбук.

Я запустил скрипт производительности, найденный в официальных документах SQLAlchemy , см. внизу страницы.

По сути, сценарий создает таблицу Customer с первичным целочисленным ключом id и строковым столбцом name.Сценарий просто вызывает "INSERT INTO customer (name) VALUES (?)" различными способами, чтобы вставить 1000 строк.

И результаты действительно потрясающие для установки AWS, которая стоит почти 200 долларов США в месяц:

Результаты SQLite:

SQLAlchemy ORM: общее время для 1000 записей 0,17040562629699707 секунд

SQLAlchemy ORM задано pk: общее время для 1000 записей 0,08621740341186523 секунд

SQLAlchemy ORM bulk_save_object:Общее время для 1000 записей 0,027913570404052734 секунд

SQLAlchemy ORM bulk_insert_mappings (): общее время для 1000 записей 0,014255523681640625 секунд

SQLAlchemy Core: общее время для 1000 записей 0,010448455810546875 сек ** Результаты AWS Postgres :

SQLAlchemy ORM: общее время для 1000 записей 18.51957869529724 секунд

SQLAlchemy ORM задано pk: общее время для 1000 записей 18.049689054489136 секунд

SQLAlchemy ORM bulk_save_objects (): общее время для 1000 записей 18.0506489276886 с

SQLAlchemy ORM bulk_insert_mappings (): общее время для 1000 записей. 17,969014644622803 сек.

SQLAlchemy Core: общее время для 1000 записей.намного медленнее, основной даже более чем в 1000 раз.Это проблема конфигурации Postgres?Моя сетевая задержка не может быть такой плохой :-).Спасибо!

РЕДАКТИРОВАТЬ:

Благодаря @Laurenz, я использовал pg_stat_statements для исследования, и время запроса полностью подходит.Я подозреваю, что это проблема с сетью.Более того, я запустил небольшой экземпляр EC2 в том же VPC, что и база данных, и снова запустил сценарий производительности: там производительность на несколько порядков выше (только в 5-20 раз медленнее, чем SQLite, но это то, что я ожидал).

Есть идеи, как решить эту проблему?Что может быть причиной для этого?Я имею в виду, что 1000 строк с небольшим количеством строковых данных - это не много с точки зрения байтов, которые должны быть переданы через Интернет.Кто-нибудь еще сталкивался с такой же проблемой с базами данных AWS, живущими в VPC?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...