Doris 优化配置参考

fe.conf

qe_max_connection = 4096
max_conn_per_user = 1024
lower_case_table_names=1
broker_timeout_ms = 120000
qe_query_timeout_second = 12000
backend_rpc_timeout_ms = 60000
remote_fragment_exec_timeout_ms = 300000
meta_publish_timeout_ms = 30000
check_consistency_default_timeout_second = 1800
publish_version_timeout_second = 90
tablet_create_timeout_second = 10
bdbje_lock_timeout_second = 10
max_bdbje_clock_delta_ms = 20000
max_running_txn_num_per_db = 1000
enable_concurrent_update = true
enable_batch_delete_by_default = true
jetty_server_max_http_header_size = 30720
max_stream_load_timeout_second = 300
stream_load_default_timeout_second = 300

解析

  1. qe_max_connection:每个FE(Frontend)的最大连接数,默认值是1024。

  2. max_conn_per_user:每个用户的最大连接数,默认值是1024。

  3. lower_case_table_names:设置为1表示表名将被转换为小写存储。

  4. broker_timeout_ms:与Broker通信的超时时间,单位是毫秒,默认值是120000毫秒(2分钟)。

    • Break:在 Apache Doris 中,Broker 是一个重要的组件,它主要用于以下几个方面:

    1. 数据导入

      • Broker 负责从外部存储系统(如 HDFS、S3、BOS 等)导入数据到 Doris 中。它作为数据导入过程中的中介,帮助 Doris 读取外部存储中的数据文件,并将其加载到 Doris 的存储引擎中。

    2. 数据导出

      • 同样,Broker 也可以用于将 Doris 中的数据导出到外部存储系统。

  5. qe_query_timeout_second:查询执行的超时时间,单位是秒,默认值是12000秒(3.33小时)。

  6. backend_rpc_timeout_ms:后端RPC调用的超时时间,单位是毫秒,默认值是60000毫秒(1分钟)。

    • RPC:RPC(Remote Procedure Call,远程过程调用)是一种通信协议,它允许一个程序(客户端)通过网络向另一个程序(服务器)请求服务

  7. remote_fragment_exec_timeout_ms:远程Fragment执行的超时时间,单位是毫秒,默认值是300000毫秒(5分钟)。

    • 远程Fragment:在分布式数据库和大数据处理系统中,"Fragment"(片段)通常指的是查询执行计划中的一个单元,它代表了查询的一部分,需要在数据所在的节点上执行。在 Apache Doris 这样的 MPP(大规模并行处理)数据库中,查询通常被分解成多个 Fragment,每个 Fragment 负责处理数据的一个子集。

  8. meta_publish_timeout_ms:元数据发布操作的超时时间,单位是毫秒,默认值是30000毫秒(30秒)。

    • 元数据:在分布式数据库和大数据系统中,元数据(Metadata)是指描述数据的结构、属性、存储位置等信息的数据。元数据发布(Metadata Publishing)是指在系统中更新和同步元数据的过程,确保系统中的所有节点都能够访问到最新的元数据信息。

  9. check_consistency_default_timeout_second:检查一致性的默认超时时间,单位是秒,默认值是1800秒(30分钟)。

  10. publish_version_timeout_second:发布版本的超时时间,单位是秒,默认值是90秒。

  11. tablet_create_timeout_second:创建tablet的超时时间,单位是秒,默认值是10秒。

    • tablet:Tablet 是 Apache Doris 中用于存储数据的一个小块,它类似于数据库中的“分区”。每个 Tablet 包含表中的一部分数据,并且这些 Tablet 会被分散存储在集群的不同节点上,以实现数据的分布式管理和查询。这样可以提高查询效率和数据的可靠性。

  12. bdbje_lock_timeout_second:BDB JE锁的超时时间,单位是秒,默认值是10秒。

    • BDB JE锁:BDB JE锁是指 Berkeley DB Java Edition(BDB JE)中的锁机制。简单来说,BDB JE锁是用来管理对数据库中数据的并发访问,确保数据一致性和事务隔离的一种技术。当一个事务需要修改数据时,它会使用锁来保证在这个事务完成之前,其他事务不能修改同一批数据,从而防止数据冲突和不一致。

  13. max_bdbje_clock_delta_ms:BDB JE时钟偏差的最大值,单位是毫秒,默认值是20000毫秒(20秒)。

    • BDB JE时钟偏差:BDB JE(Berkeley DB Java Edition)时钟偏差是指在分布式系统中,不同节点上的时钟可能会存在微小的差异。由于物理时钟的不完美,以及网络延迟等因素,这些差异是难以避免的。

      简单来说,BDB JE时钟偏差就是指在一个分布式数据库环境中,不同服务器或节点上的时钟时间不完全同步的现象。这种时间上的差异可能会影响那些依赖于精确时间戳的操作,比如事务处理、日志记录等。因此,了解和管理时钟偏差对于维护数据的一致性和完整性是很重要的。

  14. max_running_txn_num_per_db:每个数据库允许的最大运行事务数,默认值是1000。

    • 数据库允许的最大运行事务数:数据库允许的最大运行事务数是指在任何给定时间点,数据库系统能够同时处理的事务(即一组操作,要么全部成功,要么全部失败)的最大数量。这个限制通常由数据库的配置参数决定,并且受到数据库资源(如内存、存储、处理能力)的限制。

      简单来说,最大运行事务数就是数据库能同时“记住”并处理的事务数量。

      与连接数的关系如下:

      1. 连接数

      • 连接数指的是数据库可以同时接受的客户端连接的数量。每个连接可能代表一个用户会话或一个应用程序与数据库的通信通道。

      1. 事务与连接

      • 每个连接可能启动一个或多个事务。因此,连接数直接影响可能同时启动的事务数量。

      1. 资源竞争

      • 如果连接数过多,可能会导致同时运行的事务数超过数据库的处理能力,从而引起性能瓶颈或事务超时。

      1. 配置调整

      • 数据库管理员可以根据系统资源和业务需求调整最大运行事务数和最大连接数,以优化性能和资源利用率。

      1. 事务管理

      • 即使连接数很多,合理的事务管理(如及时提交或回滚事务)可以避免事务积压,从而减少对系统资源的占用。

      总的来说,最大运行事务数与连接数密切相关,但它们不是一一对应的关系。一个连接可能启动多个事务,而一个事务可能涉及多个数据库操作。合理的配置和优化可以确保数据库系统在高并发环境下的稳定性和响应性。

  15. enable_concurrent_update:是否启用并发更新,默认为true。

    • 并发更新:并发更新是指在数据库系统中,多个事务(Transaction)或操作(Operation)同时对同一条数据记录进行修改的情况。

  16. enable_batch_delete_by_default:是否默认启用批量删除,默认为true。

  17. jetty_server_max_http_header_size:Jetty服务器最大HTTP头大小,默认值是30720字节。

    • Jetty服务器最大HTTP头:Jetty 服务器是一个开源的 Java servlet 容器,它可以用来处理 web 请求和响应。在 Jetty 中,"最大 HTTP 头"(Max HTTP Header Size)是指 Jetty 服务器配置中允许接收的 HTTP 请求头的最大字节数。

  18. max_stream_load_timeout_second:Stream Load操作的最大超时时间,单位是秒,默认值是300秒(5分钟)。

  19. stream_load_default_timeout_second:Stream Load操作的默认超时时间,单位是秒,默认值是300秒(5分钟)。

