Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

كيفية التحقق من استخدام ذاكرة التخزين المؤقت للاستعلامات في ClickHouse

كيف يمكنني التحقق من استخدام ذاكرة التخزين المؤقت للاستعلامات في استعلامي؟

اطّلع على هذا المثال باستخدام clickhouse client وخدمة ClickHouse Cloud.

أنشئ جدول query_cache_test

استخدام clickhouse client

clickhouse-cloud :) CREATE TABLE query_cache_test (name String, age UInt8) ENGINE =MergeTree ORDER BY name

CREATE TABLE query_cache_test
(
    `name` String,
    `age` UInt8
)
ENGINE = MergeTree
ORDER BY name

Query id: 81c54f09-7de4-48ec-916f-c7c304a46931

Ok.

0 rows in set. Elapsed: 0.343 sec.

املأ الجدول ببعض البيانات:

clickhouse-cloud :) INSERT INTO query_cache_test SELECT * FROM generateRandom('name String, age UInt8',1,1) LIMIT 100000;

INSERT INTO query_cache_test SELECT *
FROM generateRandom('name String, age UInt8', 1, 1)
LIMIT 100000

Query id: 90369105-bd67-494c-bdaf-d90dbfb6def9

Ok.

0 rows in set. Elapsed: 0.173 sec. Processed 327.05 thousand rows, 3.43 MB (1.89 million rows/s., 19.86 MB/s.)

فعِّل سجلات التتبّع:

clickhouse-cloud :) SET send_logs_level = 'trace'

SET send_logs_level = 'trace'

Query id: d65490b0-7960-4a85-a343-787e70e5e293

Ok.

0 rows in set. Elapsed: 0.134 sec.

نفّذ استعلامًا مع طلب استخدام ذاكرة التخزين المؤقت للاستعلامات (بإلحاق SETTINGS use_query_cache=true بالاستعلام):

clickhouse-cloud :) SELECT name FROM query_cache_test WHERE age > 1000 FORMAT Null SETTINGS use_query_cache=true;

SELECT name
FROM query_cache_test
WHERE age > 1000
FORMAT `Null`
SETTINGS use_query_cache = 1

Query id: 3754a7fd-b786-47c1-a258-dfbc75e35a04

[c-red-qc-36-server-0] 2023.05.29 12:06:10.542408 [ 454 ] {3754a7fd-b786-47c1-a258-dfbc75e35a04} \

أعِد تنفيذ الاستعلام نفسه:

clickhouse-cloud :) SELECT name FROM query_cache_test WHERE age > 1000 FORMAT Null SETTINGS use_query_cache=true;

SELECT name
FROM query_cache_test
WHERE age > 1000
FORMAT `Null`
SETTINGS use_query_cache = 1

Query id: a047527c-9d55-4e6b-9747-0ccad8787515

[c-red-qc-36-server-0] 2023.05.29 12:06:17.931007 [ 454 ] {a047527c-9d55-4e6b-9747-0ccad8787515} \

الآن لاحظ أوجه الاختلاف في سجلات TRACE المرتبطة بـ QueryCache بين:

التنفيذ الأول:

[c-red-qc-36-server-0] 2023.05.29 12:06:10.543559 [ 454 ] {3754a7fd-b786-47c1-a258-dfbc75e35a04} \<Trace\> QueryCache: No entry found for query SELECT name FROM query_cache_test  WHERE age > 1000 FORMAT `Null` SETTINGS
[c-red-qc-36-server-0] 2023.05.29 12:06:10.547760 [ 454 ] {3754a7fd-b786-47c1-a258-dfbc75e35a04} \<Trace\> QueryCache: Stored result of query SELECT name FROM query_cache_test  WHERE age > 1000 FORMAT `Null` SETTINGS

في التنفيذ الثاني:

[c-red-qc-36-server-0] 2023.05.29 12:06:17.932043 [ 454 ] {a047527c-9d55-4e6b-9747-0ccad8787515} \<Trace\> QueryCache: Entry found for query SELECT name FROM query_cache_test  WHERE age > 1000 FORMAT `Null` SETTINGS

في التنفيذ الأول، لم يتم العثور على أي إدخال بطبيعة الحال (No entry found for query SELECT...)، لذا قام ClickHouse بالفعل بتخزين (Stored result of query SELECT...) هذا الإدخال لنا.

في التنفيذ الثاني، استخدم الاستعلام ذاكرة التخزين المؤقت للاستعلامات لأنه وجد الإدخال مخزنًا بالفعل (Entry found for query SELECT...).

باستخدام SQL فقط

بمجرد تنفيذ أوامر SQL، ومن دون فحص trace logs الخاصة بـ clickhouse client،

يمكن أيضًا التحقق مما إذا كانت ذاكرة التخزين المؤقت للاستعلامات مستخدمةً عبر فحص جداول system ذات الصلة:

clickhouse-cloud :) SELECT 1 SETTINGS use_query_cache=true;

SELECT 1
SETTINGS use_query_cache = 1

Query id: a5a078c7-61e5-4036-a6f0-4d602d5b72d2

في النتائج الأخيرة، نرى قيمة 1 لـ QueryCacheMisses عند أول تشغيل للاستعلام SELECT 1 SETTINGS use_query_cache=true;، وحدث QueryCacheHits مرتبطًا بالتنفيذ الثاني للاستعلام.

ضع في اعتبارك أيضًا أن الحد الأقصى الافتراضي لحجم مُدخل cache هو 1048576 بايت (= 1 MiB)، وأن النتائج تُخزَّن افتراضيًا في cache لمدة 60 ثانية فقط (يمكنك استخدام query_cache_ttl=300 في SETTINGS، على سبيل المثال، لتخزين نتيجة ذاكرة التخزين المؤقت للاستعلامات لمدة 5 دقائق بدلًا من ذلك).

يمكنك العثور على معلومات أكثر تفصيلًا حول ClickHouse ذاكرة التخزين المؤقت للاستعلامات هنا

Navigation