备份恢复:
恢复的最小力度:租户级
分布式事务:
参与者或者协调者宕机,全部参与者发送prepare ok,客户端会commit
sql引擎:
不能使用常量的场景:between and 应该可以使用常量,被物化的参数精度数字(round(4))和作为格式串的字符串常量(to_date(‘’,‘yyyy-mm-dd’))不行
gv$plan_cache_plan_stat查看执行计划的 租户id srv_ip srv_port plan_id
业务数据模型设计原则:尽量避免跨机分布式事务
索引的作用
(1)快速取数据;
(2)保证数据记录的唯一性;
(3)实现表与表之间的参照完整性;
(4)在使用ORDER by、group by子句进行数据检索时,利用索引可以减少排序和分组的时间。
是不是所有sql都会进plan cache, 哪些不能(超过20m的等)
sql调优:
ob分区表的优点
- 分区表的不同分区可以分散在不同节点上,从而分散压力
- 提高数据的管理
- 增强数据的使用效率
- 不存在磁盘的限制
range column分区和range分区区别:
1.RANGE COLUMNS分区不要求是int类型,可以是任意类型
2. RANGE COLUMNS分区不能写表达式
3. RANGE COLUMNS分区支持向量
hash分区和key分区区别 int:
hash:
HASH分区需要指定分区键和分区个数,适合于对不能用 Range 分区、List 分区方法的场景。通过对分区键上的Hash 函数值来散列记录到不同分区中。通常用于给定分区键的点查询,例如按照用户id来分区。 HASH分区通常能消除热点查询。
且Hash分区表达式的结果必须是int类型。也不能写向量,例如partition by hash(c1,c2)
key:
KEY分区不要求是int类型,可以是任意类型
KEY分区不能写表达式(与hash分区区别)
KEY分区支持向量
KEY分区有一个特殊的语法
create table t1 (c1 int primary key, c2 int) partition by key() partitions 5
KEY分区分区键不写任何column,表示key分区的列是主键
可以加分区–range分区
分区键与唯一索引、与主键的关系:
OceanBase 数据库支持在非分区表和分区表上创建索引,索引可以是局部索引或全局索引,也可以是唯一索引或普通索引。如果是分区表的唯一索引,则唯一索引必须包含表分区的拆分键。
分区键必须是主键的子集
改变连接顺序和连接方式的hint(leading和use_nl)
outline不生效的原因(-c没加,hint有错误,sql_id有变化)
create index idx_ab on test (a,b);explain select * from test where a=2 and b=‘2’;explain select * from test where b=‘2’ and a=1;索引是否都能生效
create table t1 (c1 int primary key, c2 int) partition by key() partitions 5 KEY分区分区键不写任何column,表示key分区的列是主键
dml语句 多选: A.merge,B.update,C.select D.delete
OBProxy:
弱一致性读的idc顺序
详细的路由顺序
1. 相同 Region,相同 IDC 并且不处于合并状态的 OBServer
2. 相同 Region,不同 IDC 并且不处于合并状态的 OBServer
3. 相同 Region,相同 IDC 并且处于合并状态的 OBServer
4. 相同 Region,不同 IDC 并且处于合并状态的 OBServer
5. 不同 Region 并且不处于合并状态的 OBServer
6. 不同 Region 并且处于合并状态的 OBServer
obproxy的启动模式,路由影响的因素:LDC配置,Observer 状态,租户的Zone 类型( 读写型 vs 只读型),路由精准度
Obproxy的参数修改:sys租户alter proxyconfig;
普通租户:set @变量名=‘xx’
location cache 包含哪些路由信息 多选:A.系统租户sys,B.database 信息C.表/分区信息 D.普通租户信息
trace_log_slow_query_watermark是系统参数还是变量,默认值
obproxy连接ob集群的正确格式:sys@oracle_test#obdemo:20210127,sys@oracle_test#obdemo,sys@oracle_test
observer 默认端口号2881,obproxy默认端口号2883
obproxy 查看ldc命令:show proxyinfo idc;
obproxy 查看当前连接数命令行: show processlist?
obproxy和observer连接方式: 长连接?连接池?
obproxy具备连接管理实现OBProxy的连接池功能,obproxy和observer之间连接方式是长连接
存储引擎:
普通租户的memstore到上限,怎么判断是要转储还是合并
clog达到95% ob集群就无法继续提供服务(clog_disk_usage_limit_percentage)
内存占用最多的模块:KVcache和memstore
memtable中主要存在的行–insert行-update行-delete行
同一个分区的不同副本在物理大小上是否相同:
同一个文件在不同磁盘分区上所占的空间不一样大小,这是由于不同磁盘簇的大小不一样导致的。
zone_merge_concurrency生效
合并的三种方式:触发合并 定时合并和手动合并
根据一定策略一次合并zone—智能轮转合并
转储可以控制的级别:partition、server和租户,如果不指定:对所有observer的所有partition转储(集群级)
查询合并状态的表:__all_zone
分布式架构:
create resource pool test unit = ‘config_mysql_test_restore_zone2_S1_aam’,unit= ‘oracle_unit_config’, unit_num=1;
create resource pool test unit = ‘oracle_unit_config’,unit= ‘config_mysql_test_restore_zone2_S1_aam’, unit_num=1;
这个是取得是靠近unit_num的配置
create resource pool test unit = ‘config_mysql_test_restore_zone2_S1_aam’,unit= ‘oracle_unit_config’, unit_num=2;
只对zone1扩容,可以操作的语句,unit=2不行,可以修改unit的资源配置
unit ,resource pool ,租户占用的资源等相关的表
什么情况下需要开启负载均衡 扩容?partition选主?
初始化有很多表和数据时需要开启负载均衡
OceanBase从Partition的多个副本中选出主对外提供服务。为避免Paxos的活锁问题,OceanBase采用一种基于时钟的选举算法选主
分区自动选主相关参数:enable_auto_leader_switch,enable_rebalance
修改资源池报错:alter tenant resource pool 报错 resource unit not empty is not allowed ?什么意思
unit规格不存在
删除某个资源池的命令行drop resource_pool pool_name
故障运维:
用户的权限问题 table、 database 、和全局层级(一个普通用户没有租户权限)
替换observer节点
observer节点下电运维
唯一定位sql执行的是trace_id
下面哪些是事务日志:clog ilog
enable_syslog_recycle和max_syslog_file_count清理系统日志
OceanBase容忍的集群内时钟偏差为100ms
查看idc和region的表:__all_zone
对于等待事件和统计事件相关字段,时间类型单位如无特殊说明是微秒
分区移动的过程:先复制到另一台机器 ;分区服务从旧的机器切换到新的机器 ;再删除旧机器上的分区
observer慢sql的默认值,obproxy慢sql的默认值;怎么查看慢sql(gvs q l a u d i t 、 o b s e r v e r 的 日 志 ? ) , 选 俩 , 但 v sql_audit、observer的日志?),选俩,但vsql audit、observer的日志?),选俩,但vplan_cache_plan_stat这个里面也有闪回查询是同时支持oracle(基于scn和timestamp两种维度)和mysql租户 (基于snapshot)undo_retention有效值的定义, 以及undo_retention为0时默认的历史版本是上一次合并时的版本plan_cache_stat和sqlaudit表关于sql_id维度问题,哪张表是基于sql_id维度聚合?
slow log的时间阈值设置过小会引起哪些问题?
会造成打印 Slow Query 的 Trace 日志
大量慢查询可能会引起什么问题:高并发?集群无法访问?等
- 影响用户体验。慢sql的执行时间过长,则会导致用户的等待时间过长,直接影响用户体验。
- 造成数据库幻读、不可重复读。假设该慢sql是一个更新操作的sql,则会可能出现幻读、不可重复读这种数据库并发事务导致的问题。
- InnoDB的慢查会造成DDL操作阻塞。
- 慢查可能导致占用mysql的大量内存导致mysql服务直接挂掉导致整个系统瘫痪。
- 慢查sql可能执行时间过长导致应用的进程被kill无法返回结果给到客户端。
truncate 表会进入回收站吗:eable_truncate_flashback默认是false,需要设为true,oracle回收站默认是打开的,mysql默认关闭
oracle类型租户默认的管理员用户是sys还是root,mysql类型租户默认的管理员用户是sys还是root?
Oracle是sys,mysql是root
set global 是立即生效还是,需要重连才生效?
必须关闭当前会话,重新连接才生效。