From d1f18ffe605b863ec29fd59c9238bbbe82c54afe Mon Sep 17 00:00:00 2001 From: Jian Zhang Date: Mon, 22 Oct 2018 17:26:35 +0800 Subject: [PATCH 1/2] docs: add the proposal for the column pool --- docs/design/2018-10-22-the-column-pool.md | 74 ++++++++++++++++++++++ docs/design/the-column-pool.png | Bin 0 -> 30463 bytes 2 files changed, 74 insertions(+) create mode 100644 docs/design/2018-10-22-the-column-pool.md create mode 100644 docs/design/the-column-pool.png diff --git a/docs/design/2018-10-22-the-column-pool.md b/docs/design/2018-10-22-the-column-pool.md new file mode 100644 index 0000000000000..27cb5b73c66b9 --- /dev/null +++ b/docs/design/2018-10-22-the-column-pool.md @@ -0,0 +1,74 @@ +# Proposal: Support a Global Column Pool + +- Author(s): [zz-jason](https://github.com/zz-jason) +- Last updated: 2018-10-22 +- Discussion at: + +## Abstract + +This proposal is aimed to enable a fine-grained buffer reuse strategy. With the +help of the proposed column pool, we can: + +1. Reduce the total memory consumption during the execution phase. +2. Support column-oriented expression evaluation and leverage the power of + vectorized expression execution. + +## Background + +At present, the buffer reuse is in the granularity of Chunk. The disadvantages +of this **Chunk**-oriented reuse strategy are: + +1. This buffer reuse strategy isn't effective in some scenarios. Some memory + hold by the operators which are inactive can also be reused to reduce total + memory consumption when executing a query. + +2. In order to reuse a Chunk, we have to design the resource recycling strategy + for every operator which uses multiple goroutines to exploit the + thread-level parallelism. For example, hash join. It makes the code more + complicated and harder to be maintained. + +3. The memory used in the current query can not be reused in the next query + within the same session. Thus the golang GC pressure is increased and the + OLTP performance on a TiDB server is impacted. + +## Proposal + +The main idea of this proposal is to change the **Chunk**-oriented buffer reuse +strategy to **Column**-oriented and use a session-level column pool to achieve +that. + +### The column pool + +Considering that the current TiDB only supports a limited number of types, we +only need to consider 5 kinds of columns: + +- 4 fixed length columns: 4/8/16/40 +- 1 variable length column + +The column pool can be accessed by multiple goroutines concurrently, and to +reduce the lock conflict, we can split the pool into shards and randomize the +target shard in each Put/Get operation. Each shard of a column pool is +implemented as a last in first out stack, which helps to release the unused +column in the pool. And in most cases, the required length of a new column is +equal to the previous column put into the column pool. + +![the column pool](./the-column-pool.png) + +## Rationale + +No + +## Compatibility + +No + +## Implementation + +1. Implement the column pool firstly. +2. Remove the complicated, error-prone resource recycling strategy for each + operator. +3. Replace each **NewChunkWithCapacity**() with **pool.GetChunk**(). + +## Open issues (if applicable) + +No diff --git a/docs/design/the-column-pool.png b/docs/design/the-column-pool.png new file mode 100644 index 0000000000000000000000000000000000000000..47eaf2b8964ea3534e2d332787d7d4a55d8e2352 GIT binary patch literal 30463 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 KyXb+%KmP?*PMW{~ literal 0 HcmV?d00001 From 84b03a3b9332a95116f0168c3ab058fbbba573e9 Mon Sep 17 00:00:00 2001 From: Jian Zhang Date: Wed, 24 Oct 2018 15:02:56 +0800 Subject: [PATCH 2/2] address comment --- docs/design/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/design/README.md b/docs/design/README.md index 4318dbfeca3a3..b67d96e81864b 100644 --- a/docs/design/README.md +++ b/docs/design/README.md @@ -12,6 +12,7 @@ A proposal template: [TEMPLATE.md](./TEMPLATE.md) - [Proposal: Enhance constraint propagation in TiDB logical plan](./2018-07-22-enhance-propagations.md) - [Proposal: A SQL Planner based on the Volcano/Cascades model](./2018-08-29-new-planner.md) - [Proposal: Implement Radix Hash Join](./2018-09-21-radix-hashjoin.md) +- [Proposal: Support a Global Column Pool](./2018-10-22-the-column-pool.md) ## Completed