我想在我的应用程序运行期间检查有关 PostgreSQL 性能的一些信息。
我的应用程序在循环中对 20 个表执行以下操作:
截断表。
删除表上的约束
删除表上的索引
insert into local_table select * from remote_oracle_table
最近我在这部分遇到了一个错误
SQLERRM = 无法扩展文件“base/16400/124810.23”:在块 3092001 处仅写入了 8192 个字节中的 4096 个
在表上创建约束
在表上创建索引。
该操作每晚运行。大多数桌子都是500M-2G的小桌子,但很少有桌子是24G-45G的大桌子。
我的 wals 和我的数据目录在不同的 fs 上。我的数据目录 fs 大小是 400G。在此操作期间,数据目录 fs 变满。但是,在此操作之后,释放了 100G,这意味着从数据目录 fs 的 400g 中使用了 300G。关于这些尺寸的东西似乎不太好。
当我检查我的数据库大小时:
mydb=# SELECT
mydb-# pg_database.datname,
mydb-# pg_size_pretty(pg_database_size(pg_database.datname)) AS size
mydb-# FROM pg_database;
datname | size
-----------+---------
template0 | 7265 kB
mydb | 246 GB
postgres | 568 MB
template1 | 7865 kB
(4 rows)
当我检查 mydb 数据库中的所有表时:
mydb-# relname as "Table",
mydb-# pg_size_pretty(pg_total_relation_size(relid)) As "Size",
mydb-# pg_size_pretty(pg_total_relation_size(relid) -
pg_relation_size(relid)) as "External Size"
mydb-# FROM pg_catalog.pg_statio_user_tables ORDER BY
pg_total_relation_size(relid) DESC;
Table | Size | External Size
-------------------+------------+---------------
table 1| 45 GB | 13 GB
table 2| 15 GB | 6330 MB
table 3| 9506 MB | 3800 MB
table 4| 7473 MB | 1838 MB
table 5| 7267 MB | 2652 MB
table 6| 5347 MB | 1701 MB
table 7| 3402 MB | 1377 MB
table 8| 3092 MB | 1318 MB
table 9| 2145 MB | 724 MB
table 10| 1804 MB | 381 MB
table 11 293 MB | 83 MB
table 12| 268 MB | 103 MB
table 13| 225 MB | 108 MB
table 14| 217 MB | 40 MB
table 15| 172 MB | 47 MB
table 16| 134 MB | 36 MB
table 17| 102 MB | 27 MB
table 18| 86 MB | 22 MB
.....
在数据目录中,基本目录的大小为 240G。我的机器上有 16G 的内存。