• 【OceanBase系列】—— 常用运维操作(备忘)


    作者简介:

    花名:绪宁,OceanBase 数据库解决方案架构师

    创建租户

    方法一:OCP 创建

    1. 确认可分配资源

    具体可以分配多少内存,可以通过【资源管理】查看各节点的剩余资源

    2. 新建租户

    3. 填写租户信息

    zone 优先级主要是 primary_zone 设置 leader优先级,如果优先级全部相同,那么 leader 会打散到所有节点上。

    方法二:手动创建

    1. 确认可分配资源

    新租户可以分配的内存大小为 memory_limit - system_memory - sys 租户内存,CPU 数量为 cpu_count - sys 租户 cpu。

    1. # 查询参数
    2. show parameters where name in ('memory_limit','system_memory','cpu_count');
    3. # 查询 sys 租户资源
    4. select * from DBA_OB_UNIT_CONFIGS;

    2. 创建租户

    1. # 创建资源规格,5C14G,日志40G,IOPS 10000000
    2. create resource unit unit_1 max_cpu 5, min_cpu 5, memory_size '15G', log_disk_size '50G', max_iops 10000000;
    3. # 创建资源池,指定 资源规格以及 zone_list。
    4. create resource pool pool_1 unit = 'unit_1', unit_num = 1, zone_list = ('zone1','zone2','zone3');
    5. # 创建租户,指定副本数量3,primary_zone,以及资源池和白名单。
    6. create tenant perf replica_num = 3,primary_zone='RANDOM', resource_pool_list=('pool_1') set ob_tcp_invited_nodes='%';

    3. 修改 root 用户密码

    创建完租户,默认的 root 密码为空,如果需要可以修改密码。

    1. # 租户的 root 用户登陆后执行修改 sql
    2. 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 参数 :

    1. # 方法一
    2. show parameters like '%enable_rebalance%';
    3. # 方法二
    4. show parameters where name in ('memstore_limit_percentage','freeze_trigger_percentage','writing_throttling_trigger_percentage');
    5. # 方法三
    6. 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';

    修改变量

    1. # 设置全局级别变量,当前 session 不生效,新 session 生效。
    2. set global ob_query_timeout=10000000;
    3. # 设置会话级别变量,当前 session 生效,其他 session 不生效。
    4. set session ob_query_timeout=10000000;

    转储合并

    转储

    主动触发转储

    1. ## 不带租户则表示所有租户
    2. alter system minor freeze tenant=xxx;

    查看进行中的转储任务

    SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_PROGRESS WHERE TYPE='MINI_MERGE'\G;

    需要关注的字段:

    • TYPE:表示 Compaction 任务的类型。
      • MINOR_MERGE:表示 Minor,多个 Mini SSTable 合成一个 Minor SSTable。
      • MINI_MERGE:表示转储,冻结 MemTable 通过转储变成 Mini SSTable。
      • MEDIUM_MERGE:表示分区级合并。
      • MAJOR_MERGE:表示合并。
      • META_MAJOR_MERGE :Buffer 表转储。
    • STATUS:表示任务状态。任务正在运行中时,该字段值为 NODE_RUNNING。
    • DATA_SIZE:表示需要转储的总数据量。
    • UNFINISHED_DATA_SIZE:表示转储未完成的数据量。
    • ESTIMATED_FINISH_TIME:表示预计完成时间。

    查看转储历史

    SELECT * FROM oceanbase.GV$OB_TABLET_COMPACTION_HISTORY WHERE TYPE='MINI_MERGE'\G

    合并

    手动触发合并

    1. ## 不带租户则表示所有租户
    2. 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');
    

    备份归档

    备份

    查看备份信息

    查看当前所有租户的备份任务

    1. select * from CDB_OB_BACKUP_TASKS\G
    2. SELECT * FROM oceanbase.CDB_OB_BACKUP_JOBS\G

    查看历史备份任务

    1. SELECT * FROM oceanbase.CDB_OB_BACKUP_JOB_HISTORY\G
    2. 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];

    设置归档目的端的状态

    1. # 启动
    2. ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE='ENABLE' TENANT = tenant_name;
    3. # 暂停
    4. 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; 

    物理恢复

    可以参考官网

    OceanBase分布式数据库-海量数据 笔笔算数

    调整资源占用大小

    调整 OBServer 的资源占用

    CPU扩缩容

    注意:集群下的其他配置可能会影响该配置项的生效方式。建议在该配置项配置后,在 GV$OB_SERVERS 内部表中查看 CPU_CAPACITY 字段实际生效的值。若未动态生效,需要重启整个集群。

    ALTER SYSTEM SET cpu_count=32; 

    内存扩缩容

    1. ALTER SYSTEM SET memory_limit='32G'; // 优先级最高
    2. 或者
    3. 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';

    磁盘扩容

    1. ALTER SYSTEM SET datafile_size='80G'; // 优先级最高
    2. 或者
    3. 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';

    语法:

    1. ALTER RESOURCE UNIT unit_name
    2. MEMORY_SIZE [=] 'size_value',
    3. MAX_CPU [=] cpu_num,
    4. [MIN_CPU [=] cpu_num,]
    5. [MAX_IOPS [=] iops_num,]
    6. [MIN_IOPS [=] iops_num,]
    7. [IOPS_WEIGHT [=]iopsweight,]
    8. [LOG_DISK_SIZE [=] 'size_value'];

    统计信息

    手动收集

    方法一:

    1. # 收集 test 库下的 test3
    2. call dbms_stats.gather_table_stats('test','test3');
    3. # 收集 test 下的所有表,并且并行度 128
    4. call dbms_stats.gather_schema_stats('test', degree=>128);

    方法二:

    1. ALTER SYSTEM SET enable_sql_extension = true;
    2. ANALYZE TABLE test3 COMPUTE STATISTICS;

    详情参照:

    OceanBase分布式数据库-海量数据 笔笔算数

    查看表的统计信息

    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;

    相关参数

    • enable_syslog_wf控制是否生成独立的wf结尾的日志,wf指warn级别以上的日志,关闭这个效果是只存在observer.log了。

    注意:关闭后实际还会有一个observer.log.wf,但以时间戳结尾的历史日志文件不会再有对应的wf文件,实现的小问题

    • max_syslog_file_count:控制的磁盘里历史日志的最大保留数量。
    • enable_syslog_recycle:用于设置是否开启回收系统日志,仅当 max_syslog_file_count设置为非 0 正数时生效。
    • enable_async_syslog:是否启用异步写日志功能,默认为 True。关闭后将使用同步方式写日志,可以保证 observer 宕机前写完所有日志,但性能较差,不建议关闭。
    • syslog_io_bandwidth_limit:日志限流量,默认为 30M。
    • syslog_level:打印的日志的最低级别,日志级别见上文,默认为 WDIAG。

    实例启动

    启动命令

    1. export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/lib
    2. cd /home/admin/oceanbase && bin/observer

    配置调整

    调整租户配置

    修改 primary_zone

    ALTER TENANT xxx PRIMARY_ZONE=RANDOM;

    修改 unit_num

    调大 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;

    迁移 unit

    租户 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;

    修改 Locality

    修改

    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 切换

    切换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;

    OBProxy

    开启后observer show create table输出会完全兼容mysql的语法,建议设置为租户级别。

    alter proxyconfig set init_sql='set _show_ddl_in_compat_mode = 1;';
  • 相关阅读:
    Linux查看程序和动态库依赖的动态库
    室内定位之CSI指纹定位
    深入理解Java类加载机制,再也不用死记硬背了
    一文看懂分布式存储架构
    JavaScript系列之剩余参数
    房产交易软件开发
    Python 生成器 (通俗讲解)
    2023-09-13 mysql-代号m-insert select语句注册-问题分析
    D. Meta-set #824 div2
    [论文阅读] Diverse Image-to-Image Translation via Disentangled Representations
  • 原文地址:https://blog.csdn.net/weixin_40449300/article/details/138149237