背景
最近花了些時間看了下ClickHouse文檔,發現它在OLAP方面表現很優異,而且相對也比較輕量和簡單,所以准備入門了解下該數據庫系統。在介紹了安裝和用戶權限管理之后,本文對其配置文件做下相關的介紹說明。
說明
ClickHouse的配置文件是config.xml,默認在/etc/clickhouse-server/目錄中,可以在conf.d和config.d目錄中的*.xml和*.conf文件中覆蓋各個設置。還可以為這些配置文件的元素指定replace或remove屬性,如果均未指定,它將以遞歸方式合並元素的內容,從而替換重復子元素的值。如果指定了replace,將用指定的元素替換整個元素。如果指定了remove,則刪除該元素。
配置文件還可以定義substitutions(替代)。如果元素具有incl屬性,則文件中的相應值將被替換。替換文件的路徑為/etc/metrika.xml。可以在配置文件加入include_from元素進行更改。替換值在此文件的/yandex/substitution_name元素中指定。如果incl中指定的替代不存在,則將其記錄在日志中。為了防止ClickHouse記錄缺少的替代項,請指定:optional= true屬性。
可以從ZooKeeper中進行替換,指定屬性from_zk =“ /path/to/node”。元素值將替換為ZooKeeper中/path/to/node上節點的內容。還可以將整個XML子樹放在ZooKeeper節點上,並將其完全插入到source元素中。
config.xml文件可以使用users設置,為profiles和quotas指定單獨的配置。此配置的相對路徑在'users_config'元素中設置。默認情況下,它是users.xml。如果省略users_config,則直接在config.xml中指定。
配置參數
了解了各個參數的目的是更好進行配置和使用資源的限制,關於參數的詳細說明可以看官方文檔:Server settings、Settings
Server settings:在config.xml里設置
1. builtin_dictionaries_reload_interval:重新加載內置詞典的時間間隔(以秒為單位),默認3600。可以在不重新啟動服務器的情況下“即時”修改詞典。
<builtin_dictionaries_reload_interval>3600</builtin_dictionaries_reload_interval>
2. compression:MergeTree引擎表的數據壓縮設置。配置模板如:
<compression incl="clickhouse_compression"> --指定incl <case> <min_part_size>10000000000</min_part_size> --數據部分的最小大小 <min_part_size_ratio>0.01</min_part_size_ratio> --數據部分大小與表大小的比率 <method>zstd</method> --壓縮算法,zstd和lz4 </case> </compression>
可以配置多個<case>。如果數據部分與條件集匹配,使用指定的壓縮方法;如果數據部分匹配多個條件集,將使用第一個匹配的條件集;如果數據部分不滿足任何條件,則使用lz4壓縮。
3. default_database:默認數據庫。
<default_database>default</default_database>
4. default_profile:默認設置配置文件,在參數user_config中指定。
<default_profile>default</default_profile>
5. dictionaries_config:外部詞典的配置文件的路徑,在config配置文件中指定。路徑可以包含通配符*和?的絕對或則相對路徑。
<dictionaries_config>*_dictionary.xml</dictionaries_config>
6. dictionaries_lazy_load:延遲加載詞典,默認false。
true:在首次使用時創建每個字典。 如果字典創建失敗,則正在使用字典的函數將引發異常。
false:在服務器啟動時將創建所有字典,如果有錯誤,則服務器將關閉。
<dictionaries_lazy_load>true</dictionaries_lazy_load>
7. format_schema_path:包含輸入格式文件(例如CapnProto格式的方案)的目錄路徑。
<format_schema_path> format_schemas / </ format_schema_path>
8. graphite:將數據發送到Graphite,它是一款企業級監控。
<graphite> <host>localhost</host> -- Graphite服務器 <port>42000</port> -- Graphite服務器上的端口 <timeout>0.1</timeout> -- 發送超時時間,以秒為單位 <interval>60</interval> -- 發送間隔,以秒為單位 <root_path>one_min</root_path> -- 密鑰的前綴 <metrics>true</metrics> -- 從system.metrics表發送數據 <events>true</events> -- 從system.events表發送在該時間段內累積的增量數據 <events_cumulative>false</events_cumulative> -- 從system.events表發送累積數據 <asynchronous_metrics>true</asynchronous_metrics> -- 從system.asynchronous_metrics表發送數據 </graphite>
可以配置多個<graphite>子句。例如,您可以使用它以不同的時間間隔發送不同的數據。后期監控會單獨寫篇文章介紹,目前暫時進行說明。
9. graphite_rollup:數據匯總設置
<default> <function>max</function> <retention> <age>0</age> <precision>60</precision> </retention> <retention> <age>3600</age> <precision>300</precision> </retention> <retention> <age>86400</age> <precision>3600</precision> </retention> </default> </graphite_rollup_example>
更多詳細信息,請參見GraphiteMergeTree。
10. http_port/https_port:通過HTTP連接到服務器的端口。如果指定了https_port,則必須配置openSSL。如果指定了http_port,則即使已設置openSSL配置,也會將其忽略。
<http_port>8123</http_port>
11. http_server_default_response:訪問ClickHouse HTTP服務器時默認顯示的頁面。默認值為“OK”(末尾有換行符)
<http_server_default_response> <![CDATA[<html ng-app="SMI2"><head><base href="http://ui.tabix.io/"></head><body><div ui-view="" class="content-ui"></div><script src="http://loader.tabix.io/master.js"></script></body></html>]]> </http_server_default_response>
12. include_from:帶替換文件的路徑,有關更多信息,請參見“Configuration files”部分。
<include_from>/etc/metrica.xml</include_from>
13. interserver_http_port:於在ClickHouse服務器之間交換數據的端口。
<interserver_http_port>9009</interserver_http_port>
14. interserver_http_host:其他服務器可以用來訪問該服務器的主機名。如果省略,則其定義方法與hostname -f命令相同。
<interserver_http_host>example.yandex.ru</interserver_http_host>
15. interserver_http_credentials:在使用Replicated *引擎進行復制期間進行身份驗證的用戶名和密碼。 這些憑據僅用於副本之間的通信,與ClickHouse客戶端的憑據無關。 服務器正在檢查這些憑據以連接副本,並在連接到其他副本時使用相同的憑據。 因此,對於群集中的所有副本,應將這些憑據設置為相同。默認不使用身份驗證。
<interserver_http_credentials> <user>admin</user> <password>222</password> </interserver_http_credentials>
16. keep_alive_timeout:ClickHouse在關閉連接之前等待傳入請求的秒數。 默認為3秒。
<keep_alive_timeout>3</keep_alive_timeout>
17. listen_host:限制來源主機的請求, 如果要服務器回答所有請求,請指定“::” :
<listen_host> :: 1 </ listen_host> <listen_host> 127.0.0.1 </ listen_host>
18. logger:日志記錄設置。選項組里的設置有:level、log、errorlog、size、count:
<logger>
<level>trace</level> --日志記錄級別。可接受的值: trace, debug, information, warning, error
<log>/var/log/clickhouse-server/clickhouse-server.log</log> --日志文件,根據級別包含所有條目 <errorlog>/var/log/clickhouse-server/clickhouse-server.err.log</errorlog> -- 錯誤日志文件 <size>1000M</size> -- 文件的大小。適用於loganderrorlog,文件達到大小后,ClickHouse將對其進行存檔並重命名,並在其位置創建一個新的日志文件 <count>10</count> -- ClickHouse存儲的已歸檔日志文件的數量 </logger>
還支持寫入系統日志:
<logger>
<use_syslog>1</use_syslog> -- 寫入系統日志
<syslog>
<address>syslog.remote:10514</address> -- syslogd的主機[:port]。如果省略,則使用本地守護程序 <hostname>myhost.local</hostname> -- 可選,從中發送日志的主機的名稱。 <facility>LOG_LOCAL6</facility> -- syslog關鍵字,其大寫字母帶有“ LOG_”前綴:(LOG_USER,LOG_DAEMON,LOG_LOCAL3,依此類推) <format>syslog</format> -- 格式。可能的值:bsd和syslog </syslog> </logger>
19. macros:復制表的參數替換,如果不使用復制表,則可以省略。有關更多信息,請參見“Creating replicated tables”
<macros incl="macros" optional="true" />
20. mark_cache_size:標記緩存的大小,用於MergeTree系列的表中。 以字節為單位,共享服務器的緩存,並根據需要分配內存。緩存大小必須至少為5368709120(5G)。
<mark_cache_size>5368709120</mark_cache_size>
21. max_concurrent_queries:同時處理的最大請求數。
<max_concurrent_queries>100</max_concurrent_queries>
22. max_connections:最大連接數。
<max_connections>4096</max_connections>
23. max_open_files:打開最大的文件數,默認最大值
<max_open_files> 262144 </ max_open_files>
24. max_table_size_to_drop:刪除表的限制,默認50G,0表示不限制。如果MergeTree表的大小超過max_table_size_to_drop(以字節為單位),則無法使用DROP查詢將其刪除。如果仍然需要刪除表而不重新啟動ClickHouse服務器,請創建<clickhouse-path>/flags/force_drop_table文件並運行DROP查詢。
<max_table_size_to_drop>0</max_table_size_to_drop>
25. merge_tree:對MergeTree中的表進行調整,有關更多信息,請參見MergeTreeSettings.h頭文件。
<merge_tree> <max_suspicious_broken_parts>5</max_suspicious_broken_parts> </merge_tree>
26. openSSL:SSL客戶端/服務器配置。服務器/客戶端設置:
<openSSL> <server> <!-- openssl req -subj "/CN=localhost" -new -newkey rsa:2048 -days 365 -nodes -x509 -keyout /etc/clickhouse-server/server.key -out /etc/clickhouse-server/server.crt --> <certificateFile>/etc/clickhouse-server/server.crt</certificateFile> --PEM格式的客戶端/服務器證書文件的路徑。如果privateKeyFile包含證書,則可以忽略它。 <privateKeyFile>/etc/clickhouse-server/server.key</privateKeyFile> --具有PEM證書的秘密密鑰的文件的路徑。該文件可能同時包含密鑰和證書。 <!-- openssl dhparam -out /etc/clickhouse-server/dhparam.pem 4096 --> <dhParamsFile>/etc/clickhouse-server/dhparam.pem</dhParamsFile> <verificationMode>none</verificationMode> --檢查節點證書的方法。詳細信息在Context類的描述中。可能的值:none, relaxed, strict, once. <loadDefaultCAFile>true</loadDefaultCAFile> --指示將使用OpenSSL的內置CA證書。可接受的值:true,false <cacheSessions>true</cacheSessions> --啟用或禁用緩存會話。必須與sessionIdContext結合使用。可接受的值:true,false。 <disableProtocols>sslv2,sslv3</disableProtocols> --不允許使用的協議。 <preferServerCiphers>true</preferServerCiphers> ----首選服務器密碼 </server> <client> <loadDefaultCAFile>true</loadDefaultCAFile> --指示將使用OpenSSL的內置CA證書。可接受的值:true,false <cacheSessions>true</cacheSessions> -- --啟用或禁用緩存會話。必須與sessionIdContext結合使用。可接受的值:true,false。 <disableProtocols>sslv2,sslv3</disableProtocols> --不允許使用的協議。 <preferServerCiphers>true</preferServerCiphers> --首選服務器密碼 <!-- Use for self-signed: <verificationMode>none</verificationMode> --> <invalidCertificateHandler> --用於驗證無效證書的類 <!-- Use for self-signed: <name>AcceptCertificateHandler</name> --> <name>RejectCertificateHandler</name> </invalidCertificateHandler> </client> </openSSL>
27. part_log:記錄與MergeTree關聯的事件。如添加或合並數據。可以使用日志來模擬合並算法並比較其特征。 查詢記錄在system.part_log表中,而不記錄在單獨的文件中。 您可以在table參數中配置該表的名稱(<part_log>)。使用以下參數來配置日志記錄:
<part_log> <database>system</database> --庫名 <table>part_log</table> --表名 <partition_by>toMonday(event_date)</partition_by> --自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> --將數據從內存中的緩沖區刷新到表的時間間隔,單位毫秒。 </part_log>
28. path:數據的目錄路徑。
<path>/var/lib/clickhouse/</path>
29. query_log:通過log_queries = 1設置,記錄接收到的查詢。查詢記錄在system.query_log表中,而不記錄在單獨的文件中。可以在table參數中更改表的名稱。
<query_log> <database>system</database> --庫名 <table>query_log</table> --表名 <partition_by>toMonday(event_date)</partition_by> --自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> --將數據從內存中的緩沖區刷新到表的時間間隔 </query_log>
如果該表不存在,ClickHouse將創建它。如果在更新ClickHouse服務器時查詢日志的結構發生了更改,則具有舊結構的表將重命名,並自動創建一個新表。
30. query_thread_log:使用log_query_threads = 1設置,記錄接收到查詢的線程。查詢記錄在system.query_thread_log表中,而不記錄在單獨的文件中。您可以在table參數中更改表的名稱。
<query_thread_log> <database>system</database> --庫名 <table>query_thread_log</table> --表名 <partition_by>toMonday(event_date)</partition_by> --自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> --將數據從內存中的緩沖區刷新到表的時間間隔 </query_thread_log>
如果該表不存在,ClickHouse將創建它。如果在更新ClickHouse服務器時查詢線程日志的結構發生了更改,則具有舊結構的表將重命名,並自動創建一個新表。
31. trace_log:trace_log系統表操作的設置。
<trace_log> <database>system</database> --庫名 <table>trace_log</table> --表名 <partition_by>toYYYYMM(event_date)</partition_by> ----自定義分區鍵 <flush_interval_milliseconds>7500</flush_interval_milliseconds> ----將數據從內存中的緩沖區刷新到表的時間間隔 </trace_log>
32. query_masking_rules:基於Regexp的規則,應用於查詢以及所有日志消息。再其存儲在服務器日志中,system.query_log,system.text_log,system.processes表以及以日志形式發送給客戶端。這樣可以防止SQL查詢中的敏感數據泄漏記錄到日志中。
<query_masking_rules> <rule> <name>hide SSN</name> --規則名稱 <regexp>(^|\D)\d{3}-\d{2}-\d{4}($|\D)</regexp> --正則表達式 <replace>000-00-0000</replace> --替換,敏感數據的替換字符串(默認為可選-六個星號) </rule> </query_masking_rules>
規則適用於整個查詢,system.events表具有計數器QueryMaskingRulesMatch,該計數器具有查詢掩碼規則匹配的總數。對於分布式查詢,必須分別配置每個服務器,否則子查詢將傳遞給其他服務器節點將被存儲而不會屏蔽。
33. remote_servers:遠程服務器,分布式表引擎和集群表功能使用的集群的配置。
<remote_servers incl="clickhouse_remote_servers" />
34. timezone:服務器的時區,定為UTC時區或地理位置(例如,非洲/阿比讓)的IANA標識符。
當DateTime字段輸出為文本格式(打印在屏幕或文件中),以及從字符串獲取DateTime時,時區對於在String和DateTime格式之間進行轉換是必需的。 此外,如果在輸入參數中未接收到時區,則在使用時間和日期的函數中會使用時區。
<timezone>Europe/Moscow</timezone>
35. tcp_port:通過TCP協議與客戶端進行通信的端口,即ClickHouse端口。
<tcp_port>9000</tcp_port>
36. tcp_port_secure:通過TCP協議與客戶端進行通信的端口,即ClickHouse端口。 與OpenSSL設置一起使用。
<tcp_port_secure> 9440 </ tcp_port_secure>
37. mysql_port:通過MySQL協議與客戶端通信的端口。
<mysql_port>9004</mysql_port>
38. tmp_path:用於處理大型查詢的臨時數據的路徑。
<tmp_path>/var/lib/clickhouse/tmp/</tmp_path>
39. tmp_policy:從storage_configuration的策略,用於存儲臨時文件。如果未設置,則使用tmp_path,否則將忽略它。
40. uncompressed_cache_size:表引擎從MergeTree使用的未壓縮數據的緩存大小(以字節為單位,8G)。服務器有一個共享緩存,內存是按需分配的。如果啟用,則使用高速緩存。在個別情況下,未壓縮的緩存對於非常短的查詢是有利的。
<uncompressed_cache_size>8589934592</uncompressed_cache_size>
41. user_files_path:包含用戶文件的目錄,在表函數file()中使用。
<user_files_path>/var/lib/clickhouse/user_files/</user_files_path>
42. users_config:用戶配置文件,可以配置用戶訪問、profiles、quota、查詢等級等。
<users_config>users.xml</users_config>
43. zookeeper:ClickHouse與ZooKeeper群集進行交互的設置。使用復制表時,ClickHouse使用ZooKeeper來存儲副本的元數據。如果不使用復制表,則可以忽略此參數。
<zookeeper> <node> <host>example1</host> <port>2181</port> </node> <node> <host>example2</host> <port>2181</port> </node> <session_timeout_ms>30000</session_timeout_ms> --客戶端會話的最大超時(以毫秒為單位) <operation_timeout_ms>10000</operation_timeout_ms> <!-- Optional. Chroot suffix. Should exist. --> <root>/path/to/zookeeper/node</root> -- 用作ClickHouse服務器使用的znode的根的znode <!-- Optional. Zookeeper digest ACL string. --> <identity>user:password</identity> --用戶和密碼,ZooKeeper可能需要這些用戶和密碼才能訪問請求的znode </zookeeper>
44. use_minimalistic_part_header_in_zookeeper:ZooKeeper中數據部分頭的存儲方法。1:打開;0:關閉。默認0
僅適用於MergeTree系列。可以指定:
- 位於config.xml文件的merge_tree部分,對服務器上的所有表使用該設置。 可以隨時更改設置。 當設置更改時,現有表將更改其行為。
- 對於每個單獨的表,創建表時,請指定相應的引擎設置。 即使全局設置發生更改,具有此設置的現有表的行為也不會更改。
如果use_minimalistic_part_header_in_zookeeper = 1,則復制的表使用單個znode緊湊地存儲數據部分的頭。 如果表包含許多列,則此存儲方法將大大減少Zookeeper中存儲的數據量。但無法將ClickHouse服務器降級到不支持此設置的版本,在群集中的服務器上升級ClickHouse時要小心。 不要一次升級所有服務器。 在測試環境中或僅在群集中的幾台服務器上測試ClickHouse的新版本更為安全。已經使用此設置存儲的數據部件標題無法恢復為其以前的(非緊湊)表示形式。
45. disable_internal_dns_cache:禁用內部DNS緩存,默認0。
46. dns_cache_update_period:內部DNS緩存中存儲的IP地址的更新時間(以秒為單位),更新是在單獨的系統線程中異步執行的,默認15秒。
Settings:使用set設置(system.settings)
1. distributed_product_mode:更改分布式子查詢的行為。當查詢包含分布式表的乘積,即當分布式表的查詢包含分布式表的非GLOBAL子查詢時,ClickHouse將應用此設置。
限制條件:
- 僅適用於IN和JOIN子查詢。
- 僅當FROM部分使用包含多個分片的分布式表時。
- 如果子查詢涉及一個包含多個分片的分布式表。
- 不用於遠程功能。
可設置的值:
- deny:默認值。 禁止使用這些類型的子查詢(返回“ Double-distributed in / JOIN子查詢被拒絕”異常)。
- local:將子查詢中的數據庫和表替換為目標服務器(碎片)的本地查詢,而保留普通的IN / JOIN。
- global:用GLOBAL IN / GLOBAL JOIN替換IN / JOIN查詢。
- allow:允許使用這些類型的子查詢。
2. enable_optimize_predicate_expression:SELECT查詢中打開謂詞下推,謂詞下推可能會大大減少分布式查詢的網絡流量。默認1,可選0、1。
3. fallback_to_stale_replicas_for_distributed_queries:如果沒有新的數據,則強制查詢到過期的副本中查詢, 請參見復制。默認1,可選0、1。
4. force_index_by_date:如果無法按日期使用索引,則禁用查詢執行,與MergeTree系列中的表一起使用。默認0,可選0、1。
如果force_index_by_date = 1,檢查查詢是否具有可用於限制數據范圍的日期鍵條件。 如果沒有合適的條件,它將引發異常。 但不會檢查條件是否減少了要讀取的數據量。 如條件Date!='2000-01-01'是可以接受的,即使它與表中的所有數據匹配(即,運行查詢需要完全掃描)。
5. force_primary_key:如果無法通過主鍵建立索引,則禁用查詢執行,與MergeTree系列中的表一起使用。默認0,可選0、1。
如果force_primary_key = 1,檢查查詢是否具有可用於限制數據范圍的主鍵條件。 如果沒有合適的條件,它將引發異常。 但不會檢查條件是否減少了要讀取的數據量。
6. format_schema:使用定義的格式。
7. fsync_metadata:寫入.sql文件時啟用或禁用fsync。 默認1,啟用。可選0、1。如果服務器具有數百萬個不斷創建和銷毀的小表,則禁用它是有意義的。
8. enable_http_compression:HTTP請求的響應中啟用或禁用數據壓縮。默認0,可選0、1。
9. http_zlib_compression_level:設置HTTP請求的響應中的數據壓縮級別。默認3,可選1~9。
10. http_native_compression_disable_checksumming_on_decompress:從客戶端解壓縮HTTP POST數據時啟用或禁用校驗和驗證。 僅用於ClickHouse本機壓縮格式(不適用於gzip或deflate),默認0,禁用,可選0、1。
11. send_progress_in_http_headers:在clickhouse-server響應中啟用或禁用X-ClickHouse-Progress HTTP響應標頭。默認0,可選0、1。更多信息見:HTTP 客戶端
12. max_http_get_redirects:限制URL引擎表的最大HTTP GET重定向躍點數。 該設置適用於兩種類型的表:由CREATE TABLE查詢和url表函數創建的表。默認0,可選0、非0正整數。
13. input_format_allow_errors_num:設置從文本格式(CSV,TSV等)讀取時可接受的最大錯誤數。默認0。如果在讀取行時發生錯誤,但錯誤計數器仍小於input_format_allow_errors_num,則ClickHouse會忽略該行並繼續進行下一行。如果同時超過了input_format_allow_errors_num和input_format_allow_errors_ratio,則ClickHouse會引發異常。
14. input_format_allow_errors_ratio:設置從文本格式(CSV,TSV等)讀取時允許的最大錯誤百分比。錯誤百分比設置為0到1之間的浮點數。默認0。如果在讀取行時發生錯誤,但錯誤計數器仍小於input_format_allow_errors_ratio,則ClickHouse會忽略該行並繼續進行下一行。如果同時超過了input_format_allow_errors_num和input_format_allow_errors_ratio,則ClickHouse會引發異常。
15. input_format_values_interpret_expressions:如果快速流解析器無法解析數據,則啟用或禁用完整的SQL解析器。此設置僅用於數據插入時的“值”格式。有關語法分析的更多信息,請參見“語法”部分。默認1,可選0、1:
- 0:必須提供格式化的數據,請參閱格式部分。
- 1:將SQL表達式用作值,但是這種方式的數據插入速度要慢得多。
如:插入具有不同設置的DateTime類型值。SET input_format_values_interpret_expressions = 0; INSERT INTO datetime_t VALUES (now()) Exception on client: Code: 27. DB::Exception: Cannot parse input: expected ) before: now()): (at row 1) SET input_format_values_interpret_expressions = 1; INSERT INTO datetime_t VALUES (now()) Ok
16. input_format_values_deduce_templates_of_expressions:啟用或禁用SQL表達式模板推導。默認1。如果連續行中的表達式具有相同的結構,則可以更快地解析和解釋Values中的表達式。 ClickHouse將嘗試推導表達式的模板,使用該模板解析以下行,並對成功解析的行進行評估。如:
INSERT INTO test VALUES (lower('Hello')), (lower('world')), (lower('INSERT')), (upper('Values')), ... 1:如果input_format_values_interpret_expressions = 1和format_values_deduce_templates_of_expressions = 0會分別為每行解釋表達式(這對於大量的行來說非常慢) 2:如果input_format_values_interpret_expressions = 0和format_values_deduce_templates_of_expressions = 1會使用模板lower(String)解析第一,第二和第三行。 3:如果input_format_values_interpret_expressions = 1和format_values_deduce_templates_of_expressions = 1 與前面的情況相同,但是如果無法推斷出模板,則還允許回退以單獨解釋表達式。
17. input_format_values_accurate_types_of_literals: 僅當input_format_values_deduce_templates_of_expressions = 1時才使用此設置。可能會發生某些列的表達式具有相同的結構,但包含不同類型的情況,默認1,可選0、1。如:
(..., abs(0), ...), -- UInt64 literal (..., abs(3.141592654), ...), -- Float64 literal (..., abs(-1), ...), -- Int64 literal
啟用此設置后,ClickHouse將檢查實際類型,並將使用相應類型的表達式模板。 在某些情況下,可能會大大減慢表達式的評估。禁用后,ClickHouse可能會使用更通用的類型(例如Float64或Int64而不是42的UInt64),但可能會導致溢出和精度問題。
18. input_format_defaults_for_omitted_fields:執行INSERT查詢時,將省略的列替換為各個列的默認值。 此選項僅適用於JSONEachRow,CSV和TabSeparated格式。啟用此選項后,擴展表元數據將從服務器發送到客戶端。 消耗了服務器上的其他計算資源,並可能降低性能。默認1,可選0、1。
19. input_format_tsv_empty_as_default:將TSV中的空白字段替換為默認值。對於復雜的默認表達式,也必須啟用input_format_defaults_for_omitted_fields。默認0,可選0、1。
20. input_format_null_as_default:如果輸入數據包含NULL,但對應列的數據類型不是Nullable(T),則啟用或禁用默認值(對於文本輸入格式),默認0,可選0、1
21. input_format_skip_unknown_fields:啟用或禁用跳過多余數據列的插入。默認0,可選0、1。寫入數據時,如果輸入數據包含目標表中不存在的列,則ClickHouse會引發異常。如果啟用了跳過,則ClickHouse不會插入額外的數據,也不會引發異常。支持格式:JSONEachRow,CSVWithNames,TabSeparatedWithNames,TSKV。
22. input_format_import_nested_json:啟用或禁用帶有嵌套對象的JSON數據插入。默認0,可選0、1。支持的格式為JSONEachRow。
23. input_format_with_names_use_header:啟用或禁用在插入數據時檢查列順序。默認0,可選0、1。為了提高插入性能,如果確定輸入數據的列順序與目標表中的順序相同,則建議禁用此檢查。支持的格式CSVWithNames、TabSeparatedWithNames。
24. date_time_input_format:允許選擇一個解析器的文本表示日期和時間,該設置不適用於日期和時間功能。默認basic,可選:basic、best_effort。
- basic:lickHouse只能解析基本的YYYY-MM-DD HH:MM:SS格式。 例如,“ 2019-08-20 10:18:56”。
- best_effort:啟用擴展解析,可以解析基本的YYYY-MM-DD HH:MM:SS格式以及所有ISO 8601日期和時間格式,如:'2018-06-08T01:02:03.000Z'。
25. join_default_strictness:設置JOIN子句的默認嚴格性,默認all。可選值:
- ALL:如果右表具有多個匹配的行,ClickHouse將從匹配的行創建笛卡爾積。 這是標准SQL的正常JOIN行為。
- ANY:如果右表具有多個匹配的行,則僅連接找到的第一個行。 如果右表只有一個匹配行,則ANY和ALL的結果相同。
- ASOF:用於加入不確定匹配的序列。
- 空字符串:如果在查詢中未指定ALL或ANY,則ClickHouse會引發異常。
26. join_any_take_last_row:嚴格更改聯接操作的行為,僅適用於具有Join引擎表的JOIN操作。默認值0,
- 0:如果右表具有多個匹配行,則僅連接找到的第一個。
- 1:如果右表具有多個匹配行,則僅連接找到的最后一個。
27. join_use_nulls:設置JOIN行為的類型,合並表時可能會出現空單元格,ClickHouse根據此設置以不同的方式填充。默認0,可選:
- 0:空單元格用相應字段類型的默認值填充。
- 1:JOIN的行為與標准SQL相同。 相應字段的類型將轉換為Nullable,並且將空單元格填充為NULL。
28. join_any_take_last_row:更改ANY JOIN的行為。 禁用,ANY JOIN將獲取找到的第一行鍵。 啟用,如果同一鍵有多個行,則ANY JOIN會獲取最后匹配的行。 該設置僅在聯接表引擎中使用。默認1,可選0、1。
29. max_block_size:在ClickHouse中,數據由塊(列部分的集合)處理。 處理每個塊都有開銷。 對於要從表中加載的塊大小(以行數為單位),建議使用max_block_size設置。 目的是避免在多個線程中提取大量列時避免占用過多內存,並至少保留一些緩存局部性。默認:65,536(行數)。並非總是從表中加載max_block_size大小的塊。 如果很明顯需要檢索較少的數據,則處理較小的塊。
30. preferred_block_size_bytes:用於與max_block_size相同的目的,但是它通過將其調整為適合塊中的行數來設置建議的塊大小(以字節為單位),但塊大小不能超過max_block_size行。默認值:1,000,000。 僅在從MergeTree引擎讀取時有效。
31. merge_tree_min_rows_for_concurrent_read:從MergeTree引擎表的文件中讀取的行數超過merge_tree_min_rows_for_concurrent_read,則ClickHouse嘗試在多個線程上從該文件執行並發讀取。默認163840,可選任何正整數。
32. merge_tree_min_bytes_for_concurrent_read:從MergeTree引擎表的文件讀取的字節數超過了merge_tree_min_bytes_for_concurrent_read,則ClickHouse會嘗試在多個線程中同時讀取該文件。默認251658240,可選任何正整數。
33. merge_tree_min_rows_for_seek:在一個文件中讀取的兩個數據塊之間的距離小於merge_tree_min_rows_for_seek行,則ClickHouse不會搜索文件,而是順序讀取數據。默認0,可選任何正整數。
34. merge_tree_min_bytes_for_seek:在一個文件中讀取的兩個數據塊之間的距離小於merge_tree_min_bytes_for_seek字節,則ClickHouse順序讀取包含兩個塊的文件的范圍,從而避免了額外的查找。默認0,可選任何正整數。
35. merge_tree_coarse_index_granularity:搜索數據時,ClickHouse檢查索引文件中的數據標記。如果ClickHouse發現所需鍵在某個范圍內,則會將該范圍划分為merge_tree_coarse_index_granularity子范圍,然后在該范圍內遞歸搜索所需鍵。默認8,可選任何正偶數整數。
36. merge_tree_max_rows_to_use_cache:在一個查詢中讀取的行數超過merge_tree_max_rows_to_use_cache行,則它不使用未壓縮塊的緩存,使用壓縮塊的高速緩存存儲為查詢提取的數據。 ClickHouse使用此緩存來加快對重復的小型查詢的響應。此設置可保護高速緩存免受讀取大量數據的查詢的破壞。 uncompressed_cache_size服務器設置定義未壓縮塊的緩存大小。默認1048576,可選任何正整數。
37. merge_tree_max_bytes_to_use_cache:在一個查詢中讀取的數據多於merge_tree_max_bytes_to_use_cache字節,則它不使用未壓縮塊的緩存,同上。默認2013265920,可選任何正整數。
38. min_bytes_to_use_direct_io:使用直接I/O訪問存儲磁盤所需的最小數據量。如果要讀取的所有數據的總存儲量超過min_bytes_to_use_direct_io字節,則ClickHouse會使用O_DIRECT選項從存儲磁盤讀取數據。默認0,禁用,可選0、正整數。
39. log_queries:設置發送到ClickHouse的查詢將根據query_log服務器配置參數中的規則記錄。
40. log_query_threads:設置運行的查詢的線程將根據query_thread_log服務器配置參數中的規則記錄。
41. max_insert_block_size:插入表中要形成的塊的大小。此設置僅在服務器構成塊的情況下適用。對通過HTTP接口的INSERT,服務器解析數據格式並形成指定大小的塊。默認1048576。默認值略大於max_block_size,這樣做是因為某些表引擎(* MergeTree)在磁盤上為每個插入的塊形成了一個數據部分,這是一個相當大的實體。類似地,* MergeTree表在插入期間對數據進行排序,並且足夠大的塊大小允許對RAM中的更多數據進行排序。
42. max_replica_delay_for_distributed_queries:以秒為單位設置時間。如果副本滯后於設置值,則不使用該副本。默認300秒,在復制表的分布式表執行SELECT時使用。
43. max_threads:查詢處理線程的最大數量,不包括用於從遠程服務器檢索數據的線程(請參見“ max_distributed_connections”參數),適用於並行執行查詢處理管道相同階段的線程。默認值:物理CPU內核數。max_threads值越小,消耗的內存越少。
當從表中讀取時,如果可以使用函數求值表達式,使用WHERE進行過濾並使用至少“max_threads”個線程數並行地為GROUP BY進行預聚合。
- 如在服務器上運行少於一個SELECT查詢,則將此參數設置為稍小於處理器核心實際數量的值。
對於由於LIMIT而快速完成的查詢,可以設置較低的“max_threads”。
- 如如果每個塊中都有必要的條目數,並且max_threads = 8,則將檢索8個塊,盡管僅讀取一個塊就足夠了。
44. max_insert_threads:執行INSERT SELECT查詢的最大線程數。默認值0,可選0、正整數。較高的值將導致較高的內存使用率。並行INSERT SELECT僅在SELECT部分並行執行時才有效。
45. max_compress_block_size:壓縮寫入表之前,未壓縮數據塊的最大大小,默認1048576(1 MiB)。如果減小大小,則由於高速緩存局部性,壓縮率將降低,壓縮和解壓縮速度會略有增加,並且內存消耗也會減少。通常沒有任何理由更改此設置。不要將壓縮塊(由字節組成的內存塊)與查詢處理塊(表中的一組行)混淆。
46. min_compress_block_size:對於MergeTree表為了減少處理查詢時的延遲,如果塊的大小至少為min_compress_block_size,則在寫入下一個標記時將壓縮該塊。默認值為65536。如果未壓縮的數據小於max_compress_block_size,則塊的實際大小不小於此值且不小於一個標記的數據量,通常沒有任何理由更改此設置。
47. max_query_size:可以帶到RAM以便與SQL解析器一起解析的查詢的最大部分,默認256K。
48. Interactive_delay:檢查請求執行是否已取消並發送進度的時間間隔,以微秒為單位。默認值:100000(檢查取消並每秒發送10次進度)。
49. connect_timeout,receive_timeout,send_timeout:用於與客戶端通信的套接字上的超時(以秒為單位),默認為10,300,300
50. cancel_http_readonly_queries_on_client_close:當客戶端關閉連接而不等待響應時,取消HTTP只讀查詢。默認0,
51. poll_interval:將等待循環鎖定指定的秒數,默認10。
52. max_distributed_connections:與遠程服務器的並發連接的最大數量,用於對單個查詢到單個Distributed表進行分布式處理。建議設置不小於集群中服務器數量的值,默認1024。
53. distributed_connections_pool_size:與遠程服務器的並發連接的最大數量,用於對所有查詢到單個Distributed表進行的分布式處理。 我們建議設置一個不小於集群中服務器數量的值。默認1024。
54. connect_timeout_with_failover_ms:如果集群定義中使用了“ shard”和“ replica”部分,則連接到分布式表引擎的遠程服務器的超時時間(以毫秒為單位),默認50毫秒。
55. connections_with_failover_max_tries:分布式表引擎與每個副本的最大連接嘗試次數,默認3。
56. extremes:是否計算極值(查詢結果列中的最小值和最大值)。 接受0或1。默認情況下,0(禁用)。
57. use_uncompressed_cache:是否使用未壓縮塊的緩存。接受0或1。默認情況下,0(禁用)。
當使用大量短查詢時,使用未壓縮的緩存(僅適用於MergeTree系列中的表)可以有效減少延遲並增加吞吐量。建議為頻繁發送簡短請求的用戶啟用此設置。
注意uncompressed_cache_size配置參數(僅在配置文件中設置):未壓縮的緩存塊的大小。默認情況下為8 GiB。未壓縮的緩存將根據需要填充,並且使用最少的數據將自動刪除。
對於讀取一些數據量(一百萬行或更多)的查詢,未壓縮的緩存將自動禁用,以節省真正小的查詢的空間。這意味着可以始終將“ use_uncompressed_cache”設置設為1。
58. replace_running_query:使用HTTP接口時,可以傳遞'query_id'參數。這是用作查詢標識符的任何字符串。如果此時已存在來自具有相同query_id的相同用戶的查詢,則行為取決於replace_running_query參數:
- 0(默認值):引發異常(如果已經在運行具有相同“ query_id”的查詢,則不允許運行查詢)。
- 1 :取消舊查詢,然后開始運行新查詢。
59. stream_flush_interval_ms:在超時或線程生成max_insert_block_size行的情況下,適用於具有流式傳輸的表,默認7500。值越小,將數據刷新到表中的頻率越高。將該值設置得太低會導致性能下降。
60. load_balancing:指定用於分布式查詢處理的副本選擇算法。默認:Random。
- Random (by default):
計算每個副本的錯誤數量。 查詢發送到最少的錯誤副本,如果存在多個,則發送到其中任何一個。
缺點:不考慮服務器的鄰近性; 如果副本具有不同的數據,則可能獲得不同的數據。 - Nearest hostname:
計算每個副本的錯誤數量。每隔5分鍾,錯誤數量將被2整除。如果有一個副本的錯誤數量最少(即最近在其他副本上發生的錯誤),則將查詢發送給它。如果有多個副本且錯誤的最小數量相同,則查詢將以與配置文件中的服務器主機名最相似的主機名發送到副本。因此,如果存在等效的副本,則首選名稱最接近的副本。 - In order:
具有相同數量錯誤的副本將以與配置中指定的順序相同的順序進行訪問, - First or random:
選擇集合中的第一個副本,如果第一個副本不可用,則選擇一個隨機副本。 它在交叉復制拓撲設置中有效,但在其他配置中無效。
first_or_random算法解決了in_order算法的問題。 使用in_order,如果一個副本出現故障,則下一個副本負載將加倍,而其余副本則處理通常的流量。 使用first_or_random算法時,負載在仍然可用的副本之間平均分配。
61. prefer_localhost_replica:啟用或則禁用處理分布式查詢時使用localhost副本。默認1,可選值0、1:
- 1:ClickHouse始終向本地副本發送查詢(如果存在)。
- 0:ClickHouse使用load_balancing設置指定的平衡策略。
注意:如果使用max_parallel_replicas,請禁用此設置。
62. totals_mode:存在HAVING時以及存在max_rows_to_group_by和group_by_overflow_mode ='any'時如何計算TOTALS。
63. totals_auto_threshold:totals_mode ='auto'的閾值,
64. max_parallel_replicas:執行查詢時,每個分片的最大副本數。為了保持一致性(以獲取同一數據拆分的不同部分),此選項僅在設置采樣鍵時才有效。復制延遲不受控制。
65. compile:啟用查詢編譯。默認情況下,0(禁用)。編譯僅用於查詢處理管道的一部分:用於聚合的第一階段(GROUP BY)。對於具有多個簡單聚合函數的查詢,可以看到最大的性能改進(在極少數情況下,速度提高了四倍)。通常,性能提升微不足道。在極少數情況下,它可能會減慢查詢的執行速度。
66. min_count_to_compile:運行編譯之前可能使用已編譯代碼塊的次數。默認情況下,3。對於測試,可以將該值設置為0
67. output_format_json_quote_64bit_integers:如果該值為true,則在使用JSON * Int64和UInt64格式時(以與大多數JavaScript實現兼容),引號中會出現整數。否則,將輸出不帶引號的整數。
68. format_csv_delimiter:CSV數據中的分隔符。默認情況下為:,
69. input_format_csv_unquoted_null_literal_as_null:對於CSV輸入格式,啟用或禁用將未引用的NULL解析為文字。
70. output_format_csv_crlf_end_of_line:在CSV中使用DOS / Windows樣式行分隔符(CRLF),而不是Unix樣式(LF)。
71. output_format_tsv_crlf_end_of_line:在TSV中使用DOC / Windows樣式行分隔符(CRLF),而不是Unix樣式(LF)。
72. insert_quorum:啟用仲裁寫入,寫入多少個副本才算成功。默認0。insert_quorum <2,則禁用仲裁寫入;insert_quorum> = 2,則啟用仲裁寫入。
當在insert_quorum_timeout期間將數據正確寫入副本的insert_quorum時,INSERT才能成功。如果由於任何原因而成功寫入的副本數量未達到insert_quorum,則認為寫入失敗,並將從已寫入數據的所有副本中刪除插入的塊。讀取從insert_quorum寫入的數據時,可以使用select_sequential_consistency選項。查詢時可用副本的數量小於insert_quorum則會報錯。
73. insert_quorum_timeout:仲裁寫入超時(秒),默認60s。 如果超時時間內沒有寫完,則將生成一個異常,並且客戶端必須重復查詢才能將同一塊寫入相同或任何其他副本。
74. select_sequential_consistency:啟用或禁用SELECT查詢的順序一致性。默認0,可選0、1。啟用順序一致性后,ClickHouse允許客戶端僅對insert_quorum執行的INSERT查詢中的數據的副本執行SELECT查詢。 如果客戶端引用部分副本,則ClickHouse將生成一個異常。 SELECT查詢將不包括尚未寫入副本仲裁的數據。
75. max_network_bytes:限制執行查詢時通過網絡接收或傳輸的數據量(以字節為單位)。此設置適用於每個單獨的查詢。默認0,不限制。可選值:0、正整數。
76. max_network_bandwidth_for_user:限制數據在網絡上每秒交換的速度(字節),用於單個用戶執行的所有同時運行的查詢。默認值:0,不限制。可選值:0、正整數。
77. max_network_bandwidth_for_all_users:限制數據在網絡上每秒交換的速度(字節),用於服務器上所有同時運行的查詢。默認值:0,不限制。可選值:0、正整數。
78. allow_experimental_cross_to_join_conversion:將連表的,語法重寫成join on、using語法,如果設置值為0,則不會使用使用逗號的語法來處理查詢,並且會引發異常。默認1。可選0、1。可以看join的使用
79. count_distinct_implementation:指定應使用哪個uniq *函數來執行COUNT(DISTINCT ...),默認uniqExact。可選值:uniq、uniqCombined、uniqCombined64、uniqHLL12、uniqExact
80. skip_unavailable_shards:啟用或禁用跳過不可用的分片。如果分片的所有副本都不可用,則認為分片不可用。默認0,禁止跳過,可選值0、1。
81. optimize_skip_unused_shards:對在PREWHERE / WHERE中具有分片鍵條件的SELECT查詢啟用或禁用跳過未使用的分片(假設數據是通過分片鍵分發的,否則不執行任何操作)。默認0,禁止跳過。
82. force_optimize_skip_unused_shards:如果啟用了optimize_skip_unused_shards(0),並且無法跳過未使用的分片。如果無法跳過並且啟用了設置,則將引發異常。默認0,禁用。可選值:0:禁用(不拋出)1:僅在表具有分片鍵時才禁用查詢執行 2:禁用查詢執行,無論為表定義了分片鍵如何
83. optimize_throw_if_noop:如果OPTIMIZE查詢未執行合並,則啟用或禁用引發異常。默認0,可選0:禁用引發異常;1:啟用引發異常
默認情況下,即使未執行任何操作,OPTIMIZE也會成功返回。使用此設置可以區分這些情況,並在異常消息中獲取原因。
84. distributed_replica_error_half_life:控制將分布式表中的錯誤快速歸零的方式。如果某個副本在一段時間內不可用,累積了5個錯誤,並且distributed_replica_error_half_life設置為1秒,則該副本在上次錯誤之后3秒鍾被視為正常。默認60s。
85. distributed_replica_error_cap:每個副本的錯誤計數都以該值為上限,從而防止單個副本累積太多錯誤,默認1000。
86. distributed_directory_monitor_sleep_time_ms:分布式表引擎發送數據的基本間隔。發生錯誤時,實際間隔將呈指數增長,默認100毫秒。
87. distributed_directory_monitor_max_sleep_time_ms:分布式表引擎發送數據的最大間隔。限制在distributed_directory_monitor_sleep_time_ms設置的間隔的指數增長。默認值:30000毫秒(30秒)。
88. distributed_directory_monitor_batch_inserts:啟用/禁用批量發送插入的數據。啟用批發送功能后,分布式表引擎將嘗試通過一項操作發送多個插入數據文件,而不是分別發送。批發送通過更好地利用服務器和網絡資源來提高群集性能。默認0,禁用,可選0、1。
89. os_thread_priority:為執行查詢的線程設置優先級(nice)。當選擇在每個可用CPU內核上運行的下一個線程時,OS調度程序會考慮此優先級。默認值:0,可選值:可以在[-20,19]范圍內設置值。較低的值表示較高的優先級。
90. query_profiler_real_time_period_ns:查詢事件探查器的實際時鍾計時器的周期。實時時鍾計時器計算掛鍾時間。單位納秒,默認值:1000000000納秒(每秒),可選值:
- 10000000(每秒100次)納秒或更少的單個查詢。
- 1000000000(每秒一次)用於群集范圍內的性能分析。
- 0 用於關閉計時器。
91. allow_introspection_functions:啟用禁用內省功能以進行查詢概要分析。默認值:0,可選0(禁用)、1(啟用)
92. input_format_parallel_parsing:啟用數據格式的保留順序並行解析。 僅支持TSV,TKSV,CSV和JSONEachRow格式。
93. min_chunk_bytes_for_parallel_parsing:每個線程將並行解析的最小塊大小(以字節為單位),默認1M。
94. output_format_avro_codec:設置用於輸出Avro文件的壓縮編解碼器。默認snappy或deflate,可選值:
- null:不壓縮
- deflate:使用Deflate壓縮(zlib)
- snappy:使用Snappy壓縮
95. output_format_avro_sync_interval:設置輸出Avro文件的同步標記之間的最小數據大小(以字節為單位)。默認32K,可選值:32(32字節)~ 1073741824(1 GiB)
96. format_avro_schema_registry_url:設置Confluent Schema注冊表URL以與AvroConfluent格式一起使用,默認空。
總結
關於配置文件和參數已經介紹完畢,主要是通過 Server settings 和 Settings 來進行說明的,在需要調整的時候可以根據各個要求進行修改(修改配置文件& set settings = '')。后面再測試ClickHouse的時候會持續更新。