On 22.01.2019 22:17, Tomas Vondra wrote:
On 1/22/19 7:36 PM, Arthur Zakirov wrote:
max_shared_dictionaries_size can be renamed to
shared_dictionaries_cleanup_threshold.

That really depends on what exactly the threshold does. If it only
triggers cleanup but does not enforce maximum amount of memory used by
dictionaries, then this name seems OK. If it ensures max amount of
memory, the max_..._size name would be better.

Yep, I thought about the first approach.

I think there are essentially two ways:

(a) Define max amount of memory available for shared dictionarires, and
come up with an eviction algorithm. This will be tricky, because when
the frequently-used dictionaries need a bit more memory than the limit,
this will result in trashing (evict+load over and over).

(b) Define what "unused" means for dictionaries, and unload dictionaries
that become unused. For example, we could track timestamp of the last
time each dict was used, and decide that dictionaries unused for 5 or
more minutes are unused. And evict those.

The advantage of (b) is that it adopts automatically, more or less. When
you have a bunch of frequently used dictionaries, the amount of shared
memory increases. If you stop using them, it decreases after a while.
And rarely used dicts won't force eviction of the frequently used ones.

Thanks for sharing your ideas, Tomas. Unfortunately I won't manage to develop new version of the patch till the end of the commitfest due to lack of time. I'll think about the second approach. Tracking timestamp of the last time a dict was used may be difficult though and may slow down FTS...

I move the path to the next commitfest.

--
Arthur Zakirov
Postgres Professional: http://www.postgrespro.com
Russian Postgres Company

Reply via email to