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

作者简介:

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

创建租户

方法一:OCP 创建

  1. 确认可分配资源

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

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;

需要关注的字段:

  • 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

合并

手动触发合并

## 不带租户则表示所有租户
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; 

物理恢复

可以参考官网

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

调整资源占用大小

调整 OBServer 的资源占用

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;

详情参照:

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。

实例启动

启动命令

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/admin/oceanbase/libcd /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;';

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/2970.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32玩转物联网实战篇:5.ESP8266 WIFI模块MQTT通信示例详解

1、准备开发板 开发板功能区分布图 开发板俯视图 2、实验讲解 在之前的章节中,已经讲解过了MQTT的通讯原理和组包过程,现在开始手把手的教大家用代码来实现连接MQTT平台以及数据的交互,实际上这篇文章已经拖更接近两年了,非常…

golang调用阿里通义千问的接口

有的项目可能需要用到直接外部调用阿里通义千问的接口。官方只有python和java的sdk。 其实golang简单的调用也非常简单,就是一个封装的http调用,下面是具体的代码。 注意提前申请apiKey. package tongyiimport ("bytes""context"…

《QT实用小工具·三十九》仿 Windows10 画图3D 的颜色选择器, 但更加强大

1、概述 源码放在文章末尾 该项目实现了仿 Windows10 画图3D 的颜色选择器,功能更加丰富更加强大。 项目部分代码如下所示: import QtQuick 2.15 import QtQuick.Controls 2.15 import QtQuick.Layouts 1.15 import QtGraphicalEffects 1.15Item {id…

【leetcode面试经典150题】72. 从前序与中序遍历序列构造二叉树(C++)

【leetcode面试经典150题】专栏系列将为准备暑期实习生以及秋招的同学们提高在面试时的经典面试算法题的思路和想法。本专栏将以一题多解和精简算法思路为主,题解使用C语言。(若有使用其他语言的同学也可了解题解思路,本质上语法内容一致&…

nginx超时相关参数验证.md

一、环境简介 IP地址角色192.168.1.16nginx192.168.1.18后端 1.nginx配置 upstream backend {server 192.168.1.18; }server {listen 80;location / {proxy_pass http://backend;}}2 1.18配置 1.18的配置也安装一个nginx&#xff0c;首页内容如下&#xff1a; <html>…

opencv绘制线段------c++

绘制线段 bool opencvTool::drawLines(std::string image_p, std::vector<cv::Point> points) {cv::Mat ima cv::imread(image_p.c_str()); // 读取图像&#xff0c;替换为你的图片路径 cv::Scalar red cv::Scalar(0, 0, 255); // Red color int thickness 2;// 遍…

面试遇到算法题:实现LRU缓存

请你设计并实现一个满足 LRU (最近最少使用) 缓存约束的数据结构。 这是一道大厂面试高频出现的算法题&#xff0c;难度为⭐️⭐️⭐️&#xff0c;属于中等&#xff0c;老铁们来一起看看这个题该怎么解&#xff1f; 1. 原题再现 没有废话&#xff0c;翠花&#xff0c;上酸菜&…

亚远景科技-什么是R.A.S.I.C角色职权矩阵

什么是 R.A.S.I.C角色职权矩阵 在流程定义过程中&#xff0c;亚远景科技推荐使用RASIC 矩阵。RASIC 矩阵是一个非常有用的管理方法。可以明确流程定义中的角色和其相关责任。 "RASIC" 是"Responsible" 、"Accountable" 、"Supportive"…

JS 添加数组元素( 4种方法 )

No.内容链接1Openlayers 【入门教程】 - 【源代码示例300】 2Leaflet 【入门教程】 - 【源代码图文示例 150】 3Cesium 【入门教程】 - 【源代码图文示例200】 4MapboxGL【入门教程】 - 【源代码图文示例150】 5前端就业宝典 【面试题详细答案 1000】 文章目录 一、四种…

Spring Boot 集成 EasyExcel 3.x

Spring Boot 集成 EasyExcel 3.x Spring Boot 集成 EasyExcel 3.x 本章节将介绍 Spring Boot 集成 EasyExcel&#xff08;优雅实现Excel导入导出&#xff09;。 &#x1f916; Spring Boot 2.x 实践案例&#xff08;代码仓库&#xff09; 介绍 EasyExcel 是一个基于 Java 的、…

npm详解:Node.js的包管理器

npm&#xff08;Node Package Manager&#xff09;是Node.js的包管理器&#xff0c;它允许您安装、更新、删除和发布Node.js软件包。npm是Node.js生态系统中非常重要的组成部分&#xff0c;它使得开发人员能够轻松共享和重用代码&#xff0c;从而提高了开发效率和代码质量。 在…

HZNUCTF -- web

HZNUCTF第五届校赛实践赛初赛 Web方向 WriteUp-CSDN博客 ezssti 下载文件 访问 /login 可由源代码中看到 Eval 函数 &#xff0c;可以任意命令执行 按照格式&#xff0c;可执行命令 POST &#xff1a;name{{.Eval "env"}} 可以得到flag &#xff08;尝试ls 只能列出…

「ChatGPT」掀起新一轮AI热潮!超越GPT-4 Turbo,商汤日日新大升级!

目录 拳打 GPT-4 Turbo &#xff0c;脚踢 DALLE 3 端侧大模型&#xff0c;唯快不破 AI 应用落地需要一个即插即用的大模型超市 并不存在 AI 这个行业&#xff0c;只有 AI行业&#xff0c;强调 AI 需要与传统产业合作&#xff0c;这种关系是结合与赋能&#xff0c;而不是颠覆…

java开发之路——用户管理中心_简单初始化

用户管理中心_简单初始化 (一) 初始化项目1. 使用 Ant Design Pro(现成的管理系统) 进行前端初始化2. 后端初始化三种初始化java项目 (二) 遇到的问题【问题1】Ant design pro页面打不开&#xff0c;一直在budiling控制台出现错误error-./src/components/index.ts【问题2】初始…

Tree-V2 实现 全选、反选

使用场景&#xff1a; 需要一个 tree 树形结构体&#xff0c;但是采用 普通的 tree &#xff0c;在数据量大的时候 会造成 tree 渲染的压力&#xff0c;尤其是在勾选的时候。 element ui plus 中 引入了 “Tree V2 虚拟化树形控件” 具体的内容可以 参考这里 <el-button …

《AI编程类工具之六——CodeWhisperer》

一.简介 官网:AI 代码生成器 – Amazon CodeWhisperer – AWS CodeWhisperer是亚马逊推出的一款实时AI编程助手,它基于机器学习技术,能够分析开发者在集成开发环境(IDE)中的注释和代码,并根据其内容生成多种代码建议。这款编程助手的一大特色是支持自然语言输入,开发者…

基于SSM的物业管理系统(含源码+sql+视频导入教程+文档+PPT)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 基于SSM的物业管理系统2拥有三种角色 管理员&#xff1a;用户管理、物业管理、房产信息管理、小区概况管理、开发商管理、收费标准管理、物业公司管理等 物业&#xff1a;住户管理、收费…

如何通过cURL库实现远程控制插座

如何通过cURL库实现远程控制插座呢&#xff1f; 本文描述了使用cURL库调用HTTP接口&#xff0c;实现控制插座&#xff0c;即插即用&#xff0c;先插入插座&#xff0c;再接电器&#xff0c;实现远程控制。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格…

udp/tcp错误总结

udp tcp——多进程 tcp——多线程 tcp——线程池 tcp——守护进程 &#x1f386;udp  ✨pthread_create 错误总结  ✨LockGuard错误总结  ✨服务端需要写成多线程  ✨客户端也需要写成多线程  ✨多线程调试工具 &#x1f386;tcp  ✨tcp独有调试工具——telnet  ✨Threa…

XGBoost原生接口和Sklearn接口参数详解

XGBoost原生接口和Sklearn接口参数详解 数据科学&#xff1a;Scipy、Scikit-Learn笔记超参数调优&#xff1a;网格搜索&#xff0c;贝叶斯优化&#xff08;optuna&#xff09;详解LightGBM原生接口和Sklearn接口参数详解XGBoost一、Sklearn风格接口xgboost.XGBRegressor参数一般…