PgAgentから毎晩呼び出される予定の言語SQL(plpgsqlではない)で記述された関数があります。昨夜までは順調だった。この関数の実行には通常3分未満かかりますが、私が今朝来たときは5時間後もまだ実行されていました。
私はpg_stat_activityを照会し、呼び出しがwait_event:Extension、wait_event_type:Extensionでハングしていることを確認しました。私はこの問題を調査しようとしていましたが、私が見つけた唯一の情報は、クエリがPostgres拡張で待機しているということです。現在インストールしている拡張機能は、plpgsql、postgres_fdw、tablefunc、adminpack、pgAgentだけです。可能性が高いと思われる唯一の拡張機能はpgAgentです-これは適切なタイミングで関数を呼び出しています。postgres_fdw-関数で外部テーブルが使用されていますが、関数の外部で外部テーブルのクエリは正常に機能しているようです。
待機の原因となっている拡張機能を見つけるにはどうすればよいですか?この問題を解決するための次のステップは何ですか?ロックの解決についてはたくさんの情報がありますが、拡張機能のwait_eventについては、簡単な説明以外は何も見つかりませんでした。
私は、wait_event_type:拡張機能が、外部データラッパーに渡されるクエリでロックされることを示していることを発見しました。ただし、問題はPostgres_FDWではなく、言語SQLを使用して関数を記述し、LANGUAGE plpgsqlを使用していないようです。ここ、StackOverflow、または別のフォーラムで、PostgresのSQL手続き型言語のバグが予期せずクエリを断続的にロックするというバグについて言及した投稿を思い出しました。関数をplpgsqlで書き直しましたが、これは非常に単純で、3か月以上も問題なく動作しています。バグに言及しているスレッドが見つかればいいのですが、Postgresに報告されたものであり、バグを修正する可能性は低いと彼らは言っていました。関数にLANGUAGE plpgsqlを使用し、LANGUAGE SQLから離れてください。