[MCOL-5021] Implement an auxiliary (hidden) column to improve DELETE performance. Created: 2022-03-21 Updated: 2023-09-06 Resolved: 2022-08-17 |
|
| Status: | Closed |
| Project: | MariaDB ColumnStore |
| Component/s: | None |
| Affects Version/s: | None |
| Fix Version/s: | 22.08.1 |
| Type: | New Feature | Priority: | Major |
| Reporter: | Gagan Goel (Inactive) | Assignee: | Gagan Goel (Inactive) |
| Resolution: | Fixed | Votes: | 0 |
| Labels: | None | ||
| Attachments: |
|
||||||||||||||||||||
| Issue Links: |
|
||||||||||||||||||||
| Sprint: | 2021-17 | ||||||||||||||||||||
| Assigned for Review: | |
||||||||||||||||||||
| Assigned for Testing: | |
||||||||||||||||||||
| Description |
|
This task is to implement an auxiliary (AUX) column in ColumnStore to improve the performance of DELETE operations. This will be accomplished by implementing a hidden 1-byte boolean column with 0 indicating the column value is disabled (deleted) and 1 indicating the column value is enabled (active). Idea is to improve the performance of DELETE operation by simply toggling the AUX column value from 1 to 0, instead of the current implementation which writes empty magic values for all columns in the table for all the impacted rows. Empty magics are the current method in ColumnStore to detect if a given row is deleted or not. So for a wide table, the current method would lead to significant performance slowdown when performing DELETEs. Points to note: Design Document for the feature: https://docs.google.com/document/d/1OAWYxlsfgMwPoeDtY6wZ9JcoCubFyodQ63cCZ9NjLCI/edit?usp=sharing |
| Comments |
| Comment by David Hall (Inactive) [ 2022-03-25 ] | |||||||
|
Rather than writing to use uint_t value as 1, treat the aux as a bitmap and use one of the bits. This allows for easier expansion in the future if needed. | |||||||
| Comment by alexey vorovich (Inactive) [ 2022-06-07 ] | |||||||
|
toddstoffel Do we document a generic upgrade script that users have to run after they upgrade binary ? | |||||||
| Comment by alexey vorovich (Inactive) [ 2022-06-07 ] | |||||||
|
toddstoffel We discussed two options | |||||||
| Comment by David Hall (Inactive) [ 2022-06-17 ] | |||||||
|
FastDelete = false => min/max are updated and state is valid | |||||||
| Comment by Gagan Goel (Inactive) [ 2022-08-04 ] | |||||||
|
A minor update: To enable the FastDelete option, the .xml file should have a value 'y' or 'Y', instead of 'true':
| |||||||
| Comment by Daniel Lee (Inactive) [ 2022-08-17 ] | |||||||
|
Build verified: 22.08-1 (#5312) Feature implemented. Verified: system catalog Closing this ticket. New tickets will be opened if issues are later. | |||||||
| Comment by Gagan Goel (Inactive) [ 2022-08-23 ] | |||||||
|
Below are the final numbers on DELETE performance tests: GCP VM: 16vcpus, 64GB memory, 128GB HDD Local Machine: 8vcpus, 24GB memory, 500GB SSD | |||||||
| Comment by alexey vorovich (Inactive) [ 2022-09-15 ] | |||||||
|
this is a significant performance improvement . You do make a reference to this in release notes. |