mirror of
https://github.com/MariaDB/server.git
synced 2026-05-17 20:37:12 +02:00
Optimize performance of my_bitmap
MDEV-33502 Slowdown when running nested statement with many partitions This change was triggered to help some MariaDB users with close to 10000 bits in their bitmaps. - Change underlaying storage to be 64 bit instead of 32bit. - This reduses number of loops to scan bitmaps. - This can cause some bitmaps to be 4 byte large. - Ensure that all not used top-bits are always 0 (simplifes code as the last 64 bit storage is not a special case anymore). - Use my_find_first_bit() to find the first set bit which is much faster than scanning trough things byte by byte and then bit by bit. Other things: - Added a bool to remember if my_bitmap_init() did allocate the bitmap array. my_bitmap_free() will only free arrays it did allocate. This allowed me to remove setting 'bitmap=0' before calling my_bitmap_free() for cases where the bitmap's where allocated externally. - my_bitmap_init() sets bitmap to 0 in case of failure. - Added 'universal' asserts to most bitmap functions. - Change all remaining calls to bitmap_init() to my_bitmap_init(). - To finish the change from 2014. - Changed all usage of uint32 in my_bitmap.h to my_bitmap_map. - Updated bitmap_copy() to handle bitmaps of different size. - Removed const from bitmap_exists_intersection() as this caused casts on all usage. - Removed not used function bitmap_set_above(). - Renamed create_last_word_mask() to create_last_bit_mask() (to match name changes in my_bitmap.cc) - Extended bitmap-t with test for more bitmap functions.
This commit is contained in:
parent
d4e1731fbc
commit
b5d65fc105
18 changed files with 458 additions and 403 deletions
|
|
@ -4923,7 +4923,8 @@ int ha_mroonga::open(const char *name,
|
|||
DBUG_RETURN(error);
|
||||
thr_lock_data_init(&share->lock,&thr_lock_data,NULL);
|
||||
|
||||
if (bitmap_init(&multiple_column_key_bitmap, NULL, table->s->fields, false))
|
||||
if (my_bitmap_init(&multiple_column_key_bitmap, NULL, table->s->fields,
|
||||
false))
|
||||
{
|
||||
mrn_free_share(share);
|
||||
share = NULL;
|
||||
|
|
@ -4939,7 +4940,7 @@ int ha_mroonga::open(const char *name,
|
|||
|
||||
if (error)
|
||||
{
|
||||
bitmap_free(&multiple_column_key_bitmap);
|
||||
my_bitmap_free(&multiple_column_key_bitmap);
|
||||
mrn_free_share(share);
|
||||
share = NULL;
|
||||
}
|
||||
|
|
@ -5017,7 +5018,7 @@ int ha_mroonga::close()
|
|||
{
|
||||
error = add_wrap_hton(share->table_name, share->hton);
|
||||
}
|
||||
bitmap_free(&multiple_column_key_bitmap);
|
||||
my_bitmap_free(&multiple_column_key_bitmap);
|
||||
if (share->use_count == 1) {
|
||||
mrn_free_long_term_share(share->long_term_share);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,7 +26,7 @@ namespace mrn {
|
|||
|
||||
SmartBitmap::~SmartBitmap() {
|
||||
if (bitmap_) {
|
||||
bitmap_free(bitmap_);
|
||||
my_bitmap_free(bitmap_);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue