Re: error "can only drop stats once" brings down database
Kyotaro Horiguchi <horikyota.ntt@gmail.com>
From: Kyotaro Horiguchi <horikyota.ntt@gmail.com>
To: michael@paquier.xyz
Cc: florisvannee@optiver.com, andres@anarazel.de,
bertranddrouvot.pg@gmail.com, tgl@sss.pgh.pa.us,
pgsql-bugs@lists.postgresql.org
Date: 2024-06-25T00:22:48Z
Lists: pgsql-bugs
At Mon, 17 Jun 2024 08:28:10 +0900, Michael Paquier <michael@paquier.xyz> wrote in > On Fri, Jun 14, 2024 at 09:37:35AM +0900, Michael Paquier wrote: > > I am wondering if we should tackle this problem by adding a notion of > > "age" in the stats entries for what's stored in the central dshash and > > in the hold copies in the backends, so as we dump the "age" of an > > existing stats entry if we find out that it gets reused in a create > > path. That requires some design and would not be backpatchable, but > > it does not seem that invasive at quick glance (I had my eyes on this > > code the full week). Other thoughts are welcome. > > This still sounds like a good idea after sleeping on it over the > weekend. Please note that I am moving on with the problem on this > thread where this has been reported, and that is the point of origin: > https://www.postgresql.org/message-id/ZmvVudpT8z6hbY9t@paquier.xyz > > Let's continue the discussion there. Is it something like this? I forgot the reason why this was excluded from the vinal version, though. https://www.postgresql.org/message-id/20201001.090722.322196928507744460.horikyota.ntt%40gmail.com > Dshash scans are used for dropping and resetting stats entries. Entry > dropping is performed in the following steps. > > (delete_current_stats_entry()) > - Drop the dshash entry (needs exlock of dshash partition). > > - If refcount of the stats entry body is already zero, free the memory > immediately . > > - If not, set the "dropped" flag of the body. No lock is required > because the "dropped" flag won't be even referred to by other > backends until the next step is done. > > - Increment deletion count of the shared hash. (this is used as the > "age" of local pointer cache hash (pgstat_cache). > > (get_stat_entry()) > > - If dshash deletion count is different from the local cache age, scan > over the local cache hash to find "dropped" entries. > > - Decrements refcount of the dropped entry and free the shared entry > if it is no longer referenced. Apparently no lock is required. regards. -- Kyotaro Horiguchi NTT Open Source Software Center
Commits
-
Add more debugging information when dropping twice pgstats entry
- 2de059de2c2d 15.8 landed
- 83f415e2d92e 16.4 landed
- d92573adcb02 17.0 landed