postgresql - 如何从 Google Cloud SQL 管理的 Postgres 中删除未使用的临时文件?

标签 postgresql google-cloud-platform google-cloud-sql

我们已迁移到 Google Cloud SQL,创建了几个数据库并导入了大量数据。除此之外,还有大量的查询被各处中断,从而以临时文件的形式留下了一些垃圾。而且存储使用量远远超过 1TB。

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)

根据上面的查询结果,我们有大约 1TB 的可能无用的文件。有几个问题:

  1. 如何识别任何正在运行的查询未使用的临时文件?
  2. 如果 postgres 由 Google Cloud SQL 管理,如何删除它们?

最佳答案

根据 PostgreSQL documentation ,字段 temp_bytes 定义为:

Total amount of data written to temporary files by queries in this database. All temporary files are counted, regardless of why the temporary file was created, and regardless of the log_temp_files setting.

含义是,该数字是自数据库创建(或自上次 pg_stat_reset())以来临时文件大小的总和,并且不是当前临时文件大小文件使用情况。

可以使用非云数据库实例中的“文件函数”确定当前使用情况,但在 Cloud SQL 中,普通用户无法执行 select pg_ls_dir('base/pgsql_temp') ,如下所示仅保留给 super 用户。

正如您所说,Cloud SQL 是一项托管服务,因此目前无法查看当前临时文件的使用情况。

肯定会清除您看到的数字的一件事是 pg_stat_reset(),尽管如前所述,它与当前临时文件使用情况无关,而是与历史总数有关;

保证清除临时文件的一件事是重新启动数据库实例,因为启动过程的一部分是删除base/pgsql_temp目录。

关于postgresql - 如何从 Google Cloud SQL 管理的 Postgres 中删除未使用的临时文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53556583/

相关文章:

sql - postgres - 如何选择每个 user_id,每个交易类型的最后交易?

database - 从 GCP secret 管理器中读取 .DER 值并将其保存到 .DER 文件

python - 谷歌云功能 - ImportError : cannot import name 'pubsub' from 'google.cloud' (unknown location)

google-cloud-platform - 将实体导入本地 GCP 数据存储模拟器

mysql - 将 CSV 加载到 CloudSQL

google-cloud-platform - Google Cloud SQL 高可用性真的能提高可靠性吗?

Postgresql 更新触发器不接受 When/OF 条件

sql - 在没有 pg_lang 条目的情况下在 Postgresql 中查找存储过程语言的策略

java - 连接到 Google Cloud SQL com.google.cloud.sql.mysql.SocketFactory 转换时出错

bash - psql --(记录|字段)-分隔符 NUL