前言:
在写此文之前,我已经通过了OBCP考试认证。个人感觉OBCP的考题较之于OBCA的考题难度大了许多,审核也严格了很多(OBCP需要线下到指定考试地点去考试,考试前需要做身份签定,考试时有摄像头取证和监考人员监考),请大家做好充分的准备后再约考。OBCP每次考试有66道题,据我推断,整个OBCP的题库大概是200-250道题。
下面我是凭记忆总结的一些我在OBCP考试时遇到过的考点,答案不能保证100%正确,因为官方并没有在考试结束后告知你到底哪道题做错了。如果你手上只有1张考券,那就没有多余的考试机会拿来试错,因此除了掌握以下考点外,还要把官方培训资料好好读几次,最好再通读一遍oceanbase的官方文档。而要想加深记忆,最重要的还是边看资料边做实验,有时候你会发现一些书本上没介绍过,或者平时没太关注的东西,也是会在考试中出现的。
考点1:
转储参数 minor_freeze_times 的增长依赖的是 Memtable 内存达到设定阈值而触发,而手动运行的转储命令不会进行计数。因此,无论手动转储多少次,都不会记录到 minor_freeze_times中。例如,minor_freeze_times 的值为 3 时,手动执行 3 次 ALTER SYSTEM MINOR FREEZE 后,当 Memtable 内存使用达到阈值后,并不会触发合并。
考点2:
__all_server_event_history和__all_rootservice_event_history表中记录了哪些内容?
MySQL [oceanbase]> select module,event from __all_server_event_history group by module,event;
+-------------+-------------------------+
| module | event |
+-------------+-------------------------+
| storage | check_partition_table |
| freeze | do minor freeze |
| freeze | do minor freeze success |记录自动转储
| storage | write checkpoint start |
| daily_merge | report_merge_finished |记录定时合并
| storage | write checkpoint finish |
| storage | add_replica success |记录分区复制
| storage | add_replica failed |
| sql | execute_cmd |记录sys租户执行的语句
| ddl | create_partition |记录DDL语句
| election | switch_leader |记录切主
| election | batch_switch_leader |
| storage | copy local index begin |
| ddl | copy_sstable_batch |
| ddl | batch_create_partition |
| gc | gc_candidates |
| gc | clearup_replica |
+-------------+-------------------------+
17 rows in set (0.165 sec)
__all_rootservice_event_history表记录了集群调度相关信息、转储合并信息等
考点3:
gv$sql_audit是虚拟表,是内存中一个 FIFO 队列(保存在内存中),功能的开启和数据大小是可以通过OceanBase集群参数控制的(sql_audit_queue_size,sql_audit_memory_limit)。后台任务每隔 1s 会检测是否需要淘汰。
考点4:gvsql_audit与gvplan_cache_plan_stat的区别和联系
(g)v$sql_audit SQL审计表,记录每一条SQL的来源、执行状态信息。可以用来查看每次请求客户端来源和执行语句的server的信息,执行状态信息,等待事件及执行各阶段耗时。主要字段trace_id,sql_id,plan_id等;
(g)v$plan_cache_stat : plan_cache的基本状态。记录每个计划缓存的状态,每个计划缓存在该视图中有一条记录;
(g)v$plan_cache_plan_stat : plan_cache中所有plan的具体状态。记录计划缓存中所有plan 的具体信息及每个计划总的执行统计信息, 每个plan 在该视图中一条记录;查询时需要提供tenant_id, srv_ip, srv_port和plan_id 才能返回结果;
(g)v$plan_cache_plan_explain : 对于plan cache中plan的基本信息解释(类似explain查出来的记录)
考点5:分区表的类型及特点
比如hash分区的字段或表达式结果只能是int型,有二级分区时,只有range分区可以直接drop一级分区。
搞清楚每种分区类型的特点和差异,如range分区和list分区的特点和差异等。
key分区不指定分区列时,默认是以表的主键为分区列。
考点6:EXPLAIN 相关
{EXPLAIN | DESCRIBE | DESC} [explain_type] dml_statement;
explain_type: <<--考点,搞清楚每种type输出的内容和差异
BASIC
| OUTLINE
| EXTENDED
| EXTENDED_NOADDR
| PARTITIONS
| FORMAT = {TRADITIONAL| JSON}
dml_statement:
SELECT statement
| DELETE statement
| INSERT statement
| REPLACE statement
obclient> EXPLAIN SELECT * FROM t1,t2 WHERE t1.c2=t2.c2 AND t2.c1 > 4\G
*************************** 1. row ***************************
Query Plan: =======================================
|ID|OPERATOR |NAME|EST. ROWS|COST | <<--考点,记住此处包含的输出列有哪些
---------------------------------------
|0 |HASH JOIN | |9801000 |5933109|
|1 | TABLE SCAN|t2 |10000 |6219 |
|2 | TABLE SCAN|t1 |100000 |68478 |
=======================================
Outputs & filters:
-------------------------------------
0 - output([t1.c1], [t1.c2], [t2.c1], [t2.c2]), filter(nil),
equal_conds([t1.c2 = t2.c2]), other_conds(nil)
1 - output([t2.c2], [t2.c1]), filter(nil),
access([t2.c2], [t2.c1]), partitions(p0)
2 - output([t1.c2], [t1.c1]), filter(nil),
access([t1.c2], [t1.c1]), partitions(p0)
EXPLAIN extended产生附加信息,包括:每个算子的输入列和输出列,访问表的分区信息,当前使用的 filter 信息,如果当前算子使用了索引,显示所使用的索引列及抽取的 query range。
详见官方文档:https://www.oceanbase.com/docs/oceanbase-database/oceanbase-database/V3.2.2/EXPLAIN
我一共凭记忆总结了46个高频考点。完整OBCP考点,请下载附件:
OBCP考试共46个高频考点集锦
后记:
总结的考点里虽然只列出了46项,但试卷中会出现同一个考点出现多道题来考察的情况。因此,在约考OBCP之前,你最好是把上面的考点弄清楚。另外,由于题库中可能有200-250道题,可能你也会遇到这上面没总结的考点,因此,强烈建议你把官方OBCP的培训PPT多读几遍,如果有不清楚的地方,可以在本地服务器上部署一套observer做下实验,能够加深印象。另外,在你通过OBCA考试后,钉钉群上会有一套OBCP的试题,多做几遍,保证全对,里面会有2-3道原题或相关变相题出现在正式的OBCP试题中。祝大家考试顺利!