《DBA从入门到实践》教程于3月27日正式开启。在此阶段我们会整理教程期间大家的常见问题在此,便于大家更好地进行学习。
活动时间:3月27日-5月29日 19:30-20:00
:报名预约教程:OceanBase 社区
频率:1周/次
课程安排
3月27日 OceanBase 数据库概述
4月10日 OceanBase 社区版的安装和部署
4月17日 测试 OceanBase 数据库
4月24日 OceanBase 数据库的迁移和同步
5月8日 运维 OceanBase 数据库
5月15日 使用 OceanBase 社区版进行业务开发
5月22日 OceanBase 数据库的诊断和调优
5月29日 OceanBase 认证体系和用户实践
——————————————————
资料库
学习过程中如有问题,请在问答发帖进行交流:https://ask.oceanbase.com/
查看教程回放及完成课后习题:OceanBase 社区
阅读源码 :https://github.com/oceanbase/oceanbase
博客技术专题:OceanBase 社区
OceanBase 快速安装、部署:OceanBase 社区
——————————————————
《DBA从入门到实践》第一期:OceanBase 数据库概述直播答疑
第一期的学习笔记:
第一章 OceanBase 数据库概述.pdf (991.6 KB)
1、有供学员练习的云环境么?收费不离谱就行
答:可以直接采购云服务器进行部署,最低 2C8G 即可部署单机版,机器规格可以参考https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000508277
2、oracle 主要 AP 加强 TP?
答:视频中说的是 Oracle 原本是 TP 类的数据库,正在逐步补齐 AP 方面的能力。
3、搭个测试环境需要几台机器
答:如果只是功能测试,不需要高可用,一台就够了。如果测试的内容里面有高可用,机器又不多,推荐用 3 zone 3 节点的环境。
4、AP 性能怎么样?
答:OB 是 HTAP 数据库,去年的年度发布会上和 CK 一个跑了一个 ClickBench,性能是略强于 AP 数据库 Clickhouse。OB 这几年正在逐步提升 AP 性能,预计在今年 9 月份发布的 4.3.3 版本上,AP 性能会获得一个较大的提升。
5、支持 pg 迁移到 OB 吗?
答:支持的,不过有版本限制,目前支持的 PostgreSQL 数据库版本为 V10.x 和 V12.x。可以在 OB 的官网上查到。 数据库的数据至 OceanBase 社区版具体操作部署可参考:OceanBase分布式数据库-海量数据 笔笔算数
6、支持 mogodb 迁移吗?
答:暂时还不支持。如果有真实需求的话,可以在 github 上提出相关的 issue,我们会考虑在 OMS 接下来的版本中进行支持。
7、支持k8s的方式部署不?
答:支持的,可以通过部署官方工具 ob-operator 来管理 K8s 中的 OceanBase,已经实现了 OceanBase 集群租户备份恢复的所有运维功能,另外还可以做到故障自动恢复,可以参考我们 github 上的项目 GitHub - oceanbase/ob-operator: Kubernetes operator for OceanBase
8、多个租户,在多个业务都有问题的情况下,是不是也要一个租户一个租户的排查问题?
答:OB 里面一个租户对应一个 MySQL 实例,一个业务一般只对应一个租户,所以如果只有一个业务出错,只需要排查对应租户的问题就好了。租户之间是数据是隔离的,一个租户的问题不会影响到其他租户。当多个租户都遇到问题时,通常需要逐个租户进行问题排查。
9、ob 的压缩率比 innodb 的压缩率对比如何呢?
答:OceanBase 的压缩算法和 InnoDB(MySQL 存储引擎)的压缩机制有所不同,因此它们的压缩率也会有所差异,一般是 InnoDB的3~4倍,如果数据类型、表结构等重合度较高,会更高一些。
10、分区表是否需要指定分区键?
答:分区表需要指定分区键。分区键是一个或多个列的集合,用于决定分区表中的每行数据应存储在哪个分区中。在创建分区表时,必须定义分区键来划分数据,这样可以提高大数据量时的查询和管理效率。例如,可以根据时间戳、地理位置或其他业务相关的字段来设置分区键,以便更好地管理和查询数据。
11、同城和异地对带宽,有啥要求?另外 3 zone 3 副本,同城和异地断网了,是不是提供不了服务了,有啥方案没?
答:对于OceanBase数据库,同城和异地部署对带宽的要求是不同的:
- 同城跨机房、跨城 :要求万兆光纤接入,并且采用万兆光纤交换机进行连接。同城网络延迟要求不超过 2 ms。
- 跨城部署 :虽然带宽要求也较高,但更重要的是要考虑网络延迟。网络延迟一般要求不超过10毫秒。
两地三中心的方式,异地之间断网,有两个 zone 的 region 因为多数派还在,所以依然可以对外提供服务。
12、列存是4.3才有的吗?
答:3 月底即将要发布的 4.3.0 会支持列存,会支持在建表的时候选择把这张表创建成行存表还是列存表。而且我们还会在后续的版本里面,支持列存副本,比如在第一期视频中提到的 HTAP 读写分离能力里那个用于 AP 分析的只有只读副本的 zone,就可以把只读副本替换成列存只读副本。
13、搭建单机版使用最少的资源是多少?
答:2C8G。
14、有可视化界面吗?
答:视频中提到的 OCP、OMS、ODC 均有可视化白屏界面。OBD 在部署过程中有白屏界面,但 OBD 需要通过黑屏进行运维。
15、OB目前最大的集群是多大?
答:个人了解到的最大规模的 OB 集群,是蚂蚁集团的一个历史库,集群规模已经在 9PB 左右了。OceanBase 支持水平扩展,是可以满足用户海量存储的需求的。
16、OB什么时候能支持全文索引?
答:全文索引主要是用来查找文本数据里面的关键词,因为提出这个需求的用户比较多,所以我们去年就已经把全文索引提上日程了。
全文索引会在今年 5 月份发布的 4.3.1 版本里支持。
17、oceanbase 有类似 Oracle startup shutdown 之类的启停吗?
答:有的,可以通过一个叫 obshell 的本地集群命令行工具实现对集群的运维。参见 obshell 官网文档:OceanBase分布式数据库-海量数据 笔笔算数
18、OB 的 jdbc 支持 jdk1.7 吗
答:JDK 版本要求 1.8 及以上。详见:OceanBase分布式数据库-海量数据 笔笔算数 和 OceanBase分布式数据库-海量数据 笔笔算数
19、OMS啥时候支持mysql到mysql?
答:目前还没有规划支持,如果有需求,建议到 github 提 issue:https://github.com/oceanbase/oceanbase/issues
20、ODC 支持 MySQL 的数据归档?是免费的?
答:是免费的,而且 ODC 的代码也开源了。支持从 MySQL 归档到 MySQL,也支持从 ob 归档到 ob,还支持 ob 和 mysql 之间相互归档。
21.自动历史归档功能,生产表是否存在高水位性能问题?
答:OB 企业版的 Oracle 模式,只是兼容了 Oracle 的语法,内核的实现和 Oracle 的实现方式不同,所以不存在 Oracle 的高水位性能问题。OB 的社区版也只是兼容了 MySQL 的语法,并没有使用 MySQL 的源码。
22、ODC 是不是只支持企业版,社区版不支持?
答:都支持,ODC 不区分社区版和企业版,代码也是开源的。
23、OAT 和 OBD 有什么区别?
答:OAT 是 OceanBase 企业版支持的管理者工具,用于用于安装和管理企业版生态产品和组件。OBD 和 OCP 均可以为社区版提供的安装部署和运维管理集群的功能。
24、OceanBase 最多能支持多少 zone ,多少 observer,如果一个 zone 挂了,多久能恢复?
答:zone 和 observer 都没有理论上的上线,zone 越多,副本数越多,可用性就越高,但成本也越高。一般对可用性要求极高的场景,例如蚂蚁集团的主站,就是三地五中心,五 zone 五副本。目前金融机构的客户,个人了解到的有部署过 7 个 zone 的集群。如果是多 zone 的集群(例如三 zone 或者五 zone),挂掉一个 zone,8 秒内可恢复对外提供服务(RTO < 8s)。
25、3 zone 如果有挂了 2 个 zone 会有啥影响
答:OceanBase 的高可用是基于 paxos 实现的,当有多数 zone 不可用时,集群会进入不可用状态。
26、副本是随机分布还是需要自己指定?
答:创建租户时可以通过指定各个 zone 的优先级来配置副本的分布规则,例如可以通过 CREATE TENANT IF NOT EXISTS test_tenant PRIMARY_ZONE=‘zone1;zone2,zone3’…; 创建一个租户,租户的副本会被分布到 zone1、zone2、zone3 三个 zone 内,三个 zone 的优先级是:zone1 > zone2 = zone3(分号表示大于,逗号表示等于),所以这个租户的所有分区的 leader 副本会被分布到 zone1 中,follower 副本会被分布到 zone2 和 zone3 中。如果创建租户时未指定 Primary Zone,则默认取值为 RANDOM(随机分配)。
27、倒排索引和全文索引是一个东西么?
答:倒排索引是一种特定的数据结构,它主要用于快速检索文档中出现的词汇。全文索引是数据库中用于实现全文搜索的一种索引类型,它通常采用的就是倒排索引技术。因此,可以说全文索引是一种功能或服务,而倒排索引是实现全文索引的一个关键技术手段。
28、ob-oracle 模式支持创建外键吗?
答:OB 的 MySQL 模式和 Oracle 模式均支持外键功能。
29、是否可以不同租户,实现不同时区?
答:可以的,详见:OceanBase分布式数据库-海量数据 笔笔算数
30、ap 性能追平 starrocks?
答:在直播答疑时顺嘴提到的一个对 OB 未来 AP 能力的期待,暂时还只是一个美好的愿望。也许不久后就能实现?
31、obdiag 有开源的吗?这个部署到生产上,有什么资源和服务器环境的要求?是否可以检查企业版的ob集群?
答:已代码开源,需要在 Linux 环境上部署,基本不占资源。对社区版 OB、企业版 OB 通用。详见:OceanBase分布式数据库-海量数据 笔笔算数
——————————————————————————————————————————
第二期 :OceanBase 社区版的安装和部署
1、OBD和OCP推荐用哪个部署呢?
答:测试环境 二者均可以,对运维有要求或者生产环境,建议是下载OCP云平台安装包,内置有OBD,通过执行bash install.sh 安装obd 后, obd web 白屏部署OCP ,再通过OCP部署OB集群。
2、OBD部署使用三台机器行吗?没有中控机
答:可以的,OBD本身占用资源比较少,但是当OBD所在节点机器出现问题时,可能OBD也会失去管理能力。
3、windows电脑可以安装么?
答:windows本身直接安装是不行的,但是在windows上可以做虚拟机或用docker部署。详参:快速上手
4、支持open java 和oracle java吗?
答:我们在OBD V2.7.0 版本目前已经发布了,在安装过程中,会自动安装java,使用的是open gdk,而且其他的一些生态组件也基本上用的open gdk。
5、OBD部署失败后,环境怎么清理干净重新安装?
答:可以直接用OBD命令销毁:obd cluster destory 部署名称 (部署名称可以通过obd cluster list获取),注意 destory会卸载部署服务并清理数据,但不会删除obd中部署名称记录,即obd cluster lis 仍然能见到这个部署名称,状态为destoryed,如果想删除该记录,可以 cd ~/.obd/cluster ; rm -rf 对应的部署名称目录。
6、生产环境怎么规划得数据和日志磁盘大小呢?
答:部署环境有两个参数来控制磁盘大小,数据盘(datafile_size)和日志盘(log_disk_size),数据盘大小主要取决于业务量规划。如果数据量暂时不确定,后续可能要扩容,并且服务器资源不充足,这种情况下可以做逻辑卷,先规划一个可行的数据盘资源,后续如果数据盘资源不够了,再通过逻辑卷进行磁盘扩容,这样就不需要后续服务器扩容这种方式去请求资源了。日志盘内存主要取决于memory_limit内存参数的大小,大约在memory limit的3~4倍就足够了。
7、OCP单独部署需要多大的磁盘?
答:OCP主要是监控数据占用比较大,因此磁盘容量受监控管理的集群数量影响,具体可以参看:
https://www.oceanbase.com/docs/common-ocp-1000000000585170
8、OCP部署OB能用一台机器吗?
答:可以,但不推荐,限制比较多。
1)OCP必须和自己的metadb分2个节点部署,因为OCP部署OB时,会检测节点是否存在observer进程,否则无法部署OB。
2)即使OCP和metadb分开部署,OCP本身是也需要使用一定内存和CPU资源,部署的OB可能会受到资源影响,同时我们建议 OB使用独立的服务器资源(除了对obproxy/obd这种对资源占用不高的服务可以混部)。
3)OCP和OB混部,如果节点故障,OCP无法使用,也无法通过OCP的历史监控、告警信息进行追溯。
9、怎么看当前什么版本是不是LTS版本?
答:官网 Release Notes 有说明。目前4.2.1是LTS版本,推荐大家使用4.2.1的最新版本。
10、如果 OceanBase 3节点集群节点宕机了,机器开机后如何启动呢?
答:
1)OBD 部署的集群场景,可以obd cluster restart 部署名称。
2)OCP部署的集群场景,OCP一般是OBD 部署的,也是可以obd cluster restart 部署名称 重启OCP服务,再登录OCP 重启部署的OB。
3)docker部署的OCP 场景,需要先重启docker上OCP的容器,再登录OCP 重启部署的OB。
11、OCP社区版部署的MetaDB是用Docke吗?
答:不是,OCP可以分为ocp-server服务和metadb数据库组成,ocp-server可以使用Docker,metadb仍然是本地物理机上部署。
12、OBProxy VIP是做什么的?生产需要配置吗?
答:社区版的OBProxy没提供 VIP(Virtual IP) 服务,需要用户搭建负载服务,例如F5. 通过连接OBProxy代理进行数据库访问。生产环境建议配置,OBProxy是多节点无状态服务,本身不具备故障后业务迁移其他OBProxy节点能力,如果业务连接的OBProxy服务故障,需要业务层去连接其他正常的OBProxy服务,此时需要通过负载服务进行漂移,实现业务高可用。
13、OCP支持部署单节点吗?
答:支持,OCP当前界面上是有两种部署的模式,一个叫做单机集中式部署,一个叫做分布式集群。
14、F5是否代替OBProxy?
答:不可以。F5 不是代替 OBProxy 的,在OceanBase的架构中,F5通常被用作负载均衡器,它可以在网络层面对流量进行分发,将客户端的请求路由到适当的OBProxy实例。OBProxy是OceanBase数据库的接入层,负责将用户的请求转发到合适的OceanBase实例。
——————————————————————————————————————————
第三期 :测试 OceanBase 数据库
1、高压缩会不会影响性能?
答:OceanBase 自研了一套对数据库进行行列混存编码的压缩方法 (encoding),使用列级别的字典、差值、前缀等编码算法,在通用压缩算法之前对数据进行编码压缩,可以在不影响数据读写性能的同时,显著提高数据压缩率,帮助用户大大降低存储成本。
参考:OceanBase 社区
2、能说一下rto在什么资源下测试结果小于8s?
答:主要需要保证集群可以正常选主,关注机器间的网络时延为ms级别的延迟以及磁盘可以正常写入。
3、arm架构比x86性能相差多少?
答:arm性能一般在x86的70%-80%左右。
4、为啥iops需要3万以上,一般云环境无法私有化部署?
答:OceanBase数据库一般要求部署的磁盘为ssd,保证集群在高并发写入时,磁盘不会成为影响稳定性因素以及性能的瓶颈。
5、OB列存发布了吗?
答:V4.3.0_CE_BETA版本已经发布了,在官网的下载中心和github可以下载。
6、FIO 是不是比较靠谱?
答:在控制 IOPS 资源隔离前,需要进行磁盘性能校准,可以使用FIO工具,参考:OceanBase分布式数据库-海量数据 笔笔算数
7、OceanBase 对于频繁update\delete操作的表,在每日增量合并后数据空洞很大,这个有没有办法规避?
答:可以尝试对空洞较大的表强制执行全量合并,参考https://open.oceanbase.com/blog/2393832960
——————————————————————————————————————————
第四期 :OceanBase 数据库的迁移和同步
1、ob的分区类型比mysql多好几种是什么考虑或者原因?
答:分区类型多,可以让用户更灵活的创建分区表,这样对于分布式数据库创建分区表,将分区打散有很大的帮助,避免热点等问题
2、支持双向同步吗,正切(迁移)反切(回滚)?
答:支持的,同步完成之后,可以再反向增量,oceanbase与mysql之间还可以搭建容灾双活
3、在CentOS7中,可以部署OMS吗?不用docker
答:目前只能在docker中部署
4、两台实体机能搭建 OceanBase 集群吗?
答:这种是可以的,但是没有了高可用,任何一台机器故障都会导致集群不可用
5、全量迁移也是抽的增量日志去实现的吗?
答:不是,全量迁移是直接读取源端的表
6、集群zone数量必须是大于等于三的奇数吗?
答:这个是受分布式一致性协议限制,必须组成多数派,可以具体了解下raft或者paxos协议
7、容灾双活的话,对地域和网络有要求吗?实际应用场景应该注意什么?
答:一般会要求两个地域距离近一些,网络最好是专线,主要看业务对延迟的要求,延迟也是受网络影响,具体注意事项可以参考官网的介绍:OceanBase分布式数据库-海量数据 笔笔算数
8、平稳迁移与快速迁移的区别?适用场景?
答:区别就是速度的快慢,快速迁移对资源的消耗会大一些
9、索引后置 和 不点索引后置, 哪个更推荐?
答:看实际情况,索引在创建表的时候就创建好的话,写入速度肯定会比没有索引的表慢,如果是大表迁移,一般建议索引后置
10、调优都是动态修改?
答:大多数都是动态可修改的,不需要重启
11、创建binlog服务sql命令的用户名、密码不用是加密后的吧?
答:使用命令创建binlog服务时指定用户名密码,不用加密
12**、OB哪个版本支持obloader导入mysqldump备份的cvs文件?**
答:OB版本都是支持导入csv文件的,只要格式满足要求
13、并行导入是否支持一张表并行导入?
答:支持的
14、旁路导入中间如果出现问题,是需要清理已经导入的部分数据,还是会自动类似断点续传接着导入不丢数据?
答:需要清空已导入的数据,重新导入,不支持断点续传,不过这块还在优化中
15、clob blob 大字段表一般怎么迁移?
答:用OMS就可以迁移
16、如何找OMS调优时的组ID?
答:打开对应的迁移链路,查看有上交的组件监控,进去之后就可以看到各个组件的ID
17、obloader 脱敏是功能么 还是需要自己设置什么?
答:可以通过预处理函数进行脱敏,有个mask的函数,参考:OceanBase分布式数据库-海量数据 笔笔算数
18、视图、触发器、存储过程怎么用脚本迁移?
答:视图支持,触发器和存储过程在源端导出sql命令,在目标端手动创建
19、非旁路导入是否支持断点续传?
答:支持的,OMS支持断点续传
20、社区版OMS支持MYSQL同步到MYSQL吗?
答:不支持
——————————————————————————————————————————
第五期:运维 OceanBase 数据库
1、OCP是企业版还是社区版?
答:OCP有企业版和社区版,社区版是免费使用,暂未开源,但ocp-express是开源的,它是社区版OCP的精简版,不支持核心运维功能,例如部署、扩容、升级等,只具备基础管理和监控能力。OCP商业版本和社区版的核心运维功能差别不是很大,能满足上线生产的运维要求。
2、如果非首次全量备份,发起备份时,刚好还在进行合并操作。那ocp是等待?还是报错退出?等待的话会等多久嘞?
答:备份任务会启动,但只有合并完成后,备份才能完成,等待时间取决于合并完成时间。
3、3.x 版本不支持 oss 存储吗 ?
答:OB3.x 版本支持 oss 存储,同时也同步大家一下,继2024年6月30日后就3.x版本就不再发版维护了,建议大家迁移到4.x版本。
4、不支持直接扩容的话,如果数据盘满了,生产处理建议?
答:
- 正常情况下,磁盘是按照总空间80%预占用的,如果出现磁盘满的情况,可以调整参数datafile_disk_percentag把百分比调大,保证正常运行更长时间。
- 如果条件允许的话,可以考虑删除部分数据降低磁盘使用率。
- 如果磁盘做过逻辑卷,可以考虑直接扩容磁盘,再调整datafile_disk参数扩大数据盘空间。
为了保证生产环境数据的高可用,建议大家对数据进行备份或者做主备库,在以上情况,可以避免数据丢失或者影响业务运行。
5、OCP 接管obproxy集群时,需要OCP上有已部署的obproxy么?
答:当前版本是这样的。
6、OBv421是否可在线升级到v4.3?
答:暂不支持,可以关注 Release Note 中的升级说明。OB4.2.1.0-4.2.1BP2是可以升级到OB4.3的,4.2.1BP2之后的版本暂不支持,后续会支持。
7、备份一半底层存储介质出问题,备份任务是一直在还是会自动检测发现问题此次备份失败?
答:存储介质出问题后,日志归档会断流中断。介质恢复正常后,需要人为的去OCP上点击启动日志备份。
8、420建议升级到421吗?
答:421是LTS版本,建议使用。
9、数量很大,人为发起多次备份间隔发起很短是并行还是串行?
答:备份是租户级别备份,并行进行。
10、4.3稳定版啥时候出
答:GA版本预计是V4.3.3,9月底发布。
——————————————————————————————————————————
第六期:使用 OceanBase 社区版进行业务开发
1、分区数量8192,是每张表都可以这么多,还是租户下所有表的分区总和不超过8192?
答:分区数量8192指单个表最多支持创建的分区个数,即每张表最多可以有8192个分区。4.x版本的OB,在租户、OBServer、集群的维度上,没有分区数的限制,但是创建很多分区的时候,需要考虑资源因素:比如每个 OBServer 节点的分区副本数可根据租户内存大小来预估,1G 内存约支持约 2 万 tablet。
2、账号一级分区,卡号二级分区,只用卡号查性能如何呢?
答:查询性能会受到分区键的影响。当您只使用卡号进行查询时,数据库需要首先确定包含该卡号的二级分区所在的一级分区,然后在该一级分区内的所有二级分区中查找匹配的卡号。这种查询方式可能不会直接利用到一级分区的优势,因为它需要扫描多个二级分区。
为了提高只使用卡号查询的性能,您可以考虑以下几点:
- 优化二级分区键 :确保卡号作为二级分区键的设计能够有效地将数据分散到不同的二级分区中,这样可以减少查询时需要扫描的数据量。
- 索引 :在卡号列上创建索引,以便快速定位到包含所需卡号的记录。索引可以显著提高查询性能,尤其是在数据量较大时。
- 查询优化 :使用合适的查询优化技术,如分区剪枝(partition pruning),可以在查询时减少不必要的分区扫描。
- 分区策略 :根据业务需求和查询模式,重新评估分区策略。如果卡号查询非常频繁,可能需要重新考虑是否将卡号作为一级分区键,或者采用其他分区策略来更好地支持这种查询模式。
3、全局本地索引,与全局索引差异有多少呢?
答:索引分了全局索引、本地索引;全局索引还可以分全局分区索引、全局非分区索引;针对分区表来说,本地索引和全局索引适用的场景不同,没有绝对意义上的优劣之分:
全局索引和本地索引的区别在于:全局索引的索引结构并不跟主表的分片信息一一对应,它们数据的分片位置信息是各自独立的
- 如果查询条件带了分区键的话,能够利用分区裁剪定位到更少的分区进行查询,这时候使用本地索引效果更好;
- 如果主表是分区表,但是索引键不包含主表分区键的场景。这种场景更适合用全局索引。如果使用本地索引,由于某一个索引键值在所有分区的本地索引上都可能存在,任何索引扫描都必须在索引的所有的分区上都做一遍,否则就造成数据遗漏。这会导致索引扫描效率低下,带来资源浪费。对于全局索引来说,可以为索引的数据指定自己的分区方式,并且索引的分区键一定是索引键的子集,因此可以很容易解决这个问题。
- 由于本地索引是创建在数据分片内部,因此无法保证索引键值的全局唯一性。如果需要保证索引键满足唯一性约束,并且索引键不包含主表分区键信息的场景。这种情况下,由于本地索引自身的唯一性缺陷,只能选择全局索引。
4、索引用不同纬度的分区,回表的时候会剪裁吗?
答:在OceanBase数据库中,索引和分区表的设计可以支持分区裁剪,这是一种优化技术,用于避免访问无关的分区,从而提高查询效率。当使用索引进行查询时,如果查询条件中包含了分区键,优化器可以利用这些信息来确定只需要访问哪些分区,从而实现分区裁剪。
对于回表操作,即当查询需要的数据不仅存在于索引中,还需要从主表中获取时,分区裁剪同样适用。如果回表操作涉及的分区键在查询条件中被指定,那么优化器可以裁剪掉那些不需要访问的分区,只对必要的分区进行回表操作。
例如,如果有一个分区表,其分区键是col1,并且有一个局部索引基于col1,那么在执行类似SELECT * FROM tbl WHERE col1 = 1的查询时,优化器可以确定只需要访问包含col1 = 1数据的分区,而忽略其他分区。即使这个查询需要回表来获取索引中不包含的列,优化器仍然会执行分区裁剪,只对必要的分区进行回表操作。
总结来说,索引使用不同维度的分区时,回表操作同样可以受益于分区裁剪,前提是查询条件中包含了分区键信息。这样可以显著减少I/O操作和提高查询性能。
5、序列和自增列经常出现跳变的原因是什么?是什么原理?
答:序列和自增列在OceanBase数据库中出现跳变的原因主要与以下几个因素有关:
- 事务失败 :如果在事务执行过程中发生错误导致事务回滚,那么在该事务中生成的自增列值可能会被丢弃,从而导致自增列值的跳变。
- 切换主副本 :在分布式数据库系统中,为了保证高可用性,可能会进行主副本的切换。在切换过程中,可能会导致自增列的值出现不连续,从而产生跳变。
- 宕机重启 :数据库服务器宕机后重启,可能会导致自增列的缓存信息丢失,重启后重新分配的自增列值可能会与宕机前的值不连续,产生跳变。
- 自增cache失效 :OceanBase数据库为了提高性能,会对自增列的值进行缓存。如果显式插入了一个比当前缓存的最大值还要大的值,会导致缓存失效,从而使得下一个自增列的值从新的起点开始,产生跳变。
- 分布式特性 :OceanBase是一个分布式数据库,自增列的值在不同的分区间可能不保证单调性。当数据分布在不同的物理节点上时,由于并行操作和数据分布的特性,可能会导致自增列值的跳变。
- 预分配机制 :OceanBase数据库会预分配一定数量的自增列值。当这些预分配的值耗尽后,会重新取下一段缓存,但起点不一定是连续的,这也可能导致自增列值的跳变。
总结来说,序列和自增列的跳变主要是由于分布式数据库的特性、事务处理、高可用性机制以及缓存策略等因素共同作用的结果。这些跳变在一定程度上是正常现象,因为它们反映了数据库在处理并发和故障恢复时的行为。
6、如果把回收站关闭了,那么到达设置的删除时长后,会清除数据吗?
答:
如果回收站被关闭,那么删除的数据库对象将不会被放入回收站中,而是直接被删除。
但如果回收站中本身就有清理的数据库对象,关了回收站开关之后,该 flashback 还能 flashback,该 purge 还能 purge,该定期清理还能定期清理。
回收站开关只影响被删除的对象是否进入回收站,不影响其他的东西
7、如果一级分区用range,二级分区用hash,数据是不是分布不均匀呀?
答:在组合分区中,一级分区使用Range分区,二级分区使用Hash分区,数据分布的均匀性取决于Hash分区的特性。Hash分区通过哈希算法将数据均匀分布到各个分区中,理论上可以保证数据在二级分区内的均匀分布。然而,一级分区的Range分区可能会导致不同一级分区的数据量不均匀,因为Range分区是基于某个范围值来划分数据的。
如果一级分区的Range划分得当,每个一级分区的数据量相对均衡,那么结合Hash分区的均匀分布特性,整体上数据分布可以保持较好的均衡。但是,如果一级分区的Range划分导致某些分区包含的数据量远大于其他分区,那么即使二级分区使用Hash分区,也无法完全弥补一级分区数据分布不均的问题。
因此,如果一级分区用Range,二级分区用Hash,数据分布的均匀性取决于一级分区Range划分的合理性以及Hash分区算法的有效性。在设计分区策略时,需要综合考虑数据的特性、查询模式以及系统的性能需求,以确保数据分布的均衡性和查询性能的最优化。
——————————————————————————————————————————
第七期:OceanBase 数据库的诊断和调优
1、OceanBase 社区版需要什么样的配置?
答:我们最低的配置是 2C 8G,CPU 推荐在 4 核以上,内存推荐在 16 G 以上。磁盘要求 SSD,存储空间至少 20GB。
2、odp 和 obproxy 不是一个吗?
答:ODP 和 OBProxy 是同一个东西,就是 OceanBase 数据库代理。ODP 是 OceanBase Database Proxy 的简称,我们为了避免和 OceanBase 其他一些名字听上去差不多的工具混淆,一般会管 ODP 叫 OBProxy 或者直接叫 proxy。所以 ODP、OBProxy、proxy 都是同一个东西。
3、 3.3.x 版本的统计信息为空,会影响执行计划吗?
答:首先 OceanBase 没有 3.3 这个版本,3.x 版本里只有 3.1、3.2。如果是社区版的话,因为 3.x 版本已经是三年前发布过的一个非常老的版本,所以建议大家尽快升级到比较新的 4.2 或者 4.3 版本。不管对 3.x 和 4.x 的什么版本来说,如果统计信息为空,都会影响执行计划的生成。这个也很好理解,因为优化器会根据表中数据的特征,选择生成一个最优的计划。如果优化器不能利用统计信息,就只能认为表中的数据特征是默认的,比如一列的数据本身分布很不均匀,但是因为没有统计信息,优化器就会默认表中所有的数据都是均匀分布的,这样就很难保证能够生成一个最优的计划。
4、会有 SQL 优化相关的课程吗?
答:我们这次的 DBA 入门教程是比较通用的课程,并没有专门为 “SQL 优化”这个主题开一个专题课程。
和 SQL 优化相关的内容非常多,我们这次也只是在课程里介绍了比较基础的一小部分内容,只是 SQL 优化的冰山一角。因为今晚入门教程的内容比较多,由于时间关系,只能在课程中讲解其中比较基础的一部分。所以我也为大家总结了一份儿今天课程的学习笔记:https://oceanbase.yuque.com/org-wiki-obtech-vh7w9r/notes。这个学习笔记里有相对比较完整的 SQL 优化的内容。如果有对 OceanBase SQL 优化相关内容感兴趣的老师,对笔记中的内容有任何疑问,都可以直接在笔记下方进行留言和评论。
至于是否会开一个和 SQL 优化相关的专题课程,我们也会跟相关的同学进行一个需求的沟通。
5、课程是基于 OceanBase 4.x 版本讲的吗?
答:是的,我们这次的 DBA 入门教程整个系列的课程,都是基于 OceanBase 4.x 版本讲的。
6、计划缓存不就是绑定变量窥视吗?
答:是的,OB 中的计划缓存(plan cahce)和 Oracle 中的绑定变量窥视(Bind Variable Peeking)是非常类似的优化技术,目的都是提高效率并减少解析开销,同时避免了因为相同查询文本的不同常量值导致的硬解析和执行计划的不必要多样化。然而,如果首次执行时绑定变量的值并不具有代表性(例如,特殊值或极端值),生成的执行计划可能不适合之后其他值的情况,也都可能导致后续查询的性能问题。
7、缓存的计划被频繁淘汰,要查问题只能从日志?
答:确认缓存的计划是否被频繁淘汰,只需要通过全链路追踪确认各阶段耗时占比,如果发现总是有 hard_parse 这个硬解析的阶段,就说明缓存的计划被频繁淘汰,对相同的 SQL 反复生成计划了。不需要通过日志来确认缓存的计划是否被频繁淘汰的。如果要解决这个问题,可以增加机器内存,或者适当调整 ob_plan_cache_percentage 等系统变量(官网上搜下 plan_cache 关键字就好了)。
8、合并慢问题怎么排查?
答:V3.2 版本后支持自动排查,可以查询虚拟表 __all_virtual_compaction_suggestion。更多信息详见:《合并慢 / 合并超时排查手册》。
9、buffer 表问题除了临时手动触发 major freeze,有永久解决方案嘛?
答:buffer 表问题是由于 OceanBase 基于 LSM-Tree 机制实现存储引擎导致的一个 bad case,暂时只能通过合并来进行规避。
10、大 sql 执行期间 audit 有记录么?
答:SQL 执行期间是有记录的,而且无论 SQL 执行是成功还是失败,GV$OB_SQL_AUDIT 都会有记录。
11、有内存表吗 ?小表所有数据都一直放在 cache 里,不进磁盘?
答:OceanBase 暂时还没有描述中的这种内存表。
12、3.x 的统计信息视图都是空的,怎么确定其是准确的?3.x 版本的 ob 手动收集统计信息后,还是不会显示在视图里,怎么确定他统计信息的准确性。以及没有自动收集的功能?
答:3.x 版本的统计信息功能还不够完善,3.x 不建议手动收集统计信息,建议靠每日合并来维护统计信息,而且在合并时收集也没有提供相关视图。从 323 开始为手动收集统计信息提供相关视图。如果使用的是三年前发布的 3.1 社区版,建议尽早升级到 4.2/4.3 版本。
——————————————————————————————————————————
第八期:OceanBase 认证体系和用户实践
1、 想问一下认证相关的,最近还是3.x吗 ?
答:现在还是3.x的认证,4.x的obca认证会在6月份发布,相关信息请关注官网
2、企业版也可以用Obadiag 工具吗?
答:可以,而且推荐使用,尤其是在提工单的时候用obdiag收集信息非常方便
3、obdiag工具对各集群版本都兼容吗?
答:适用版本可以看 版本发布记录。
4、4.2版本主备没有最大保护功能了,业务需求需要,怎么办?
答:OceanBase V4.1.0 版本还有一种高可用解决方案,通过引入一个独立的仲裁服务,允许通过更少副本数提供良好的容灾能力。
仲裁方案保证数据在多数派副本(4 个全功能型副本+ 1 个仲裁服务)或全部副本(2 个全功能型副本+ 1 个仲裁服务)上强同步,
并在半数全功能型副本故障的情况下,自动进行故障降级,保证数据不丢失的同时业务持续可用。
5、社区版本OCP多集群模式有计划支持么 ?
答:暂无计划支持
6、冷热备库各适合什么应用场景?
答:冷备库:主要是容灾需求,日常不提供服务,应急使用
热备库:单元化多活场景部署的场景,业务一部分流量在一个A集群,另一部分流量在B集群,提高资源利用率节省成本,日常有流量可以保活,异常情况下能切敢切
7、主库有primary zone设置 对备库有影响?
答:主库设置primary zone设置,对备库没有影响
8、问下,当ob需要新加一个备节点的时候,应该怎么操作?
答:通过ocp管控 白屏操作,官网上有详细的操作手册
9、ob的主备模式在业务上怎么实现自动切主 ?
答:故障的时候,一般是 Failover
10、解耦之后又可以直接变成主备吗?
答:解耦后,日志各自独立,不能再变成主备库
11、obcp实验考试的形式是什么?
答:线上考试
12、ocean base需要相关学习的框架和体系结构知识有哪些?
答:按照官网的文档结构进行学习即可。
13、目前官网有没有基于4.0版本的obca和obcp培训课程?
答:无
14、请问下OBCE的面试是什么形式?有大纲之类的指导文档吗?
答:可以看下 OBCE 认证考试指南
15、obcp除了pdf资料有没有培训视频
答:没有
16、obcp 考的是企业版的嘛
答:对的,目前是基于3.2.4版本
17、笔试也不用去线下考点了?
答:obcp笔试是线下考试
18、obcp实验考试,是在ocp操作,还是黑屏写命令
答:黑屏,具体可参考 OBCP 认证考试指南
19、线下是要付费培训吗 ?
答:不是,看个人情况选择即可
扫码加入教程学习群