[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 メーリングリストの案内