我有一个加载的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)
显示所有临时文件的总和,而不是每个关系
答案 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的文件进行比较来开始猜测它需要多长时间。可比较表上的可比指数。
所有漂亮的手工波浪,我很害怕。