pg_restore 忽略 -j 参数
pg_restore ignores -j parameter
我有一个相当大的数据库(15G+ 压缩)是这样创建的:
pg_dump wrwks_prod -Fc -f /path/to/file.dump
并像这样恢复到远程主机:
pg_restore --no-owner --clean --dbname=dbname --username=user --host=remote_host --port=port -j 3 --v /path/to/file.dump
但是我查看远程机器时,只有一个进程使用一个内核创建索引,因此忽略了jobs参数。
这可能是什么原因?
使用 Postgres 9.2 的本地和远程机器 运行。
我假设您有一个巨大的 table 并且上面有一个巨大的索引,因此并行作业可以非常快速地恢复所有其余的小关系。在 table 完全恢复之前无法启动索引构建,因此它会等待。一旦 table 恢复,就会创建一个巨大的索引……当然这是一个假设……
试试 运行 smth 这样的:
SELECT oid, row_estimate, total_bytes
,pg_size_pretty(total_bytes) AS total
, pg_size_pretty(index_bytes) AS INDEX
, pg_size_pretty(toast_bytes) AS toast
, pg_size_pretty(table_bytes) AS tbl
FROM (
SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes FROM (
SELECT c.oid,nspname AS table_schema, relname AS TABLE_NAME
, c.reltuples AS row_estimate
, pg_total_relation_size(c.oid) AS total_bytes
, pg_indexes_size(c.oid) AS index_bytes
, pg_total_relation_size(reltoastrelid) AS toast_bytes
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE relkind = 'r'
) a
) a
order by "total_bytes" desc
limit 10
;
确认或忽略假设
我有一个相当大的数据库(15G+ 压缩)是这样创建的:
pg_dump wrwks_prod -Fc -f /path/to/file.dump
并像这样恢复到远程主机:
pg_restore --no-owner --clean --dbname=dbname --username=user --host=remote_host --port=port -j 3 --v /path/to/file.dump
但是我查看远程机器时,只有一个进程使用一个内核创建索引,因此忽略了jobs参数。
这可能是什么原因?
使用 Postgres 9.2 的本地和远程机器 运行。
我假设您有一个巨大的 table 并且上面有一个巨大的索引,因此并行作业可以非常快速地恢复所有其余的小关系。在 table 完全恢复之前无法启动索引构建,因此它会等待。一旦 table 恢复,就会创建一个巨大的索引……当然这是一个假设…… 试试 运行 smth 这样的:
SELECT oid, row_estimate, total_bytes
,pg_size_pretty(total_bytes) AS total
, pg_size_pretty(index_bytes) AS INDEX
, pg_size_pretty(toast_bytes) AS toast
, pg_size_pretty(table_bytes) AS tbl
FROM (
SELECT *, total_bytes-index_bytes-COALESCE(toast_bytes,0) AS table_bytes FROM (
SELECT c.oid,nspname AS table_schema, relname AS TABLE_NAME
, c.reltuples AS row_estimate
, pg_total_relation_size(c.oid) AS total_bytes
, pg_indexes_size(c.oid) AS index_bytes
, pg_total_relation_size(reltoastrelid) AS toast_bytes
FROM pg_class c
LEFT JOIN pg_namespace n ON n.oid = c.relnamespace
WHERE relkind = 'r'
) a
) a
order by "total_bytes" desc
limit 10
;
确认或忽略假设