summaryrefslogtreecommitdiff
path: root/heap
diff options
context:
space:
mode:
authorunknown <monty@hundin.mysql.fi>2002-10-16 16:34:29 +0300
committerunknown <monty@hundin.mysql.fi>2002-10-16 16:34:29 +0300
commit6f38e3083f0d867af8d1499fba92c7eaae295726 (patch)
tree7e8b3a279aef52d26da9843f1c45ff38112391f2 /heap
parent266e42b24cf1837cde602811dccf63e0395bbe5c (diff)
parent7013d8ef0ae0a21fadfcc0a159ee1d83fdad8a9d (diff)
downloadmariadb-git-6f38e3083f0d867af8d1499fba92c7eaae295726.tar.gz
Merge work:/home/bk/mysql-4.0 into hundin.mysql.fi:/my/bk/mysql-4.0
BitKeeper/etc/logging_ok: auto-union sql/mysqld.cc: Auto merged
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)*