summaryrefslogtreecommitdiff
path: root/heap
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-10-16 13:11:25 +0300
committerunknown <monty@hundin.mysql.fi>2002-10-16 13:11:25 +0300
commit7013d8ef0ae0a21fadfcc0a159ee1d83fdad8a9d (patch)
treed165b4baadac24102545d94c8f9fe180537a64f5 /heap
parente1d7b8414f14de681127f4e19340e4f7737d5bdb (diff)
parent74b73109c1304e62430faa85d2a63a6f2ffa626d (diff)
downloadmariadb-git-7013d8ef0ae0a21fadfcc0a159ee1d83fdad8a9d.tar.gz
Merge with 3.23.54
BitKeeper/etc/logging_ok: auto-union BitKeeper/deleted/.del-LICENSE~4cfaff8de837acb8: Auto merged BitKeeper/deleted/.del-MySQLEULA.txt: Delete: Docs/MySQLEULA.txt BitKeeper/deleted/.del-global.h~e80d28157acfdcb5: Auto merged Build-tools/mysql-copyright-2: Auto merged Build-tools/mysql-copyright: Auto merged heap/heapdef.h: Auto merged heap/hp_open.c: Auto merged innobase/btr/btr0cur.c: Auto merged innobase/lock/lock0lock.c: Auto merged innobase/os/os0file.c: Auto merged innobase/os/os0thread.c: Auto merged myisam/mi_open.c: Auto merged mysql-test/Makefile.am: Auto merged mysql-test/t/null_key.test: Auto merged mysys/safemalloc.c: Auto merged scripts/make_binary_distribution.sh: Auto merged scripts/mysqld_safe.sh: Auto merged scripts/mysqlhotcopy.sh: Auto merged sql/field.h: Auto merged sql/field_conv.cc: Auto merged sql/ha_innodb.h: Auto merged sql/item.cc: Auto merged sql/sql_db.cc: Auto merged sql/sql_parse.cc: Auto merged sql/sql_select.cc: Auto merged sql/table.cc: Auto merged tests/grant.res: Auto merged Build-tools/Do-compile: merge Docs/manual.texi: merge configure.in: merge mysql-test/r/distinct.result: merge mysql-test/r/null_key.result: merge sql/ha_innodb.cc: merge sql/item.h: merge sql/log.cc: merge sql/mysqld.cc: merge support-files/mysql.spec.sh: merge
Diffstat (limited to 'heap')
-rw-r--r--heap/heapdef.h11
-rw-r--r--heap/hp_open.c10
2 files changed, 19 insertions, 2 deletions
diff --git a/heap/heapdef.h b/heap/heapdef.h
index bdd7de45370..ef55cf5efd2 100644
--- a/heap/heapdef.h
+++ b/heap/heapdef.h
@@ -22,6 +22,17 @@
#endif
#include "heap.h" /* Structs & some defines */
+/*
+ When allocating keys /rows in the internal block structure, do it
+ within the following boundaries.
+
+ The challenge is to find the balance between allocate as few blocks
+ as possible and keep memory consumption down.
+*/
+
+#define HP_MIN_RECORDS_IN_BLOCK 16
+#define HP_MAX_RECORDS_IN_BLOCK 8192
+
/* Some extern variables */
extern LIST *heap_open_list,*heap_share_list;
diff --git a/heap/hp_open.c b/heap/hp_open.c
index 938ab8c4f78..1bb28e5ffdf 100644
--- a/heap/hp_open.c
+++ b/heap/hp_open.c
@@ -162,8 +162,14 @@ static void init_block(HP_BLOCK *block, uint reclength, ulong min_records,
max_records=1000; /* As good as quess as anything */
recbuffer=(uint) (reclength+sizeof(byte**)-1) & ~(sizeof(byte**)-1);
records_in_block=max_records/10;
- if (records_in_block < 10 && max_records)
- records_in_block=10;
+ if (records_in_block < HP_MIN_RECORDS_IN_BLOCK && max_records)
+ records_in_block= HP_MIN_RECORDS_IN_BLOCK;
+ /*
+ Don't allocate too many rows at one time too keep memory consumption
+ done when we don't need it.
+ */
+ if (records_in_block > HP_MAX_RECORDS_IN_BLOCK)
+ records_in_block= HP_MAX_RECORDS_IN_BLOCK;
if (!records_in_block || records_in_block*recbuffer >
(my_default_record_cache_size-sizeof(HP_PTRS)*HP_MAX_LEVELS))
records_in_block=(my_default_record_cache_size-sizeof(HP_PTRS)*