postmaster
与尝试插入低容量行的客户端连接相关的子进程的 CPU 使用率较高(导致插入的行比使用相同行慢 25 倍)。COPY ... FROM STDIN
尝试识别系统/数据库配置以缓解上述较差的插入性能。我正在使用多线程 R 脚本来处理数据并将结果插入到 PostgreSQL 数据库中。我对 R 脚本进行了分析,以隔离调用的性能瓶颈DBI::dbBind()
,同时用于top
监视postmaster
与子 R 线程打开的连接关联的子进程(请参阅下面的代码)。在 INSERT 期间,R 子进程大部分时间处于空闲状态(大概是在等待调用返回DBI::dbBind()
),而postmaster
子进程在其运行大约 2-3 分钟的时间内消耗了 95-100% 的 CPU。
uname -a
:Linux localhost 4.16.6-202.fc27.x86-64 #1 SMP Wed May 2 00:09:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
/proc/cpuinfo
: 16 个处理器 ( Intel(R) Xeon(R) CPU D-1541 @ 2.10GHz
)ulimit …
postgresql performance configuration r postgresql-10 postgresql-performance
尝试生成 SQL 来计算给定百分位值集的加权连续值(下面使用的 25%、50% 和 75% 级别,但解决方案应允许任意参数级别)。换句话说,想要找到下面“源”表中测试数据的 25%、50% 和 75% 累积百分位数的插值“原始”值(按“cnt”加权)。
注意: 表示采样期间cnt
该值出现的次数,预期输出将对该值进行加权以得出百分位数(类似于分位数/中位数和类似的统计数据)raw
raw
cnt
测试数据:(表:来源)
| site | dateval | raw | cnt |
+--------+------------+-------+---------+
| A | 2019-01-05 | 45 | 14 |
| A | 2019-01-05 | 52 | 178 |
| A | 2019-01-05 | 45 | 9 |
| A | 2019-01-05 | 37 | 75 |
| A | 2019-01-05 | 23 | 98 |
| A | 2019-01-05 | …
Run Code Online (Sandbox Code Playgroud)