1
0
mirror of https://github.com/MariaDB/server.git synced 2026-01-06 05:22:24 +03:00

Bug#25175 Too much memory used by MySQL grant system

Each time the server reloads privileges containing table grants, the 
system will allocate too much memory than needed because of badly
chosen growth prediction in the underlying dynamic arrays.

This patch introduces a new signature to the hash container initializer
which enables a much more pessimistic approach in favour for more
efficient memory useage.

This patch was supplied by Google Inc.


include/hash.h:
  * New signature for _hash_init.
  * Defined new function hash_init2 which takes growth_size argument.
mysys/hash.c:
  * New signature for _hash_init.
sql/sql_acl.cc:
  * Changed hash_init signature so that it takes a 'growth_size' smaller
  than the default. Each time a GRANT_TABLE is allocated a pre-allocated
  dynamic array is instantiated. A large growth size can result in too
  many unused hash-entries per table-entry and thus be a waste of free
  memory.
This commit is contained in:
unknown
2008-03-18 10:45:36 +01:00
parent 269ccba9e7
commit 001829914b
3 changed files with 9 additions and 7 deletions

View File

@@ -2281,7 +2281,7 @@ GRANT_TABLE::GRANT_TABLE(const char *h, const char *d,const char *u,
const char *t, ulong p, ulong c)
:GRANT_NAME(h,d,u,t,p), cols(c)
{
(void) hash_init(&hash_columns,system_charset_info,
(void) hash_init2(&hash_columns,4,system_charset_info,
0,0,0, (hash_get_key) get_key_column,0,0);
}
@@ -2329,7 +2329,7 @@ GRANT_TABLE::GRANT_TABLE(TABLE *form, TABLE *col_privs)
cols= (ulong) form->field[7]->val_int();
cols = fix_rights_for_column(cols);
(void) hash_init(&hash_columns,system_charset_info,
(void) hash_init2(&hash_columns,4,system_charset_info,
0,0,0, (hash_get_key) get_key_column,0,0);
if (cols)
{