Postgresql 12 - 没有过滤条件的简单选择语句会减少 5K 行/秒的吞吐量?我们可以在这里优化啥?
Posted
技术标签:
【中文标题】Postgresql 12 - 没有过滤条件的简单选择语句会减少 5K 行/秒的吞吐量?我们可以在这里优化啥?【英文标题】:Postgresql 12 - Simple select statement without filter condition is giving less throughput of 5K rows/sec? What can we optimize here?Postgresql 12 - 没有过滤条件的简单选择语句会减少 5K 行/秒的吞吐量?我们可以在这里优化什么? 【发布时间】:2020-05-15 13:43:32 【问题描述】:我正在尝试在没有任何过滤条件的情况下读取大约 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 行/秒的吞吐量?
【问题讨论】:
【参考方案1】:执行计划说查询在 3 秒内返回 500 万行。
如果您发现客户端的性能较差,则一定是网络或客户端软件限制了您。
【讨论】:
本例中的客户端软件是 pentaho(ETL 工具)驻留在同一台机器上,如果您对此 pentaho 有任何想法,请指出.. 非常感谢并非常感谢 嗯,看起来不像track_io_timing
是on
,至少我没有看到任何 I/O 时间。不要试图在数据库端寻找问题,它必须在其他地方。剖析整个过程!以上是关于Postgresql 12 - 没有过滤条件的简单选择语句会减少 5K 行/秒的吞吐量?我们可以在这里优化啥?的主要内容,如果未能解决你的问题,请参考以下文章
Postgresql 查询的过滤条件中的列上的字符串操作如何影响它选择的计划
PostgreSQL 执行多个动态 WHERE 条件而不动态编写 SQL
使用 dplyr 过滤 postgreSQL 数据库中的多个值