小编Whe*_*hee的帖子

解决 PostgreSQL INSERT 性能不佳问题的系统配置

问题症状

postmaster与尝试插入低容量行的客户端连接相关的子进程的 CPU 使用率较高(导致插入的行比使用相同行慢 25 倍)。COPY ... FROM STDIN

背景

尝试识别系统/数据库配置以缓解上述较差的插入性能。我正在使用多线程 R 脚本来处理数据并将结果插入到 PostgreSQL 数据库中。我对 R 脚本进行了分析,以隔离调用的性能瓶颈DBI::dbBind(),同时用于top监视postmaster与子 R 线程打开的连接关联的子进程(请参阅下面的代码)。在 INSERT 期间,R 子进程大部分时间处于空闲状态(大概是在等待调用返回DBI::dbBind()),而postmaster子进程在其运行大约 2-3 分钟的时间内消耗了 95-100% 的 CPU。

系统/环境:

  • postgresql 版本 10.3(Fedora 包 10.3-5.fc27)
  • 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

5
推荐指数
1
解决办法
1717
查看次数

查询获取加权百分位数

尝试生成 SQL 来计算给定百分位值集的加权连续值(下面使用的 25%、50% 和 75% 级别,但解决方案应允许任意参数级别)。换句话说,想要找到下面“源”表中测试数据的 25%、50% 和 75% 累积百分位数的插值“原始”值(按“cnt”加权)。

注意: 表示采样期间cnt该值出现的次数,预期输出将对该值进行加权以得出百分位数(类似于分位数/中位数和类似的统计数据)rawrawcnt

测试数据:(表:来源)

|  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)

postgresql aggregate postgresql-10

5
推荐指数
1
解决办法
2790
查看次数