> 2025年11月24日 15:50,Nazir Bilal Yavuz <[email protected]> 写道:
>
> Could you please explain that a bit more? AFAIU, conditional locks are
> mainly used to escape from deadlock situations and we can not cause a
> deadlock here. Is it because using conditional locks might make the
> functions faster by skipping the wait situations?
Bgwriter/Checkpointer might always blocks the mark buffer dirty SQL.
sequence Bgwriter/Checkpointer mark-buffer-dirty SQL
1 LockBuffer(1) WaitBuffer(1)
2 UnlockBuffer(1),
and LockBuffer(2)
3 After unlock wakeup,
WaitBuffer(2)
... ... ...
I don't know if this could really happen. Maybe we need some tests. I
just afraid that pg_buffercache_mark_dirty_{relation, all} SQL could be
slow and inefficient.
> Do you mean that we should not return 'buffer_already_dirty'
> information and we should only return 'buffer_dirtied' information in
> the 'pg_buffercache_mark_dirty' function? If you are suggesting that,
> I think returning 'buffer_already_dirty' has a value in it.
Oops, I read the v7 patch. Ignore this.
Best regards,
Yuhang Qiu