mirror of
https://github.com/ClickHouse/ClickHouse.git
synced 2024-12-16 19:32:07 +00:00
98 lines
2.9 KiB
Python
98 lines
2.9 KiB
Python
import os
|
|
|
|
import pytest
|
|
from helpers.cluster import ClickHouseCluster
|
|
|
|
SCRIPT_DIR = os.path.dirname(os.path.realpath(__file__))
|
|
cluster = ClickHouseCluster(__file__)
|
|
node_memory = cluster.add_instance(
|
|
"node_memory", dictionaries=["configs/dictionaries/complex_key_cache_string.xml"]
|
|
)
|
|
node_ssd = cluster.add_instance(
|
|
"node_ssd", dictionaries=["configs/dictionaries/ssd_complex_key_cache_string.xml"]
|
|
)
|
|
|
|
|
|
@pytest.fixture()
|
|
def started_cluster():
|
|
try:
|
|
cluster.start()
|
|
node_memory.query(
|
|
"create table radars_table (radar_id String, radar_ip String, client_id String) engine=MergeTree() order by radar_id"
|
|
)
|
|
node_ssd.query(
|
|
"create table radars_table (radar_id String, radar_ip String, client_id String) engine=MergeTree() order by radar_id"
|
|
)
|
|
|
|
yield cluster
|
|
finally:
|
|
cluster.shutdown()
|
|
|
|
|
|
@pytest.mark.skip(reason="SSD cache test can run on disk only")
|
|
@pytest.mark.parametrize("type", ["memory", "ssd"])
|
|
def test_memory_consumption(started_cluster, type):
|
|
node = started_cluster.instances[f"node_{type}"]
|
|
node.query(
|
|
"insert into radars_table select toString(rand() % 5000), '{0}', '{0}' from numbers(1000)".format(
|
|
"w" * 8
|
|
)
|
|
)
|
|
node.query(
|
|
"insert into radars_table select toString(rand() % 5000), '{0}', '{0}' from numbers(1000)".format(
|
|
"x" * 16
|
|
)
|
|
)
|
|
node.query(
|
|
"insert into radars_table select toString(rand() % 5000), '{0}', '{0}' from numbers(1000)".format(
|
|
"y" * 32
|
|
)
|
|
)
|
|
node.query(
|
|
"insert into radars_table select toString(rand() % 5000), '{0}', '{0}' from numbers(1000)".format(
|
|
"z" * 64
|
|
)
|
|
)
|
|
|
|
# Fill dictionary
|
|
node.query(
|
|
"select dictGetString('radars', 'client_id', tuple(toString(number))) from numbers(0, 5000)"
|
|
)
|
|
|
|
allocated_first = int(
|
|
node.query(
|
|
"select bytes_allocated from system.dictionaries where name = 'radars'"
|
|
).strip()
|
|
)
|
|
|
|
alloc_array = []
|
|
for i in range(5):
|
|
node.query(
|
|
"select dictGetString('radars', 'client_id', tuple(toString(number))) from numbers(0, 5000)"
|
|
)
|
|
|
|
allocated = int(
|
|
node.query(
|
|
"select bytes_allocated from system.dictionaries where name = 'radars'"
|
|
).strip()
|
|
)
|
|
alloc_array.append(allocated)
|
|
|
|
# size doesn't grow
|
|
assert all(allocated_first >= a for a in alloc_array)
|
|
|
|
for i in range(5):
|
|
node.query(
|
|
"select dictGetString('radars', 'client_id', tuple(toString(number))) from numbers(0, 5000)"
|
|
)
|
|
|
|
allocated = int(
|
|
node.query(
|
|
"select bytes_allocated from system.dictionaries where name = 'radars'"
|
|
).strip()
|
|
)
|
|
alloc_array.append(allocated)
|
|
|
|
# size doesn't grow
|
|
assert all(allocated_first >= a for a in alloc_array)
|