mirror of
https://github.com/postgres/postgres.git
synced 2025-05-28 05:21:27 +03:00
Accommodate very large dshash tables.
If a dshash table grows very large (e.g., the dshash table for cumulative statistics when there are millions of tables), resizing it may fail with an error like: ERROR: invalid DSA memory alloc request size 1073741824 To fix, permit dshash resizing to allocate more than 1 GB by providing the DSA_ALLOC_HUGE flag. Reported-by: Andreas Scherbaum Author: Matthias van de Meent Reviewed-by: Cédric Villemain, Michael Paquier, Andres Freund Discussion: https://postgr.es/m/80a12d59-0d5e-4c54-866c-e69cd6536471%40pgug.de Backpatch-through: 13
This commit is contained in:
parent
3668c1d506
commit
18452b70ac
@ -887,8 +887,10 @@ resize(dshash_table *hash_table, size_t new_size_log2)
|
|||||||
Assert(new_size_log2 == hash_table->control->size_log2 + 1);
|
Assert(new_size_log2 == hash_table->control->size_log2 + 1);
|
||||||
|
|
||||||
/* Allocate the space for the new table. */
|
/* Allocate the space for the new table. */
|
||||||
new_buckets_shared = dsa_allocate0(hash_table->area,
|
new_buckets_shared =
|
||||||
sizeof(dsa_pointer) * new_size);
|
dsa_allocate_extended(hash_table->area,
|
||||||
|
sizeof(dsa_pointer) * new_size,
|
||||||
|
DSA_ALLOC_HUGE | DSA_ALLOC_ZERO);
|
||||||
new_buckets = dsa_get_address(hash_table->area, new_buckets_shared);
|
new_buckets = dsa_get_address(hash_table->area, new_buckets_shared);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user