كيف يمكنني التحقق من استخدام ذاكرة التخزين المؤقت للاستعلامات في استعلامي؟
اطّلع على هذا المثال باستخدام 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 ذاكرة التخزين المؤقت للاستعلامات هنا