be.conf

disable_storage_page_cache = true
be_service_threads = 512
doris_scanner_thread_pool_thread_num = 192
fragment_pool_thread_num_min =256
fragment_pool_thread_num_max = 1024
brpc_num_threads =32
enable_stream_load_record = true
max_runnings_transactions_per_txn_map = 2000

解析

  1. disable_storage_page_cache:是否禁用Page Cache,禁用后不会使用操作系统的page cache来缓存索引数据。该配置仅在BETA存储格式时生效。

    • Page Cache:Page Cache 是操作系统用于缓存文件数据的内存区域,它存储了最近访问的文件页,以便快速访问。简单来说,Page Cache 就是操作系统层面的文件系统缓存。

  2. be_service_threads:BE(Backend)服务的线程数,用于处理来自FE(Frontend)的请求。

  3. doris_scanner_thread_pool_thread_num:Doris扫描器线程池的线程数量,用于执行数据扫描任务。

  4. fragment_pool_thread_num_minfragment_pool_thread_num_max:查询执行器使用的线程池的最小和最大线程数。

  5. brpc_num_threads:BRPC(百度RPC)框架使用的线程数,用于处理RPC请求。

  6. enable_stream_load_record:是否启用Stream Load操作的记录功能。

  7. max_runnings_transactions_per_txn_map:每个事务映射允许的最大运行事务数。

Timeout 参数

在 Apache Doris 中,timeout 参数主要影响与查询执行和数据导入相关的操作。这些参数确保系统在遇到长时间运行的操作时能够采取相应的措施,避免资源长时间被占用。以下是一些可能受 timeout 参数影响的方面:

  1. 查询超时(Query Timeout)

    • query_timeout:控制查询执行的最大时间。如果查询运行时间超过这个设置值,系统将终止查询以防止资源过度消耗。

  2. 数据插入超时(Insert Timeout)

    • insert_timeout用于设置针对 INSERT 语句的超时。该变量仅作用于 INSERT 语句,建议在 INSERT 行为易持续较长时间的场景下设置。默认为 4 小时,单位为秒。由于旧版本用户会通过延长 query_timeout 来防止 INSERT 语句超时,insert_timeout 在 query_timeout 大于自身的情况下将会失效,以兼容旧版本用户的习惯。

  3. 空闲连接超时(Wait Timeout)

    • wait_timeout用于设置空闲连接的连接时长。当一个空闲连接在该时长内与 Doris 没有任何交互,则 Doris 会主动断开这个链接。默认为 8 小时,单位为秒。

  4. 数据可见超时(Insert Visible Timeout)

    • insert_visible_timeout_ms在执行 insert 语句时,导入动作 (查询和插入) 完成后,还需要等待事务提交,使数据可见。此参数控制等待数据可见的超时时间,默认为 10000,最小为 1000。

变量设置与查看

查看

可以通过 SHOW VARIABLES [LIKE 'xxx']; 查看所有或指定的变量。如:

SHOW VARIABLES;
SHOW VARIABLES LIKE '%time_zone%';

设置

部分变量可以设置全局生效或仅当前会话生效。

注意,在 1.1 版本之前,设置全局生效后,后续新的会话连接中会沿用设置值,但当前会话中的值不变。 而在 1.1 版本(含)之后,设置全局生效后,后续新的会话连接中会沿用设置值,当前会话中的值也会改变。

仅当前会话生效,通过 SET var_name=xxx; 语句来设置。如:

SET exec_mem_limit = 137438953472;
SET forward_to_master = true;
SET time_zone = "Asia/Shanghai";

全局生效,通过 SET GLOBAL var_name=xxx; 设置。如:

SET GLOBAL exec_mem_limit = 137438953472