Variable-numbered pgstats entries currently all live in one shared dshash table. This works for stats kinds with each one having a rather "small" number of entries, but there are limits if a stats kind wants to allocate a large number of entries, especially if these need to be scanned on a periodic basis. This commit adds a new own_hash option for variable-numbered stats kinds, allowing these to use an independent dshash table backed by its own DSA area. This gives a way for stats kind to leverage their efforts across more than one shared hashtable, splitting the load, with the same guarantees as the main hashtable. Fixed-sized stats kind cannot use this option. All the hashtables use the same key pattern, PgStat_HashKey. The motivation of this change is pg_stat_statements, to add it as a custom stats kind. Out-of-core custom stats kind, or even built-in stats kinds can also use this option. At startup, each stats kind that opts in creates one initial DSA area in shared memory at startup. At attach time, each registered variable-numbered stats kind is mapped to either the shared hash and DSA or its dedicated hash and DSA. The local references are extended to track which hash table to use on a per-kind basis, with arrays based on the kind ID. The test module test_custom_stats is extended and refactored to provide coverage for this new own_hash. The idea of being able to use more than one hash table for pgstats has been originally mentioned off-list during a conference by Robert Haas (note: if my memory does not fail me here). Author: Sami Imseih <samimseih@gmail.com> Reviewed-by: Michael Paquier <michael@paquier.xyz> Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Discussion: https://postgr.es/m/CAA5RZ0supQBxSkh=CWB39=j+cL3hHcLPki3tcBk0B1r4fesg_g@mail.gmail.com
PostgreSQL Database Management System
This directory contains the source code distribution of the PostgreSQL database management system.
PostgreSQL is an advanced object-relational database management system that supports an extended subset of the SQL standard, including transactions, foreign keys, subqueries, triggers, user-defined types and functions. This distribution also contains C language bindings.
Copyright and license information can be found in the file COPYRIGHT.
General documentation about this version of PostgreSQL can be found at https://www.postgresql.org/docs/devel/. In particular, information about building PostgreSQL from the source code can be found at https://www.postgresql.org/docs/devel/installation.html.
The latest version of this software, and related software, may be obtained at https://www.postgresql.org/download/. For more information look at our web site located at https://www.postgresql.org/.