mirror of
https://github.com/MariaDB/server.git
synced 2026-05-17 20:37:12 +02:00
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. |
||
|---|---|---|
| .. | ||
| libmrn_need_mysql_sources.am | ||
| libmrn_no_mysql_sources.am | ||
| libmysqlservices_compat_sources.am | ||
| Makefile.am | ||
| mrn_auto_increment_value_lock.cpp | ||
| mrn_auto_increment_value_lock.hpp | ||
| mrn_column_name.cpp | ||
| mrn_column_name.hpp | ||
| mrn_condition_converter.cpp | ||
| mrn_condition_converter.hpp | ||
| mrn_context_pool.cpp | ||
| mrn_context_pool.hpp | ||
| mrn_count_skip_checker.cpp | ||
| mrn_count_skip_checker.hpp | ||
| mrn_current_thread.hpp | ||
| mrn_database.cpp | ||
| mrn_database.hpp | ||
| mrn_database_manager.cpp | ||
| mrn_database_manager.hpp | ||
| mrn_database_repairer.cpp | ||
| mrn_database_repairer.hpp | ||
| mrn_debug_column_access.cpp | ||
| mrn_debug_column_access.hpp | ||
| mrn_encoding.cpp | ||
| mrn_encoding.hpp | ||
| mrn_external_lock.cpp | ||
| mrn_external_lock.hpp | ||
| mrn_field_normalizer.cpp | ||
| mrn_field_normalizer.hpp | ||
| mrn_grn.hpp | ||
| mrn_index_column_name.cpp | ||
| mrn_index_column_name.hpp | ||
| mrn_index_table_name.cpp | ||
| mrn_index_table_name.hpp | ||
| mrn_lock.cpp | ||
| mrn_lock.hpp | ||
| mrn_match_escalation_threshold_scope.cpp | ||
| mrn_match_escalation_threshold_scope.hpp | ||
| mrn_multiple_column_key_codec.cpp | ||
| mrn_multiple_column_key_codec.hpp | ||
| mrn_mysqlservices.cpp | ||
| mrn_operation.cpp | ||
| mrn_operation.hpp | ||
| mrn_operations.cpp | ||
| mrn_operations.hpp | ||
| mrn_parameters_parser.cpp | ||
| mrn_parameters_parser.hpp | ||
| mrn_path_mapper.cpp | ||
| mrn_path_mapper.hpp | ||
| mrn_query_parser.cpp | ||
| mrn_query_parser.hpp | ||
| mrn_smart_bitmap.cpp | ||
| mrn_smart_bitmap.hpp | ||
| mrn_smart_grn_obj.cpp | ||
| mrn_smart_grn_obj.hpp | ||
| mrn_table_fields_offset_mover.cpp | ||
| mrn_table_fields_offset_mover.hpp | ||
| mrn_time_converter.cpp | ||
| mrn_time_converter.hpp | ||
| mrn_value_decoder.cpp | ||
| mrn_value_decoder.hpp | ||
| mrn_windows.hpp | ||