oceanbase-参数及变量的记录
详情可查看官网文档
集群级别配置
通用解释:
下述参数没有特别说明的即与通用解释一致
- 更改查询说明:仅 sys 租户可以修改该配置项,用户租户不能修改该配置项。ys 租户和所有用户租户均可以使用 SHOW PARAMETERS 语句或视图 GV$OB_PARAMETERS 查询该配置项
- 更改语句:ALTER SYSTEM SET log_disk_percentage=30;
- 是否可修改:是,支持通过 ALTER SYSTEM SET 语句修改。
- 是否重启 OBServer 节点生效:否,设置后立即生效。
参数详解:
- log_disk_percentage
- 用途:用于设置 Redo 日志占用其所在磁盘总空间的百分比
- 取值范围:[0, 99]
- 默认值:0,该配置项的值为 0 时,共用时(日志,数据同占一个盘),redo日志占 30%,独占时占 90%
- log_disk_size 配置项取值为 0 时,该配置项才生效,若 log_disk_size 取值不为 0,则该配置项不生效。有关log_disk_size 配置项的详细介绍
- 特别说明:改参数可调大也可调小,调小后预分配的空间也会随之减小,可空闲出磁盘空间
- log_disk_size
- 用途:用于设置 Redo 日志磁盘的大小
- 取值范围:[0M, +∞)
- 默认值:0,默认单位为 MB,配置时需写明单位
- 特别说明:OBServer 节点启动时,会预分配足够多的日志文件,OBServer 节点上创建租户 Unit 时,会为 Unit 预留足够多的日志盘空间,如果本地剩余日志盘空间(日志盘可用空间总大小 — 已分配空间)不满足 Unit 规格要求,则创建租户 Unit 失败
- datafile_size
- 用途:无共享模式: 用于设置数据文件的大小,共享存储:用于设置本地缓存空间的大小
- 取值范围:[0M, +∞)
- 默认值:0M,默认单位为 MB,配置时需写明单位。
- 特别说明:该配置项设置后,再次修改时不支持缩小,只支持扩大。该配置项与 datafile_disk_percentage 同时配置时,以该配置项设置的值为准
- datafile_disk_percentage
- 用途:无共享模式: 用于设置数据文件占用其所在磁盘总空间的百分比,共享存储:用于设置本地可用缓存空间占磁盘总空间的百分比。
- 取值范围:[0,99]
- 默认值:0,该配置项的值为 0 时,共用时(日志,数据同占一个盘),占用其所在磁盘 30%,独占时占 90%
- 特别说明:该配置项与 datafile_size 同时配置时,以 datafile_size 设置的值为准,设置后磁盘会随集群创建被预分配,不可减小,只有在节点重建时才可减小
- datafile_maxsize
- 用途:无共享模式:磁盘文件自动扩容的空间最大值,共享模式:无意义
- 取值范围:[0M, +∞)
- 默认值:0
- 特别说明:配置 datafile_maxsize 时,其值需要大于当前数据文件占用的磁盘空间大小 datafile_size(或 datafile_disk_percentage),如果设置的值小于当前数据文件占用的磁盘空间大小,则不会触发自动扩容。如果 datafile_maxsize 的值超过了当前磁盘的最大可用空间,则以实际磁盘的可用大小作为最大值。
- datafile_next
- 用途:无共享模式:磁盘文件自动扩容的增长步长,共享模式:无意义
- 取值范围:[0M, +∞)
- 默认值:0
- 特别说明:在 OceanBase 数据库中,存储数据的文件名为 block_file,该文件是在各 OBServer 节点启动后创建,这种预分配的方式占用了很大的磁盘空间,即使磁盘空间没有被使用,也不能被释放。从 V4.2.0 版本开始,OceanBase 数据库引入了数据文件渐进式使用磁盘空间的用户配置选项,即系统先预分配一个合理的磁盘大小给数据文件,再根据磁盘的实际使用情况和用户的配置进行自动扩容。建议步长 datafile_next 的初始配置设置为 datafile_maxsize 的 20% 左右,避免频繁扩容。
- 当 datafile_next 设置为小于或等于 1G 的值时,datafile_next 的取值为 min (1G, datafile_maxsize * 10%)。
- 当 datafile_next 设置为大于 1G 的值时,datafile_next 的取值为 min ( datafile_next, 磁盘剩余空间)。
- devname
- 用途:devname 用于查看服务进程绑定的网卡设备名。
- 默认值:bond0
- 是否可修改:否,该配置项从 V4.2.0 版本开始生效范围由动态生效调整为只读。
- server_permanent_offline_time
- 用途:用于设置节点心跳中断的时间阈值,即节点心跳中断多久后认为其被永久下线。对于永久下线的节点,Root Service 会对该 OBServer 节点上的数据副本进行处理,将该 OBServer 节点上包含的数据副本从 Paxos 成员组中删除,并在其他可用的 OBServer 节点上补充数据,以保证数据副本 Paxos 成员组的完整性。
- 取值范围:[20s, +∞)
- 默认值:3600s
- 特别说明:如果机器故障,小于server_permanent_offline_time,等机器起来,会自动补缺失数据,如果大于server_permanent_offline_time,是需要全量重建这台机器上原有的副本,磁盘损坏的情况需要替换新的节点,与server_permanent_offline_time无关
- memory_limit
- 用途:用于设置 OBServer 可用的总内存大小。设置生效需要同时满足两个条件
- 500 租户的预留内存需要不小于实际占用内存
- memory_limit 取值需高于 system_memory 和 Unit 已分配内存之和
- 取值范围:[1G, +∞),该配置项从 V4.1.0 版本开始取值范围由 [4G, +∞) 调整为 [1G, +∞),仲裁服务模式下最低取值为 1G,非仲裁服务模式下最低取值为 4G
- 默认值:0,单位为 MB。 如果该值不为 0,则系统会忽略 memory_limit_percentage 的设置而优先使用 memory_limit 配置的值
- 特别说明:memory_limit 的值目前无上限,如果设置的内存最大上限超过了实际的物理内存总和,则会导致系统中其他按总内存计算的值偏大
- 查看当前已用内存数:
- 用途:用于设置 OBServer 可用的总内存大小。设置生效需要同时满足两个条件
SELECT value/1024/1024/1024 used_gb FROM v$sysstat WHERE name LIKE '%observer memory%' AND con_id = 1 AND stat_id=140008 AND name='observer memory used size';
- memory_limit_percentage
- 用途:用于设置 OBServer 总可用内存大小占总内存大小的百分比
- 取值范围:[10, 95],从 V4.2.1 版本开始取值范围由 [10, 90] 调整为 [10, 95]。
- 默认值:80
- balancer_task_timeout
- 用途:用于设置负载均衡等后台任务的超时时间
- 取值范围:[1s, +∞)
- 默认值:20m,表示 20 分钟
- 特别说明:暂时没理解含义,后续详细研究
- balancer_tolerance_percentage
- 用途:用于设置负载均衡策略中,租户内多个 UNIT 间磁盘不均衡程度的宽容度,如果在均值 + 或 - 宽容度范围之内,不会触发执行均衡动作。
- 取值范围:取值范围
- 默认值:10
- builtin_db_data_verify_cycle
- 用途:用于设置数据坏块自检周期
- 取值范围:[0, 360],取值为 0 时表示不检查。
- 默认值:20,单位为天
- cache_wash_threshold
- 用途:用于设置触发缓存清理的容量阈值。如果内存空间小于指定值时,内存空间将被清理。
- 取值范围:[0, +∞)
- 默认值:4GB,默认单位为 MB,配置时需说明单位。
- data_disk_usage_limit_percentage
- 用途:用于设置数据文件最大可以写入的百分比,超过这个阈值后,禁止数据迁入。
- 取值范围:[50, 100]
- 默认值:90
- data_disk_write_limit_percentage
- 用途:用于控制数据盘写入的限制百分比。当数据盘的使用量接近设定的限制百分比时,系统将限制业务请求的写入操作,以防止数据盘空间耗尽。
- 取值范围:[0, 100)
- 默认值:0,表示不开启。
- 特别说明:设置时其值需要大于等于data_disk_usage_limit_percentage。建议该配置项的取值为 (1 - memstore_limit_size/data_disk_size) * 100%
- memstore_limit_size:表示 租户 memory_size *memstore_limit_percentage。
- data_disk_size:表示用户配置的数据盘大小。
- enable_perf_event
- 用途:用于设置是否开启性能事件的信息收集功能。
- 取值范围:True, False
- 默认值:True
- enable_rereplication
- 用途:用于设置是否开启自动补副本的功能。
- 取值范围:True, False
- 默认值:True
- enable_sql_operator_dump
- 用途:用于设置是否允许 SQL 处理过程的中间结果写入磁盘以释放内存。
- 取值范围:True, False
- 默认值:True
- enable_upgrade_mode
- 用途:用于设置是否开启升级模式。在升级模式中,会暂停部分系统后台功能。
- 取值范围:True, False
- 默认值:False
- 特别说明:在升级前,对于需要禁止的功能(例如,DDL 操作),您可以统一通过该系统配置项来控制,使升级流程更简单。升级前将 enable_upgrade_mode 设置为 True,升级后将其设置为 False。
- global_background_cpu_quota
- 用途:用于控制在开启全局前后台资源隔离时后台任务的 CPU 核数。仅当 enable_global_background_resource_isolation 取值为 True 时该配置项才有效
- 取值范围:[-1, +∞),取值为 -1 或 0,都表示使用的 CPU 核数不受 Cgroup 限制。
- 默认值:-1
- internal_sql_execute_timeout
- 用途:用于设置系统内部 SQL 执行的超时时间
- 取值范围:[1000us, 1h],该配置项从 V3.2.3 版本开始取值范围由 [1000us, 10min] 调整为 [1000us, 1h]。
- 默认值:30s
- large_query_threshold
- 用途:用于设置查询执行时间的阈值。超过时间的请求可能被暂停,暂停后自动被判断为大查询,执行大查询调度策略。
- 取值范围:[0ms, +∞)
- 默认值:5s
- large_query_worker_percentage
- 用途:用于设置预留给处理大查询的工作线程百分比。
- 取值范围:[0, 100]
- 默认值:30
- 特殊说明:租户线程中持有被判定为大查询请求的线程,一部分可直接获得继续执行权,其余的需要挂起等待。可获得继续执行权的线程的比例由配置项决定
- log_archive_batch_buffer_limit
- 用途:当物理备份开启时,log_archive_batch_buffer_limit 用于控制日志归档单机的最大内存使用量。
- 取值范围:[2M, +∞)
- 默认值:1G
- max_px_worker_count
- 用途:用于设置 SQL 并行查询引擎使用的最大线程数。
- 取值范围:[0, 65535]
- 默认值:64
- migration_disable_time
- 用途:用于控制节点因资源异常(如磁盘空间耗尽)导致数据迁入失败后,系统禁止新迁入操作的冷却时间。
- 取值范围:[1s, +∞)
- 默认值:3600s
- plan_cache_evict_interval
- 用途:用于设置执行计划缓存的淘汰时间间隔。
- 取值范围:[0s, +∞)
- 默认值:5s,该配置项从 V4.2.0 版本开始默认值由 1s 调整为 5s。
- 特别说明:OceanBase 数据库会缓存之前生成的执行计划,以便在下次执行该 SQL 时直接使用,可以避免反复执行,从而优化执行过程,这种策略被称为"Optimize Once",即"一次优化。每个租户在每一台服务器上都有一个独立的计划缓存,用以缓存在此服务器上处理过的 SQL 计划。在 OceanBase 数据库的计划缓存中,SQL 的执行计划可以分为本地计划、远程计划和分布式计划三种类型。在计划缓存中,同一条 SQL 根据其需要访问的数据不同,可能同时具有三种执行计划。
- resource_hard_limit
- 用途:用于定义 CPU 资源的超卖百分比。
- 取值范围:[100, 10000]
- 默认值:100
- 特别说明:在分配 CPU 和内存等资源时,资源总量是实际数量乘以该百分比的值。最终 Server 资源占比不能超过 resource_hard_limit。在修改资源规格前,如果该资源规格对应的 Unit 正在被租户使用并且确认需要增加资源,则在增加资源的过程中必须保证各节点有足够的剩余资源可用于分配。您可以通过视图 oceanbase.GV$OB_SERVERS 来查询节点总资源和已经分配的资源,然后通过计算来确定是否可以修改资源规格。
- rootservice_memory_limit
- 用途:用于设置 Root Service 的最大内存容量限制。
- 取值范围:[2G, +∞)
- 默认值:2G
- 特别说明:在 OceanBase 数据库中,Root Service 负责集群的节点管理,各 OBServer 通过心跳数据包(heartbeat)的方式,定期(每 2s)向 Root Service 汇报自己的进程状态,Root Service 通过监测 OBServer 的心跳数据包,来获取当前 OBServer 进程的工作状态。数据库高可用详见文档
- schema_history_expire_time
- 用途:可用于设置需要保留的完整元数据历史数据的范围,也可用于设置延迟删除的租户的保留时间。
- 取值范围:[1m, 30d],该配置项从 V4.0.0 版本开始取值范围由 [1m, 365d] 调整为 [1m, 30d]。
- 默认值:7d,d 表示天,该配置项从 V4.0.0 版本开始默认值由 30d 调整为 7d。
- 特别说明:该配置项的值设置为 7d 时,表示最新 7 天内产生的完整元数据历史数据需要被保留,之前的元数据历史数据可以被元数据历史数据回收服务回收。
- server_balance_cpu_mem_tolerance_percent
- 用途:在节点负载均衡策略中,用于设置 CPU 和内存资源不均衡的容忍度。
- 取值范围:[1, 100]
- 默认值:5
- server_balance_critical_disk_waterlevel
- 用途:用于设置磁盘空间的负载均衡功能的水位线。当磁盘水位线超过阈值时,负载均衡策略将倾向于优先考虑磁盘均衡。资源均衡详见文档
- 取值范围:[0, 100]
- 默认值:80
- syslog_disk_size
- 用途:用于设置系统日志的磁盘空间上限。当系统日志的总大小将要达到该上限时,最旧的日志文件将会被删除,包括已压缩的日志文件。
- 取值范围:[0, +∞)
- 默认值:0M
- 特别说明:该配置项存储的系统日志文件包括 {install_path}/log 目录下的所有未压缩和已压缩的日志文件。
- max_syslog_file_count
- 用途:用于设置在回收日志文件之前可以容纳的日志文件数量
- 取值范围:[0, +∞)
- 默认值:0,表示不会删除任何日志文件。
- 特别说明:每个日志文件最多可以占用 256 MB 的磁盘空间。
- tablet_size
- 用途:用于设置分区内部并行处理(合并、查询等)时每个分片的大小。
- 取值范围:[0, +∞)
- 默认值:128M,默认单位为 MB,配置时需说明单位。
- 特别说明:tablet_size 的默认取值必须为 2M 的倍数,数值为 0 时,表示不采用分区内并行处理。分区详见文档
系统变量
通用解释
下述参数没有特别说明的即与通用解释一致
- 作用域:Global、Session
- 是否可修改:是,支持通过 SET 语句修改。
- 查询变量
- Global 级别:sys 租户和所有用户租户均可以使用 SHOW VARIABLES 语句或视图 SYS.TENANT_VIRTUAL_GLOBAL_VARIABLE(Oracle 模式)及视图 information_schema.GLOBAL_VARIABLES(MySQL 模式)查看 Global 系统变量的值。
- Session 级别:sys 租户和所有用户租户均可以使用 SHOW VARIABLES 语句或视图 SYS.TENANT_VIRTUAL_SESSION_VARIABLE(Oracle 模式)及视图 information_schema.SESSION_VARIABLES(MySQL 模式)查看 Session 系统变量的值。
- 修改变量
- Global 级别:
- sys 租户可以直接修改 Global 系统变量的值
- MySQL 用户租户需要拥有 SUPER 或 ALTER SYSTEM 权限才能修改 Global 系统变量的值。
- Oracle 用户租户需要拥有 ALTER SYSTEM 权限才能修改 Global 系统变量的值。
- Session 级别:sys 租户和所有用户租户均可以直接修改本租户的 Session 系统变量的值。
- Global 级别:
变量详解
- ob_query_timeout
- 用途:用于设置 SQL 最大执行时间
- 取值范围:[0, 3216672000000000]
- 默认值:10000000,单位为微秒
- is_result_accurate
- 用途:当查询带有 topk 提示时,is_result_accurate 表示结果是否正确。
- 取值范围:OFF、ON
- 默认值:ON
- 作用域:Session
- net_buffer_length
- 用途:用于设置 OBServer 节点能接受的 SQL Query 的大小。
- 取值范围:[1024, 1048576]
- 默认值:16384
- 是否可修改:是,该变量可通过 SET GLOBAL 语句修改 Global 生效方式下的取值,不可通过 ALTER SESSION SET 语句修改 Session 生效方式下的取值。
- read_only
- 用途:用于设置租户是否为只读模式。与 MySQL 一致,仅能限制普通用户,不过 OB 无 super_read_only 参数
- 取值范围:OFF、ON
- 默认值:ON
- 生效范围:Global
- ob_read_consistency
- 用途:用于设置读一致性级别。
- 取值范围:
- 0:空字符串
- 1:FROZEN:冻结,此时,ob_read_consistency 变量的设置无效,路由策略优先路由到未冻结的副本
- 2:WEAK:弱一致性,不要求读取最新数据,请求优先路由给从副本
- 3:STRONG:强一致性,读取最新数据,请求路由给主副本
- 默认值:STRONG
- ob_max_read_stale_time
- 用途:用于设置弱读取查询的最大延迟阈值(us)。
- 取值范围:[-1, 9223372036854775807] us。从 V4.1.0 BP2 版本开始取值范围由 [0, 9223372036854775807] us 调整为 [-1, 9223372036854775807] us。
- 默认值:-1,表示不生效。从 V4.1.0 BP2 版本开始默认值由 5000000 调整为 -1。
- 特别说明:该变量仅适用于 OceanBase 数据库 MySQL 模式。
- ob_enable_index_direct_select
- 用途:用于设置是否允许用户直接查询索引表。
- 取值范围:0:不允许,1:允许
- 默认值:0
- regexp_time_limit
- 用途: 用于设置正则表达式匹配操作的最大执行时间限制,默认单位为毫秒。
- 取值范围:[0, 2147483647]
- 默认值:32
- 生效范围:Global
- ob_create_table_strict_mode
- 用途:用于设置建表的严格模式。
- 取值范围
- 1:表示会严格按照 Locality 建立副本,任何副本建立失败,则建表失败。
- 0:表示全类型副本至少有 1 个,Paxos 成员组副本达到多数,则建表成功。
- 默认值:0
- recyclebin
- 用途:用于设置是否开启回收站功能。
- 取值范围:
- OFF(0):表示不开启
- ON(1):表示开启,开启后,删除的表及其依赖对象将放置在回收站中
- 默认值:OFF
- ob_route_policy
- 用途:用于设置 OBServer 节点内部选择数据副本的路由策略。
- 取值范围:
- 1(READONLY_ZONE_FIRST):只读副本所在的 Zone 优先
- 2(ONLY_READONLY_ZONE):仅发送到只读副本所在的 Zone
- 3(UNMERGE_ZONE_FIRST):不在合并状态的副本所在的 Zone 优先
- 4(UNMERGE_FOLLOWER_FIRST):不在合并状态的 Follower 副本优先
- 5(COLUMN_STORE_ONLY):仅发送到列存副本
- 6(FORCE_READONLY_ZONE):所有的只读请求不会转发到非只读副本
- 默认值:1
- 特别说明:对于 V4.3.x 版本,该值从 V4.3.5 BP1 版本开始引入。
- ob_sql_work_area_percentage
- 用途:用于设置 SQL 工作区内存占整个租户内存百分比。
- 取值范围:[0, 100]
- 默认值:5
- 特别说明:工作区内存,是指 SQL 排序等阻塞性算子使用的内存,通过租户系统变量 ob_sql_work_area_percentage 控制,默认值为 5%,即 工作区内存 = 租户内存 * ob_sql_work_area_percentage(默认 5%)。如果请求并发量较大,且每个请求占用的工作区内存比较多,可能出现工作区内存不足的报错,经常出现的场景有 union、sort、group by 等。上述问题如果出现,可以通过适当调大系统变量来规避
- tx_isolation,transaction_isolation
- 用途:用于设置事务隔离级别。与系统变量 transaction_isolation 功能相同,设置其中任意一个即可。
- 取值范围:
- READ-COMMITTED:读已提交
- REPEATABLE-READ:可重复读
- SERIALIZABLE:可串行化
- 默认值:READ-COMMITTED