作者简介:
花名:绪宁,OceanBase 数据库解决方案架构师
具体可以分配多少内存,可以通过【资源管理】查看各节点的剩余资源

2. 新建租户

3. 填写租户信息

zone 优先级主要是 primary_zone 设置 leader优先级,如果优先级全部相同,那么 leader 会打散到所有节点上。
1. 确认可分配资源
新租户可以分配的内存大小为 memory_limit - system_memory - sys 租户内存,CPU 数量为 cpu_count - sys 租户 cpu。
- # 查询参数
- show parameters where name in ('memory_limit','system_memory','cpu_count');
- # 查询 sys 租户资源
- select * from DBA_OB_UNIT_CONFIGS;
2. 创建租户
- # 创建资源规格,5C14G,日志40G,IOPS 10000000。
- create resource unit unit_1 max_cpu 5, min_cpu 5, memory_size '15G', log_disk_size '50G', max_iops 10000000;
- # 创建资源池,指定 资源规格以及 zone_list。
- create resource pool pool_1 unit = 'unit_1', unit_num = 1, zone_list = ('zone1','zone2','zone3');
- # 创建租户,指定副本数量3,primary_zone,以及资源池和白名单。
- create tenant perf replica_num = 3,primary_zone='RANDOM', resource_pool_list=('pool_1') set ob_tcp_invited_nodes='%';
3. 修改 root 用户密码
创建完租户,默认的 root 密码为空,如果需要可以修改密码。
- # 租户的 root 用户登陆后执行修改 sql
- set password for root=password('xxx');
主要有两种连接方式:
1. 通过 OBServer 直连(默认端口 2881)
mysql -h xxx.xxx.xxx.xxx -uroot@sys -P2881 -p -c -A oceanbase
2. 通过 OBProxy 连接(默认端口2883)
mysql -h xxx.xxx.xxx.xxx -uroot@sys#obdemo -P2883 -p -c -A oceanbase
使用 OBProxy 连接时,用户信息需要包括【用户名@租户名#集群名】;如果是 OBServer 连接,那么只需要包括【用户名@租户名】。
区别:
参数(parameter)可以控制集群的负载均衡、合并时间、合并方式、资源分配和模块开关等功能,主要针对集群、Zone、OBServer 和 租户级别进行配置。
参数分集群级别和租户级别,可以通过查询 SHOW PARAMETERS LIKE'max_syslog_file_count'; 中的scope 列来确定,cluster为集群级别,tenant为租户级别。
变量(variable)可以控制数据库系统的各种行为,如缓存大小、并发连接数等,主要是针对租户级别内 Global 和 Session 级别进行设置。
查看参数和变量
OBServer 参数 :
- # 方法一
- show parameters like '%enable_rebalance%';
- # 方法二
- show parameters where name in ('memstore_limit_percentage','freeze_trigger_percentage','writing_throttling_trigger_percentage');
- # 方法三
- select * from oceanbase.GV$OB_PARAMETERS where NAME in ('memstore_limit_percentage','freeze_trigger_percentage','writing_throttling_trigger_percentage');
OBProxy 参数:
show proxyconfig like '%query_digest_time_threshold%';
查看变量
show variables like '%timeout%';
修改参数和变量
要注意,这里的参数修改会自动变更到安装目录的 etc 下的配置文件,但是如果是 OBD 创建的集群,不会自动同步到 OBD 的配置文件中,如果后续需要使用 OBD 重启,那么需要手动修改 OBD 的配置,防止启动后配置有差异影响业务。
OBServer 参数 :
alter system set enable_rebalance=False;
OBProxy 参数:
alter proxyconfig set query_digest_time_threshold='101ms';
修改变量
- # 设置全局级别变量,当前 session 不生效,新 session 生效。
- set global ob_query_timeout=10000000;
- # 设置会话级别变量,当前 session 生效,其他 session 不生效。
- set session ob_query_timeout=10000000;
主动触发转储
- ## 不带租户则表示所有租户
- alter system minor freeze tenant=xxx;
查看进行中的转储任务
SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_PROGRESS WHERE TYPE='MINI_MERGE'\G;
需要关注的字段:
查看转储历史
SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_HISTORY WHERE TYPE='MINI_MERGE'\G
手动触发合并
- ## 不带租户则表示所有租户
- ALTER SYSTEM MAJOR FREEZE TENANT = xxx;
查看租户各个zone的合并过程
SELECT*FROM oceanbase.CDB_OB_ZONE_MAJOR_COMPACTION\G
查看所有租户的合并信息
SELECT*FROM oceanbase.CDB_OB_MAJOR_COMPACTION\G
查看合并历史
SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_HISTORY where type='MAJOR_MERGE' order by START_TIME desc limit 5\G
查看耗时超过 5s 的转储合并任务。
SELECT * FROM GV$OB_MERGE_INFO WHERE tenant_id=1002 AND (END_TIME-START_TIME)>5 LIMIT 10;
查看某张表的合并记录。
SELECT * FROM GV$OB_TABLET_COMPACTION_HISTORY WHERE TABLET_ID IN (SELECT TABLET_ID FROM oceanbase.CDB_OB_TABLE_LOCATIONS WHERE TABLE_NAME = 'sbtest1') ORDER BY START_TIME DESC;
查看转储次数以及内存阈值
select * from gv$ob_memstore;
查看转储配置
show parameters where name in ('memstore_limit_percentage','freeze_trigger_percentage','writing_throttling_trigger_percentage','memory_limit');
查看当前所有租户的备份任务
- select * from CDB_OB_BACKUP_TASKS\G
- SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS\G
查看历史备份任务
- SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY\G
- SELECT * FROM oceanbase.CDB_OB_BACKUP_TASK_HISTORY\G
查看备份路径信息
SELECT*FROM oceanbase.CDB_OB_BACKUP_PARAMETER\G
查看备份集的文件状态
SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_FILES
指定备份路径
ALTER SYSTEM SET DATA_BACKUP_DEST='data_backup_path' [TENANT = mysql_tenant];
启动备份
ALTER SYSTEM BACKUP DATABASE [TENANT = mysql_tenant]; // 系统租户发起则全部租户,业务租户发起则自己
停止备份
ALTER SYSTEM CANCEL BACKUP [TENANT = mysql_tenant];
强制停止备份
ALTER SYSTEM CANCEL BACKUP FORCE;
更改备份目的端。
一定要先停止备份任务,并且保证新的备份目的端所在的目录为空以后再更改
ALTER SYSTEM SET DATA_BACKUP_DEST='data_backup_path' [TENANT = mysql_tenant];
查看租户的归档模式
SELECT TENANT_NAME, LOG_MODE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_TYPE ='USER‘
查看 piece信息
SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG_PIECE_FILES\G
查看归档状态
SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG\G
查看归档历史
SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG_SUMMARY\G
查看归档参数
SELECT * FROM oceanbase.CDB_OB_ARCHIVE_DEST;
配置归档目的端
ALTER SYSTEM SET LOG_ARCHIVE_DEST='LOG_ARCHIVE_DEST' [TENANT = mysql_tenant];
设置归档目的端的状态
- # 启动
- ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='ENABLE' TENANT = tenant_name;
- # 暂停
- ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='DEFER' TENANT = tenant_name;
启动日志归档
ALTER SYSTEM ARCHIVELOG [TENANT = mysql_tenant];
停止日志归档
ALTER SYSTEM NOARCHIVELOG [TENANT = mysql_tenant];
更改归档目的端,跟更改备份目的端同理,一定要先关闭归档,再改目的端
强制取消数据备份+日志备份:
ALTER SYSTEM CANCEL ALL BACKUP FORCE;
可以参考官网
CPU扩缩容
注意:集群下的其他配置可能会影响该配置项的生效方式。建议在该配置项配置后,在 GV$OB_SERVERS 内部表中查看 CPU_CAPACITY 字段实际生效的值。若未动态生效,需要重启整个集群。
ALTER SYSTEM SET cpu_count=32;
内存扩缩容
- ALTER SYSTEM SET memory_limit='32G'; // 优先级最高
- 或者
- ALTER SYSTEM SET memory_limit_percentage='80';
缩容的话需要注意,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';
磁盘扩容
- ALTER SYSTEM SET datafile_size='80G'; // 优先级最高
- 或者
- ALTER SYSTEM SET datafile_disk_percentage=90;
磁盘缩容
只有单zone情况下不支持缩减磁盘空间,多zone情况下可以缩减磁盘空间;多zone的模式的话,可以先下线observer,然后再上线,上线时可以指定参数启动;
bin/observer -o "datafile_size='100G'"
举例:ALTER RESOURCE UNIT unit1 MAX_CPU 2, MEMORY_SIZE '5G';
语法:
- ALTER RESOURCE UNIT unit_name
- MEMORY_SIZE [=] 'size_value',
- MAX_CPU [=] cpu_num,
- [MIN_CPU [=] cpu_num,]
- [MAX_IOPS [=] iops_num,]
- [MIN_IOPS [=] iops_num,]
- [IOPS_WEIGHT [=]iopsweight,]
- [LOG_DISK_SIZE [=] 'size_value'];
手动收集
方法一:
- # 收集 test 库下的 test3 表
- call dbms_stats.gather_table_stats('test','test3');
- # 收集 test 下的所有表,并且并行度 128
- call dbms_stats.gather_schema_stats('test', degree=>128);
方法二:
- ALTER SYSTEM SET enable_sql_extension = true;
- ANALYZE TABLE test3 COMPUTE STATISTICS;
详情参照:
查看表的统计信息
select * from DBA_TAB_STATISTICS
查看
select * from oceanbase.GV$OB_PLAN_CACHE_PLAN_stat where query_sql like '%xx%';
清空缓存
1、清空指定的计划缓存。
ALTER SYSTEM FLUSH PLAN CACHE sql_id='xxxxxxxxxxx' global; // 不加 global 只会清理本地的plan cache
2、清空 aa、bb两个租户的所有计划缓存
ALTER SYSTEM FLUSH PLAN CACHE TENANT = 'aa','bb' global;
3、清空租户下面某个库的所有计划缓存
ALTER SYSTEM FLUSH PLAN CACHE databases='myob1' tenant='tenant1' GLOBAL;
修改方式
通过 ALTER SYSTEM SET enable_syslog_recycle=True;
相关参数
注意:关闭后实际还会有一个observer.log.wf,但以时间戳结尾的历史日志文件不会再有对应的wf文件,实现的小问题
启动命令
- export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/lib
-
- cd /home/admin/oceanbase && bin/observer
ALTER TENANT xxx PRIMARY_ZONE=RANDOM;
调大 unit
ALTER RESOURCE TENANT mysql001 UNIT_NUM =2;
调小 unit
unit group 可以通过 DBA_OB_UNITS 查询
方法一:随机删除 unit group
ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1;
方法二:指定 unit group 删除实现调小
ALTER RESOURCE TENANT mysql001 UNIT_NUM = 1 DELETE UNIT_GROUP =(1006);
查看执行状态
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE='ALTER_RESOURCE_TENANT_UNIT_NUM' AND TENANT_ID=1006;
确认迁移后的信息
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE UNIT_ID =1006;
租户 mq_t1 中 UNIT_ID = 1006 的 Unit 迁移到同 Zone 的另一个节点。
ALTER SYSTEM migrate unit =1006 destination ='xx.xx.xx.158:2882';
查看状态
SELECT * FROM oceanbase.DBA_OB_UNIT_JOBS WHERE JOB_TYPE ='MIGRATE_UNIT';
确认迁移后的信息
SELECT * FROM oceanbase.DBA_OB_UNITS WHERE UNIT_ID =1006;
修改
ALTER TENANT mq_t1 locality="F{1}@sa128_obv4_1,F{1}@sa128_obv4_2,F{1}@sa128_obv4_3";
查看状态
SELECT * FROM oceanbase.DBA_OB_TENANT_JOBS WHERE JOB_TYPE ='ALTER_TENANT_LOCALITY';
确认修改结果
SELECT TENANT_ID,TENANT_NAME,TENANT_TYPE,PRIMARY_ZONE,LOCALITY FROM oceanbase.DBA_OB_TENANTS;
切换rs leader
alter system switch rootservice leader zone='z1';
查看 RS 任务
select * from __all_rootservice_event_history order by 1 desc limit 10;
命令
alter system switch replica leader ls=1 server='$z3_ip:$z3_port' tenant='sys';
查询leader的位置
select * from __all_virtual_log_stat where tenant_id=1;
开启后observer show create table输出会完全兼容mysql的语法,建议设置为租户级别。
alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';