[pgsql-jp: 42026] PostgreSQL11にてPROCEDUREを使用したPL/pgSQLでメモリ増加
misakana @ yahoo.co.jp
misakana @ yahoo.co.jp
2019年 9月 11日 (水) 10:10:29 UTC
初めて投稿いたします。永吉と申します。
PostgreSQL11でPROCEDUREを使用したPL/pgSQLにてツールを作成しています。
(Ver.11からのトランザクション機能を活用するためPROCEDUREを使用)
テーブル項目の更新を確認するPROCEDUREを作成し、親となるPROCEDUREから
そのPROCEDUREを繰り返し呼び出す(CALLする)構造にしています。この時、
Windows側で該当するプロセスのメモリ使用量が増加し、総メモリ使用量が
100%近くなった段階で、PROCEDUREが「ERROR: out of memory」となり停止
してしまいます。
<環境>
-Windows 7 Professional Service Pack1 64Bit
-実装メモリ 4GB
-PostgreSQL 11.5, compiled by Visual C++ build 1914, 64-bit
<ソース> <= 実際は複雑ですが下記だけで再現します。
CREATE OR REPLACE PROCEDURE pc_dps11e(re_count integer)
LANGUAGE 'plpgsql' AS $BODY$
DECLARE
n integer; -- ループ変数
BEGIN
RAISE NOTICE '## ひたすらプロシジャを呼び出す ##';
RAISE NOTICE 'START : %', TO_CHAR(clock_timestamp(), 'YYYY/MM/DD HH24:MI:SS');
FOR n IN 1..re_count LOOP
CALL p_dps11z();
END LOOP;
RAISE NOTICE 'END : %', TO_CHAR(clock_timestamp(), 'YYYY/MM/DD HH24:MI:SS');
PERFORM pg_sleep(10.0);
END; $BODY$;
CREATE OR REPLACE PROCEDURE p_dps11z()
LANGUAGE 'plpgsql' AS $BODY$
BEGIN
-- SELECT * TO REC FROM ...
NULL;
END; $BODY$;
CALL pc_dps11e(500000);
PostgreSQL11自体のメモリリークを疑っているのですが、
ご教授いただけたら幸いです。よろしくお願いします。
pgsql-jp メーリングリストの案内