Выполнение большого запроса с помощью psycopg2 - PullRequest
1 голос
/ 30 марта 2019

Я пытаюсь выполнить большой запрос на выборку (около 50 000 000 из 200 000 000 строк, 15 столбцов) и извлечь все эти данные в кадр данных pandas с помощью psycopg2. В инструменте состояния сервера pgadmin я вижу, что мой запрос активен около получаса, а затем становится бездействующим. Я прочитал, это означает, что сервер ждет новой команды. С другой стороны, в моем скрипте на python все еще нет данных, и он их тоже ждет (ошибок нет, похоже, данные загружаются).

Подводя итог, база данных ожидает, Python ждет, я все еще должен ждать? Есть ли шанс на счастливый конец? Или python не может обработать такое большое количество данных?

1 Ответ

1 голос
/ 30 марта 2019

Святой курит, Бэтмен!Если выполнение вашего запроса занимает больше нескольких минут, вам следует подумать о другом способе обработки ваших данных!Если вы возвращаете 200 000 000 строк из 15 однобайтовых столбцов, это уже 3 гигабайта необработанных данных, при условии, что нет ни одного байта служебных данных, что очень маловероятно.Если вместо этих столбцов используются 64-разрядные целые числа, это уже 24 гигабайта.Это много данных в памяти, которые нужно обработать для Python.

Рассматривали ли вы, что произойдет, если во время выполнения произойдет сбой вашего процесса или соединение прервано?Ваша программа получит выгоду от обработки строк данных кусками, если это возможно для вашего процесса.Если это действительно невозможно, рассмотрите подходы, которые работают с самой базой данных, такие как использование PL / pgSQL.

...