我正在尝试在没有任何过滤条件的情况下读取大约 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 万行。
如果您在客户端上看到性能较差,则一定是网络或客户端软件限制了您。