[MCOL-786] redistribute remove moved data from removed node to one node Created: 2017-06-25 Updated: 2017-10-30 Resolved: 2017-10-30 |
|
| Status: | Closed |
| Project: | MariaDB ColumnStore |
| Component/s: | writeengine |
| Affects Version/s: | 1.0.9 |
| Fix Version/s: | 1.1.1 |
| Type: | Bug | Priority: | Major |
| Reporter: | David Thompson (Inactive) | Assignee: | Daniel Lee (Inactive) |
| Resolution: | Fixed | Votes: | 1 |
| Labels: | None | ||
| Attachments: |
|
||||||||
| Issue Links: |
|
||||||||
| Sprint: | 2017-13, 2017-14, 2017-15, 2017-16, 2017-17, 2017-18, 2017-19, 2017-20, 2017-21, 2017-22 | ||||||||
| Description |
|
Single server node with 5 dbroots with large amount of data loaded. Uncovered that dbroot2 was using the same physical storage as dbroot1. So ran: However after completion the volume for dbroot1 still was near capacity. Most of the data from dbroot2 was moved to dbroot1 rather than being spread out across dbroot1, 3,4,5 as expected. Why did this happen , there is enough data that this should not be an edge case due to small number of partitions i believe. Also subsequently redistribute does nothing despite dbroot1 very clearly having more partitions than the others. |
| Comments |
| Comment by David Thompson (Inactive) [ 2017-06-25 ] | ||||||||||||||||||||||||||||||||
|
info.zip contains info log for the redistribute logs. Before the resdistribute for the largest table, the extents per dbroot were (order by dbroot followed by total):
After the redistribute:
| ||||||||||||||||||||||||||||||||
| Comment by David Thompson (Inactive) [ 2017-06-26 ] | ||||||||||||||||||||||||||||||||
|
I think there are a couple of bugs causing the move to dbroot1 for most partitions. For the first case in RedistributeControlThread::makeRedistributePlan():
Probably only one of these loops needs fixing. I can't yet reason why a subsequent redistribute does nothing though as dbroot1 very clearly has more partitions than the others and there would be no remove to confuse the algorithm. | ||||||||||||||||||||||||||||||||
| Comment by David Thompson (Inactive) [ 2017-06-26 ] | ||||||||||||||||||||||||||||||||
|
To reproduce both cases use the following to generate a large amount of test data:
create an instance with multiple dbroots, e.g. 4. Then cpimport this into:
it will complain about a few invalid values because the data generator is not month aware so it generates 2017-02-31 etc. Now do a redistribute remove:
After this you'll see that dbroot1 has all the entries from dbroot2:
Now unassign dbroot2 and do another redistribute:
Nothing happens, and the dbroot info schema report is the same. | ||||||||||||||||||||||||||||||||
| Comment by Daniel Lee (Inactive) [ 2017-06-27 ] | ||||||||||||||||||||||||||||||||
|
Build tested: Github source 1.1.0 [root@localhost mariadb-columnstore-server]# git show [root@localhost mariadb-columnstore-server]# cd mariadb-columnstore-engine/ Reproduced the issue with 100gb dbt3 database. before [root@localhost columnstore]# du -sh * mcsadmin> redistributedata start remove 2 mcsadmin> redistributedata status after [root@localhost columnstore]# du -sh * mcsadmin> redistributedata start WriteEngineServer returned status 1: Cleared. [root@localhost columnstore]# du -sh * | ||||||||||||||||||||||||||||||||
| Comment by David Hall (Inactive) [ 2017-09-15 ] | ||||||||||||||||||||||||||||||||
|
Given the example after the REDISTRIBUTE REMOVE action, further redistributes do nothing because the partitions are evenly distributed: MariaDB [information_schema]> select object_id, dbroot, count(DISTINCT partition_id) from information_schema.columnstore_extents where object_id > 3000 group by 1,2;
----------
---------- | ||||||||||||||||||||||||||||||||
| Comment by David Thompson (Inactive) [ 2017-09-21 ] | ||||||||||||||||||||||||||||||||
|
Right, the point is the first redistribute doesn't actually rebalance and loads up dbroot1. The second point is there is no workaround to do another redistribute to fix it. Behavior is still the same in 1.1.0 | ||||||||||||||||||||||||||||||||
| Comment by David Hall (Inactive) [ 2017-10-04 ] | ||||||||||||||||||||||||||||||||
|
Remember to merge before testing. | ||||||||||||||||||||||||||||||||
| Comment by Daniel Lee (Inactive) [ 2017-10-30 ] | ||||||||||||||||||||||||||||||||
|
Build verified: 1.1.1-1 package Verified on a 1um4pm stack, with 1 dbroot in each PM. after loading 10g source twice Before redistribute [root@localhost columnstore]# du -sh data1 After redistribute [root@localhost columnstore]# du -sh data1 after loaded another 100g source, partsupp did not load due to an error before redistribute [root@localhost columnstore]# du -sh data1 after redistribute [root@localhost columnstore]# du -sh data1 |