mirror of
https://github.com/postgres/postgres.git
synced 2025-12-19 17:02:53 +03:00
Introduce pg_shmem_allocations_numa view
Introduce new pg_shmem_alloctions_numa view with information about how shared memory is distributed across NUMA nodes. For each shared memory segment, the view returns one row for each NUMA node backing it, with the total amount of memory allocated from that node. The view may be relatively expensive, especially when executed for the first time in a backend, as it has to touch all memory pages to get reliable information about the NUMA node. This may also force allocation of the shared memory. Unlike pg_shmem_allocations, the view does not show anonymous shared memory allocations. It also does not show memory allocated using the dynamic shared memory infrastructure. Author: Jakub Wartak <jakub.wartak@enterprisedb.com> Reviewed-by: Andres Freund <andres@anarazel.de> Reviewed-by: Bertrand Drouvot <bertranddrouvot.pg@gmail.com> Reviewed-by: Tomas Vondra <tomas@vondra.me> Discussion: https://postgr.es/m/CAKZiRmxh6KWo0aqRqvmcoaX2jUxZYb4kGp3N%3Dq1w%2BDiH-696Xw%40mail.gmail.com
This commit is contained in:
13
src/test/regress/expected/numa.out
Normal file
13
src/test/regress/expected/numa.out
Normal file
@@ -0,0 +1,13 @@
|
||||
SELECT NOT(pg_numa_available()) AS skip_test \gset
|
||||
\if :skip_test
|
||||
SELECT COUNT(*) = 0 AS ok FROM pg_shmem_allocations_numa;
|
||||
\quit
|
||||
\endif
|
||||
-- switch to superuser
|
||||
\c -
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_shmem_allocations_numa;
|
||||
ok
|
||||
----
|
||||
t
|
||||
(1 row)
|
||||
|
||||
5
src/test/regress/expected/numa_1.out
Normal file
5
src/test/regress/expected/numa_1.out
Normal file
@@ -0,0 +1,5 @@
|
||||
SELECT NOT(pg_numa_available()) AS skip_test \gset
|
||||
\if :skip_test
|
||||
SELECT COUNT(*) = 0 AS ok FROM pg_shmem_allocations_numa;
|
||||
ERROR: libnuma initialization failed or NUMA is not supported on this platform
|
||||
\quit
|
||||
@@ -3219,8 +3219,8 @@ REVOKE MAINTAIN ON lock_table FROM regress_locktable_user;
|
||||
-- clean up
|
||||
DROP TABLE lock_table;
|
||||
DROP USER regress_locktable_user;
|
||||
-- test to check privileges of system views pg_shmem_allocations and
|
||||
-- pg_backend_memory_contexts.
|
||||
-- test to check privileges of system views pg_shmem_allocations,
|
||||
-- pg_shmem_allocations_numa and pg_backend_memory_contexts.
|
||||
-- switch to superuser
|
||||
\c -
|
||||
CREATE ROLE regress_readallstats;
|
||||
@@ -3242,6 +3242,12 @@ SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations','SELECT
|
||||
f
|
||||
(1 row)
|
||||
|
||||
SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations_numa','SELECT'); -- no
|
||||
has_table_privilege
|
||||
---------------------
|
||||
f
|
||||
(1 row)
|
||||
|
||||
GRANT pg_read_all_stats TO regress_readallstats;
|
||||
SELECT has_table_privilege('regress_readallstats','pg_aios','SELECT'); -- yes
|
||||
has_table_privilege
|
||||
@@ -3261,6 +3267,12 @@ SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations','SELECT
|
||||
t
|
||||
(1 row)
|
||||
|
||||
SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations_numa','SELECT'); -- yes
|
||||
has_table_privilege
|
||||
---------------------
|
||||
t
|
||||
(1 row)
|
||||
|
||||
-- run query to ensure that functions within views can be executed
|
||||
SET ROLE regress_readallstats;
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_aios;
|
||||
|
||||
@@ -1757,6 +1757,10 @@ pg_shmem_allocations| SELECT name,
|
||||
size,
|
||||
allocated_size
|
||||
FROM pg_get_shmem_allocations() pg_get_shmem_allocations(name, off, size, allocated_size);
|
||||
pg_shmem_allocations_numa| SELECT name,
|
||||
numa_node,
|
||||
size
|
||||
FROM pg_get_shmem_allocations_numa() pg_get_shmem_allocations_numa(name, numa_node, size);
|
||||
pg_stat_activity| SELECT s.datid,
|
||||
d.datname,
|
||||
s.pid,
|
||||
|
||||
@@ -119,7 +119,7 @@ test: plancache limit plpgsql copy2 temp domain rangefuncs prepare conversion tr
|
||||
# The stats test resets stats, so nothing else needing stats access can be in
|
||||
# this group.
|
||||
# ----------
|
||||
test: partition_join partition_prune reloptions hash_part indexing partition_aggregate partition_info tuplesort explain compression memoize stats predicate
|
||||
test: partition_join partition_prune reloptions hash_part indexing partition_aggregate partition_info tuplesort explain compression memoize stats predicate numa
|
||||
|
||||
# event_trigger depends on create_am and cannot run concurrently with
|
||||
# any test that runs DDL
|
||||
|
||||
10
src/test/regress/sql/numa.sql
Normal file
10
src/test/regress/sql/numa.sql
Normal file
@@ -0,0 +1,10 @@
|
||||
SELECT NOT(pg_numa_available()) AS skip_test \gset
|
||||
\if :skip_test
|
||||
SELECT COUNT(*) = 0 AS ok FROM pg_shmem_allocations_numa;
|
||||
\quit
|
||||
\endif
|
||||
|
||||
-- switch to superuser
|
||||
\c -
|
||||
|
||||
SELECT COUNT(*) >= 0 AS ok FROM pg_shmem_allocations_numa;
|
||||
@@ -1947,8 +1947,8 @@ REVOKE MAINTAIN ON lock_table FROM regress_locktable_user;
|
||||
DROP TABLE lock_table;
|
||||
DROP USER regress_locktable_user;
|
||||
|
||||
-- test to check privileges of system views pg_shmem_allocations and
|
||||
-- pg_backend_memory_contexts.
|
||||
-- test to check privileges of system views pg_shmem_allocations,
|
||||
-- pg_shmem_allocations_numa and pg_backend_memory_contexts.
|
||||
|
||||
-- switch to superuser
|
||||
\c -
|
||||
@@ -1958,12 +1958,14 @@ CREATE ROLE regress_readallstats;
|
||||
SELECT has_table_privilege('regress_readallstats','pg_aios','SELECT'); -- no
|
||||
SELECT has_table_privilege('regress_readallstats','pg_backend_memory_contexts','SELECT'); -- no
|
||||
SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations','SELECT'); -- no
|
||||
SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations_numa','SELECT'); -- no
|
||||
|
||||
GRANT pg_read_all_stats TO regress_readallstats;
|
||||
|
||||
SELECT has_table_privilege('regress_readallstats','pg_aios','SELECT'); -- yes
|
||||
SELECT has_table_privilege('regress_readallstats','pg_backend_memory_contexts','SELECT'); -- yes
|
||||
SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations','SELECT'); -- yes
|
||||
SELECT has_table_privilege('regress_readallstats','pg_shmem_allocations_numa','SELECT'); -- yes
|
||||
|
||||
-- run query to ensure that functions within views can be executed
|
||||
SET ROLE regress_readallstats;
|
||||
|
||||
Reference in New Issue
Block a user