You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by GitBox <gi...@apache.org> on 2019/12/03 04:07:20 UTC

[GitHub] [incubator-doris] lingbin opened a new pull request #2359: Improve SkipList memory usage tracking

lingbin opened a new pull request #2359: Improve SkipList memory usage tracking
URL: https://github.com/apache/incubator-doris/pull/2359
 
 
   #2341 
   
   The problem with the current implementation is that all data to be
   inserted will be counted in memory, but for the aggregation model or
   some other special cases, not all data will be inserted into `MemTable`,
   and these data should not be counted in memory.
   
   At present, because of the data row(`Tuple`) generated by the upper layer
   is different from the data row(`Row`) internally represented by the
   engine, when inserting `MemTable`, the data row must be copied.
   
   And, at present, the aggregation function only supports `MemPool` when
   copying, so even if the data will not be inserted into` SkipList`,
   `MemPool` is still used (in the future, it can be replaced with an
   ordinary` Buffer`). However, we reuse the allocated memory in MemPool,
   that is, we do not reallocate new memory every time.
   
   Note: Due to the characteristics of `MemPool` (once inserted, it cannot
   be partially cleared), the following scenarios may still cause multiple
   flushes. For example, the aggregation model of a string column is `MAX`,
   and the data inserted at the same time is in ascending order, then for
   each data row, it must apply for memory from `MemPool` in `SkipList`,
   that is, although the old rows in SkipList` will be discarded, 
   the memory occupied will still be counted.
   
   I did a test on my development machine: a table with only one tablet
   and all columns are keys, the original data was 1.1G (9318799 rows),
   and there were 377745 rows after removing duplicates.
   
   It can be found that both the number of files and the query efficiency
   are greatly improved.
   
   before:
   ```
     $ ll storage/data/0/10019/1075020655/
     total 4540
     -rw------- 1 dev dev 393152 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_0_0.dat
     -rw------- 1 dev dev   1135 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_0_0.idx
     -rw------- 1 dev dev 421660 Dec  2 18:43 0200000000000004f5404b740288294b21e52b0786adf3be_10_0.dat
     -rw------- 1 dev dev   1185 Dec  2 18:43 0200000000000004f5404b740288294b21e52b0786adf3be_10_0.idx
     -rw------- 1 dev dev 184214 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_1_0.dat
     -rw------- 1 dev dev    610 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_1_0.idx
     -rw------- 1 dev dev 329181 Dec  2 18:43 0200000000000004f5404b740288294b21e52b0786adf3be_11_0.dat
     -rw------- 1 dev dev    935 Dec  2 18:43 0200000000000004f5404b740288294b21e52b0786adf3be_11_0.idx
     -rw------- 1 dev dev 343813 Dec  2 18:43 0200000000000004f5404b740288294b21e52b0786adf3be_12_0.dat
     -rw------- 1 dev dev    985 Dec  2 18:43 0200000000000004f5404b740288294b21e52b0786adf3be_12_0.idx
     -rw------- 1 dev dev 315364 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_2_0.dat
     -rw------- 1 dev dev    885 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_2_0.idx
     -rw------- 1 dev dev 423806 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_3_0.dat
     -rw------- 1 dev dev   1185 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_3_0.idx
     -rw------- 1 dev dev 294811 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_4_0.dat
     -rw------- 1 dev dev    835 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_4_0.idx
     -rw------- 1 dev dev 403241 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_5_0.dat
     -rw------- 1 dev dev   1135 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_5_0.idx
     -rw------- 1 dev dev 350753 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_6_0.dat
     -rw------- 1 dev dev    860 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_6_0.idx
     -rw------- 1 dev dev 266966 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_7_0.dat
     -rw------- 1 dev dev    735 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_7_0.idx
     -rw------- 1 dev dev 451191 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_8_0.dat
     -rw------- 1 dev dev   1235 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_8_0.idx
     -rw------- 1 dev dev 398439 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_9_0.dat
     -rw------- 1 dev dev   1110 Dec  2 18:42 0200000000000004f5404b740288294b21e52b0786adf3be_9_0.idx
   
     mysql> select count(*) from xxx_before;
     +----------+
     | count(*) |
     +----------+
     |   377745 |
     +----------+
   1 row in set (0.91 sec)
   ```
   
   after:$
   ```
     $ ll storage/data/0/10013/1075020655/
     total 3612
     -rw------- 1 dev dev 3328992 Dec  2 18:26 0200000000000003d44e5cc72626f95a0b196b52a05c0f8a_0_0.dat
     -rw------- 1 dev dev    8460 Dec  2 18:26 0200000000000003d44e5cc72626f95a0b196b52a05c0f8a_0_0.idx
     -rw------- 1 dev dev  350576 Dec  2 18:26 0200000000000003d44e5cc72626f95a0b196b52a05c0f8a_1_0.dat
     -rw------- 1 dev dev     985 Dec  2 18:26 0200000000000003d44e5cc72626f95a0b196b52a05c0f8a_1_0.idx
   
     mysql> select count(*) from test_qa_2.medical_b_locinfo;
     +----------+
     | count(*) |
     +----------+
     |   377745 |
     +----------+
     1 row in set (0.38 sec)
   ```

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org