Postgresql 12 - 没有过滤条件的简单选择语句是否提供 5K 行/秒的吞吐量较低?我们可以在这里优化什么?



我正在尝试在没有任何过滤条件的情况下读取大约 4.5 到 500 万条记录表。 我只需要 postgres12 版本中表中的两到三列 (varchar(。 该表仅包含 20 列(大多数是 varchar( 所以,我的查询是这样的。

SELECT
id as INDIV_ID,
loc 
FROM
table

说明计划输出:

pgres=> explain (analyze, buffers, timing, format text) SELECT id as INDIV_ID, org_ext_loc FROM individuals;
QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
Seq Scan on individuals  (cost=0.00..353469.48 rows=4869048 width=54) (actual time=0.017..2659.760 rows=4869591 loops=1)
Buffers: shared hit=2133 read=302646
Planning Time: 0.814 ms
Execution Time: 3092.984 ms
(4 rows)

在 track_io_timing = ON 的情况下解释计划输出

QUERY PLAN
--------------------------------------------------------------------------------------------------------------------------
Seq Scan on individuals  (cost=0.00..353469.48 rows=4869048 width=54) (actual time=0.019..2607.686 rows=4869591 loops=1)
Buffers: shared read=304779
Planning Time: 2.975 ms
Execution Time: 3034.370 ms
(4 rows)

我们的服务器信息:

OS : Oracle Linux 7.3
RAM : 65707 MB
HDD Capacity : 2 Terabytes
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
CPU(s):                16
CPU MHz:               2294.614

我尝试了各种使用

  • 范围打开的表分区(另一个序列列(
  • 使用并行提示
  • 将max_parallel_workers_per_gather设置为 8;

详尽的搜索非常烦恼,没有适当的结果和吞吐量实际上下降到5K行/秒。

我正在使用pentaho(kettle(etl工具通过服务器上的jdbc连接运行此查询。

我的 postgres12 服务器与 pentaho 在同一台机器上

我尝试以两种方式创建表

  • 通常没有任何分区
  • 使用范围分区

但是检索时间仍然很高。

如何获得大约 15K 行/秒的吞吐量?

执行计划指出查询在 3 秒内返回 500 万行。

如果您在客户端上看到性能较差,则一定是网络或客户端软件限制了您。

相关内容

最新更新