PostgreSQL:具有多个运行功能而没有硬件瓶颈,性能下降
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PostgreSQL:具有多个运行功能而没有硬件瓶颈,性能下降相关的知识,希望对你有一定的参考价值。
我具有简单的功能,如果我运行它,大约需要40秒才能完成。
select * from f_cyklus1(100000000)
但是如果我在8个独立的实例中运行此函数8次,这意味着所有8个函数都并行运行,则每个实例需要大约210至260秒的时间才能完成。这是性能的巨大下降。我尝试将其编译为8个单独的函数,然后再次运行,但性能没有变化。
select * from f_cyklus1(100000000);
select * from f_cyklus2(100000000);
select * from f_cyklus3(100000000);
select * from f_cyklus4(100000000);
select * from f_cyklus5(100000000);
select * from f_cyklus6(100000000);
select * from f_cyklus7(100000000);
select * from f_cyklus8(100000000);
那么,为什么要花40到210-260才能完成?我们的虚拟机有16个CPU,而物理硬件的利用率很低。在测试时,我也是唯一使用Postgre数据库的人。
create or replace function f_cyklus1 (p_rozsah int) returns bigint as -- drop function f_cyklus(int)
$body$
declare
declare
v_exc_context TEXT;
v_result INTEGER;
p_soucet bigint :=0;
begin
for i in 0..p_rozsah
loop
p_soucet = p_soucet + i;
end loop;
return p_soucet;
EXCEPTION
WHEN OTHERS THEN
GET STACKED DIAGNOSTICS v_exc_context = PG_EXCEPTION_CONTEXT;
PERFORM main.ut_log('ERR', SQLERRM || ' [SQL State: ' || SQLSTATE || '] Context: ' || v_exc_context );
RAISE;
END;
$body$ LANGUAGE plpgsql
x86_64-pc-linux-gnu上的PostgreSQL 11.6,由gcc(GCC)4.8.5编译20150623(Red Hat 4.8.5-39),64位
虚拟机:Centos 7 + KVM
硬件:2个AMD EPYC 7351 + 256 GB RAM
注:我已经问过类似的问题,我认为这是异步处理造成的,但这表明问题实际上出在原始Postgres性能上,因此我删除了先前的问题并提出了新的问题。
[据我了解,您有8个串行运行,每个40秒,总计320秒,而8个并行运行,总计260秒。并行运行时,各个运行速度较慢,但总并行运行速度较快。
这很有意义,因为所有8次运行都共享数据库的资源;它的CPU,内存,磁盘I / O和网络。每个单独的运行都会较慢,但整体运行会更快。
您的函数只是简单地迭代并返回1亿个整数。这不会占用太多的CPU,内存或磁盘,但仍必须通过网络传输它们。每个发送1亿个8字节整数的8个功能约为6.4 GB。 可能的瓶颈是网络。
以上是关于PostgreSQL:具有多个运行功能而没有硬件瓶颈,性能下降的主要内容,如果未能解决你的问题,请参考以下文章