mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-11 08:52:06 +00:00
55 lines
1.9 KiB
Bash
55 lines
1.9 KiB
Bash
|
#!/usr/bin/env bash
|
||
|
|
||
|
CUR_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||
|
# shellcheck source=../shell_config.sh
|
||
|
. "$CUR_DIR"/../shell_config.sh
|
||
|
|
||
|
function check_refcnt_for_table()
|
||
|
{
|
||
|
local table=$1 && shift
|
||
|
|
||
|
$CLICKHOUSE_CLIENT -q "system stop merges $table"
|
||
|
$CLICKHOUSE_CLIENT -q "insert into $table select number, number%4 from numbers(200)"
|
||
|
|
||
|
local query_id
|
||
|
query_id="$table-$(random_str 10)"
|
||
|
|
||
|
# Notes:
|
||
|
# - query may sleep 0.1*(200/4)=5 seconds, it is enough to check system.parts
|
||
|
# - "part = 1" condition should prune all parts except first
|
||
|
$CLICKHOUSE_CLIENT --format Null --max_block_size 1 --query_id "$query_id" -q "select sleepEachRow(0.1) from $table where part = 1" &
|
||
|
PID=$!
|
||
|
|
||
|
# wait for query to be started
|
||
|
while [ "$($CLICKHOUSE_CLIENT -q "select count() from system.processes where query_id = '$query_id'")" -ne 1 ]; do
|
||
|
sleep 0.1
|
||
|
done
|
||
|
|
||
|
# When the query only starts it execution it holds reference for each part,
|
||
|
# however when it starts reading, partition pruning takes place,
|
||
|
# and it should hold only parts that are required for SELECT
|
||
|
#
|
||
|
# So 2 seconds delay to ensure that it goes the reading stage.
|
||
|
sleep 2
|
||
|
|
||
|
# NOTE: parts that are used in query will have refcount increased for each range
|
||
|
$CLICKHOUSE_CLIENT -q "select table, name, refcount from system.parts where database = '$CLICKHOUSE_DATABASE' and table = '$table' and refcount > 1"
|
||
|
|
||
|
kill -INT $PID
|
||
|
wait $PID
|
||
|
}
|
||
|
|
||
|
$CLICKHOUSE_CLIENT -nmq "
|
||
|
drop table if exists data_02340;
|
||
|
create table data_02340 (key Int, part Int) engine=MergeTree() partition by part order by key;
|
||
|
"
|
||
|
check_refcnt_for_table data_02340
|
||
|
|
||
|
$CLICKHOUSE_CLIENT -nmq "
|
||
|
drop table if exists data_02340_rep;
|
||
|
create table data_02340_rep (key Int, part Int) engine=ReplicatedMergeTree('/clickhouse/$CLICKHOUSE_TEST_ZOOKEEPER_PREFIX', '1') partition by part order by key;
|
||
|
"
|
||
|
check_refcnt_for_table data_02340_rep
|
||
|
|
||
|
exit 0
|