Как удалить неиспользуемые временные файлы из Google Cloud SQL, управляемого Postgres? - PullRequest
0 голосов
/ 30 ноября 2018

Мы перешли на Google Cloud SQL, создали пару баз данных и импортировали много данных.Наряду с этим было довольно большое количество запросов, которые были прерваны здесь и там, которые оставили некоторый мусор в виде временных файлов.И использование памяти превысило 1 ТБ.

postgres=> SELECT datname, temp_files AS "Temporary files", pg_size_pretty(temp_bytes) AS "Size of temporary files" FROM pg_stat_database;
    datname    | Temporary files | Size of temporary files 
---------------+-----------------+-------------------------
 cloudsqladmin |               0 | 0 bytes
 template0     |               0 | 0 bytes
 postgres      |               0 | 0 bytes
 template1     |               0 | 0 bytes
 first         |           33621 | 722 GB
 second        |               9 | 3399 MB
 third         |          293313 | 153 GB
(7 rows)

По результатам запроса выше у нас есть ~ 1 ТБ потенциально бесполезных файлов.Есть пара вопросов:

  1. Как определить временные файлы, которые не используются никакими запущенными запросами?
  2. Как удалить их, если Postgres управляется Google Cloud SQL?

1 Ответ

0 голосов
/ 03 декабря 2018

Согласно документации PostgreSQL , поле temp_bytes определяется как:

Общий объем данных, записанных во временные файлы по запросам в этой базе данных.Подсчитываются все временные файлы, независимо от того, почему был создан временный файл, и независимо от настройки log_temp_files.

Это означает, что число является суммой размеров временных файлов с момента создания базы данных (или с момента последнего pg_stat_reset ()), а not текущее использование временного файла.

Текущее использование может быть определено с использованием «файловых функций» вэкземпляр облачной базы данных, но в Cloud SQL обычный пользователь не может выполнить select pg_ls_dir('base/pgsql_temp'), поскольку он зарезервирован только для суперпользователей.

Как вы сказали, Cloud SQL является управляемой службой, поэтому на данный момент нетспособ узнать текущее использование временного файла.

Одна вещь, которая определенно очистит число, которое вы видите, это pg_stat_reset (), хотя, как уже было сказано, речь идет не о текущем использовании временного файла, а об общей сумме;

Одна вещь гарантированно очищает временные файлы - это перезапуск экземпляра базы данных, так как частью процесса запуска является wiping каталог base/pgsql_temp.

...