mirror of
https://github.com/MariaDB/server.git
synced 2026-05-06 15:15:34 +02:00
Fix for bug#5138: hash indexes on heap tables support statistics.
KEY::rec_per_key is updated every time 1/HEAP_STATS_UPDATE_THRESHOLD part of table records has been changed. heap/_check.c: Hash indexes on heap tables now support statistics - number of hash buckets. The value is updated on any insert/delete operation. heap/hp_clear.c: Hash indexes on heap tables now support statistics - number of hash buckets. The value is updated on any insert/delete operation. heap/hp_create.c: Hash indexes on heap tables now support statistics - number of hash buckets. The value is updated on any insert/delete operation. heap/hp_delete.c: Hash indexes on heap tables now support statistics - number of hash buckets. The value is updated on any insert/delete operation. heap/hp_hash.c: Hash indexes on heap tables now support statistics - number of hash buckets. The value is updated on any insert/delete operation. heap/hp_write.c: Hash indexes on heap tables now support statistics - number of hash buckets. The value is updated on any insert/delete operation. include/heap.h: Hash indexes on heap tables now support statistics - number of hash buckets. The value is updated on any insert/delete operation. mysql-test/r/heap.result: Fix for bug#5138: store/use statistics for hash indexes on heap tables mysql-test/r/heap_hash.result: Fix for bug#5138: store/use statistics for hash indexes on heap tables mysql-test/r/myisam.result: Fix for bug#5138: store/use statistics for hash indexes on heap tables mysql-test/t/heap_hash.test: Fix for bug#5138: store/use statistics for hash indexes on heap tables sql/structs.h: Added comments
This commit is contained in:
parent
c1f297058d
commit
99e1b8179e
14 changed files with 386 additions and 30 deletions
|
|
@ -102,9 +102,11 @@ static int check_one_key(HP_KEYDEF *keydef, uint keynr, ulong records,
|
|||
int error;
|
||||
uint i,found,max_links,seek,links;
|
||||
uint rec_link; /* Only used with debugging */
|
||||
uint hash_buckets_found;
|
||||
HASH_INFO *hash_info;
|
||||
|
||||
error=0;
|
||||
hash_buckets_found= 0;
|
||||
for (i=found=max_links=seek=0 ; i < records ; i++)
|
||||
{
|
||||
hash_info=hp_find_hash(&keydef->block,i);
|
||||
|
|
@ -128,21 +130,32 @@ static int check_one_key(HP_KEYDEF *keydef, uint keynr, ulong records,
|
|||
found++;
|
||||
}
|
||||
if (links > max_links) max_links=links;
|
||||
hash_buckets_found++;
|
||||
}
|
||||
}
|
||||
if (found != records)
|
||||
{
|
||||
DBUG_PRINT("error",("Found %ld of %ld records"));
|
||||
DBUG_PRINT("error",("Found %ld of %ld records", found, records));
|
||||
error=1;
|
||||
}
|
||||
if (keydef->hash_buckets != hash_buckets_found)
|
||||
{
|
||||
DBUG_PRINT("error",("Found %ld buckets, stats shows %ld buckets",
|
||||
hash_buckets_found, keydef->hash_buckets));
|
||||
error=1;
|
||||
}
|
||||
DBUG_PRINT("info",
|
||||
("records: %ld seeks: %d max links: %d hitrate: %.2f",
|
||||
("records: %ld seeks: %d max links: %d hitrate: %.2f "
|
||||
"buckets: %d",
|
||||
records,seek,max_links,
|
||||
(float) seek / (float) (records ? records : 1)));
|
||||
(float) seek / (float) (records ? records : 1),
|
||||
hash_buckets_found));
|
||||
if (print_status)
|
||||
printf("Key: %d records: %ld seeks: %d max links: %d hitrate: %.2f\n",
|
||||
printf("Key: %d records: %ld seeks: %d max links: %d "
|
||||
"hitrate: %.2f buckets: %d\n",
|
||||
keynr, records, seek, max_links,
|
||||
(float) seek / (float) (records ? records : 1));
|
||||
(float) seek / (float) (records ? records : 1),
|
||||
hash_buckets_found);
|
||||
return error;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue