Здравствуйте.
>> Oracle: about 5M
>> postgreSql: about 160М
>I'm admittedly ignorant of this type of testing. But if the memory usage for PostgreSQL is in the server, perhaps due to caching (how to test?), then it likely would _not_ linearly scale up >as the number of clients increased because every clients >would share the same cache data within the server. Or are you measuring the memory usage where the client is on one machine and the >PostgreSQL server is a different machine, with the client machine getting the memory hit?
I can send zip file with test code on request;
To say the truth it's described in documentation:
https://www.postgresql.org/docs/9.5/static/plpgsql-implementation.html#PLPGSQL-PLAN-CACHING
The PL/pgSQL interpreter parses the function's source text and produces an internal binary instruction tree the first time the function is called (within each session)
It's very sad :(
The test is very simply:
Generate code:
DECLARE
svSql "varchar";
BEGIN
for nvi in 1..10
loop
svSql = 'CREATE OR REPLACE FUNCTION perfa."func'||nvi||'" (
)
RETURNS void AS
$body$
DECLARE
svSql "varchar";
BEGIN
svSql:='''';
PERFORM perfb."func'||(nvi-1)*10+1||'"();
PERFORM perfb."func'||(nvi-1)*10+2||'"();
PERFORM perfb."func'||(nvi-1)*10+3||'"();
PERFORM perfb."func'||(nvi-1)*10+4||'"();
PERFORM perfb."func'||(nvi-1)*10+5||'"();
PERFORM perfb."func'||(nvi-1)*10+6||'"();
PERFORM perfb."func'||(nvi-1)*10+7||'"();
PERFORM perfb."func'||(nvi-1)*10+8||'"();
PERFORM perfb."func'||(nvi-1)*10+9||'"();
PERFORM perfb."func'||(nvi-1)*10+10||'"();
END;
$body$
LANGUAGE ''plpgsql''
VOLATILE
CALLED ON NULL INPUT
SECURITY INVOKER';
EXECUTE svSql;
end loop;
END;
Download jmetter
In 50 thread run this funciton.
About 4g memory will be consumed in one second
It's hard to miss
:))