Hi! Thanks for the review!

Its true that qtext_load_file() can be called with acquired lock in 
pg_stat_statements_internal()…
So I perform INTERRUPTS_PENDING_CONDITION in v2 patch and call 
CHECK_FOR_INTERRUPTS later, after cycle ended and lock released.



Attachment: v2-cancelable-qtext_load_file.patch
Description: Binary data


> On 28 Apr 2025, at 11:16, Andrey Borodin <x4...@yandex-team.ru> wrote:
> 
> 
> 
>> On 24 Apr 2025, at 22:49, Roman Khapov <rkha...@yandex-team.ru> wrote:
>> 
>> Hi!
>> Recently we faced a problem in out production psql installation, which was 
>> that we had to cancel all requests to the db, including performance 
>> monitoring requests, that uses ps_stat_statements. But we could not cancel 
>> the request in usual way, and had to kill -9 the pg process of it.
> 
> Interesting problem, thanks for raising it!
> 
>> We've noticed that the the query execution stuck on PGSS_TEXT_FILE file 
>> reading in function qtext_load_file, which doesn't have CHECK_FOR_INTERRUPTS 
>> in the read cycle. In addition to our case with large PGSS_TEXT_FILE (and 
>> maybe the problems with virtual disk i/o) that can explain uncancellable 
>> pg_stat_statements queries.
> 
> I'm afraid it might be not so easy to add CHECK_FOR_INTERRUPTS there. Most 
> probably you was holding a LWLockAcquire(pgss->lock, LW_SHARED) somewhere (do 
> you have a backtrace?), which prevent interrupts anyway.
> 
> Thanks!
> 
> 
> Best regards, Andrey Borodin.

Reply via email to