我们有什么(软件):
postgresql.conf)硬件:
所以,我们必须加载到数据库 aprox。100.000.000行与bytea列,以及更简单的500.000.000行(无 LOB)。varchar第一个表上有 2 个索引(长度为 13、19),varchar第二个表上有 2个索引(长度为 18、10)。每个表也有生成 id 的序列。
到目前为止,这些操作使用 8 个并行连接和 50 个 JDBC 批处理大小进行。下图展示了系统负载:它对postgresql进程是零负载。加载 24 小时后,我们只加载了 10.000.000 行,这是非常缓慢的结果。

我们寻求帮助调整PostrgreSQL配置的目的是:
1)为了超快加载这个数量的数据,它是一次性操作,所以它可以是临时配置
2) 对于生产模式,通过它们的索引对这 2 个表执行中等数量的 SELECT,无需连接和排序。
performance insert database-tuning postgresql-9.3 bytea performance-tuning
我有 4 个表,让我们将它们命名为:
(kk - 表示数百万)
我有一个遗留查询,它是这样构造的:
select C.<some_fields>,B.<some_fields>,D.<some_fields> from C
inner join A on C.x = A.x
inner join D on D.z = 123 and D.a_id = A.a_id
inner join B on C.x = B.x and B.z = 123
where A.type = 'Xxx'
Run Code Online (Sandbox Code Playgroud)
此查询非常慢,执行结果最多需要 3 分钟(对于特定情况,它返回 35k 行)。
但是当我将其更改为以下结构时:
with t as (
select C.<some_fields>,D.<some_fields> from C
inner join A on C.x = A.x
inner join D …Run Code Online (Sandbox Code Playgroud) postgresql performance optimization execution-plan amazon-rds query-performance
我有数十个遗留存储过程,它们在内部创建临时表,用于收集只读应用程序的结果。
我已在 Amazon RDS 中创建了 PostgreSQL 的只读副本,并尝试执行此过程,但失败了,因为它甚至不允许在只读事务中创建临时表。
有什么方法可以以最小的努力解决这个问题?
我有一个PostgreSQL包含数百个函数的旧数据库模式。我知道其中一些不再使用了,我想删除它们。
查找有时执行哪些过程而哪些不执行的最简单方法是什么?PostgreSQL 中是否有任何关于过程使用的统计数据?
使用的引擎版本为 PostgreSQL 9.5。
postgresql ×3
amazon-rds ×2
performance ×2
bytea ×1
functions ×1
insert ×1
optimization ×1
replication ×1
statistics ×1