检查Postgres中正在构建的关系的大小

时间:2017-02-22 13:35:26

标签: postgresql

我有一个加载的OLTP数据库。我{100}关系ALTER TABLE.. ADD PK - 想检查进度。但是在构建之前我没有在pg_catalog中用于其他事务,所以不能只选择它。

我尝试了find ./base/14673648/ -ctime 1 -mtime - 数百个文件,我认为 - 为什么我认为它创建了一个文件节点?只是因为它占用了一些空间。

原谅我的无知和建议 - 我如何检查到目前为止创建PK的大小?

更新:我可以总结./base/pgsql_tmp/pgsql_tmpPID.N。其中PID是创建PK为per docs的会话的pid:

  

临时文件(用于排序超出适合的数据的操作   在内存中)是在PGDATA / base / pgsql_tmp中创建的,或者是在   表空间目录的pgsql_tmp子目录,如果是其他表空间   而不是为他们指定pg_default。临时文件的名称   形式为pgsql_tmpPPP.NNN,其中PPP是拥有的PID   后端和NNN区分不同的临时文件   后端。

新问题:如何从pg_catalog获取它?

pondstats=# select pg_size_pretty(temp_bytes) from pg_stat_database where datid = 14673648;
 pg_size_pretty
----------------
 89 GB
(1 row)

显示所有临时文件的总和,而不是每个关系

1 个答案:

答案 0 :(得分:1)

主键使用唯一索引实现,并且在数据目录中包含文件。

不幸的是,没有办法检查索引创建的进度(除非您了解源代码并使用调试器附加到后端)。

您只需要专注于关系文件

的输出中而不是
SELECT relfilenode FROM pg_class
   WHERE relfilenode <> 0
UNION
SELECT pg_relation_filenode(oid) FROM pg_class
   WHERE pg_relation_filenode(oid) IS NOT NULL;

一旦你知道哪个文件属于你的创建索引(它应该快速增长,除非有阻止语句的锁定)你可以通过将它与属于a的文件进行比较来开始猜测它需要多长时间。可比较表上的可比指数。

所有漂亮的手工波浪,我很害怕。