Работает на RHEL 7 PostgreSQL Система версии 12 имеет 28 ГБ памяти и 12 ГБ совместно используемой памяти. БД использует более 6 ТБ на диске. Некоторые строки содержат около 300 миллионов строк.
Переместил мою БД из версии 9 в версию 12, и я запускаю тесты на новой БД. У нас есть процесс, который генерирует сводные данные во временной таблице, а затем мы запрашиваем временную таблицу для разных вещей, а затем мы удаляем временную таблицу - гораздо быстрее, чем многократно выполнять очень похожие запросы, поэтому это было сделано.
Их запрос похож на этот:
CREATE TEMPORARY TABLE
XXX
AS
SELECT
COUNT(t.id) AS count,
t.tagged AS tagged,
t.tag_state AS tag_state,
t.error AS error,
td.duplicate AS duplicate
FROM
ttt t
INNER JOIN tweet_data td ON (td.tweet_id = t.id)
GROUP BY
t.tagged,
t.tag_state,
t.error,
td.duplicate;
Обратите внимание, что это отлично работает на V9, но я не очень внимательно наблюдал за этим на V9, чтобы увидеть, что он делает. На V12 использование общей памяти растет медленно, а затем примерно через 15 минут она резко возрастает, увеличивается до 12 ГБ, а затем пытается увеличить ее и выдает ошибку:
Ошибка: ОШИБКА: не удалось изменить размер общей Сегмент памяти "/PostgreSQL.868719775" до 2147483648 байт: на устройстве не осталось места
По какой-то причине мы выполнили только оператор select без создания временной таблицы, и он также завершился ошибкой при увеличении общей памяти, но в сообщении об ошибке говорится, что он был убит администратором.
В настоящее время я работаю с БД в вакууме, чтобы посмотреть, поможет ли это.
Наибольшее беспокойство вызывает то, что это работает с V9, но не работает на V12. Я также знаю, что механизм запросов у них очень отличается и нов в V12 по сравнению с V9.
У меня была безумная надежда, что поэтапный запуск вакуума будет иметь значение. Данные были перенесены с использованием pg_upgrade.
vacuumdb -U postgres -p 5431 --all --analyze-in-stages
Я не знаю, была ли создана временная таблица или нет, но после запуска вакуума мы снова запустили полный запрос, создав временную таблицу, и она также не удалась.
Есть мысли? Является ли мой единственный выбор, чтобы попробовать больше общей памяти?