考了OBCP,又从多个渠道听说TiDB和OceanBase的相似性,所以一直想了解TiDB原理。学习的最大驱动力就是考试了,所以就报了PCTA。

备考包括观看TiDB提供的【301 TiDB 系统管理基础】视频课程和学习TiDB提供的在线文档

https://learn.pingcap.com/learner/course/30002

TiDB 简介 | PingCAP Docs

文档可以直接下载PDF,学习很方便;视频的话就需要在线观看了

视频总共800分钟以上,TiDB建议观看60%就合格,但是强烈建议大家看完。刚开始正常速度看的,达到60%,后面备份恢复、复制迁移等时间不够,就草草观看了,谁知备份恢复、同步迁移的部分考试占比将近50%,导致第一次考试以32分失败。幸亏pcta免费,又报名了一周后的考试,就从后往前1.25倍速学习的。

1、报名通道

https://learn.pingcap.com/learner/certification-center/pcta

2、考试大纲和通过要求

https://learn.pingcap.com/learner/certification-center/syllabus/pcta

PCTA 认证考试为远程在线考试,考试时长 60 分钟,共 60 道题(单选 30 道,多选 30 道,每题 1 分)满分 60 分,36 分为及格

3、考前调试设备

【考试指南】PCTA&PCTP 在线考试操作指南 - 学习指南&经验分享 - TiDB 的问答社区

4、考试内容分析

(1)大纲之外的内容学习

出现了大纲中没出现的TiFlash、TiSpark、MPP、HTAP、分区表等内容,占比不多,但是需要了解。这些内容可以通过在线文档学习

TiFlash 可以兼容 TiDB 与 TiSpark,用户可以选择使用不同的计算引擎,TiFlash 暂时无法直接接受数据写入,任何数据必须先写入 TiKV 再同步到 TiFlash

TiDB 适合用于中等规模的 OLAP 计算,而 TiSpark 适合大规模的 OLAP 计算,用户可以根据自己的场景和使用习惯自行选择
MPP 模式仅对有 TiFlash 副本的表生效

用户可以使用 TiDB 或者 TiSpark 读取 TiFlash
也可使用 TiSpark 查询 TiKV 数据源

分区表的每个唯一键,必须包含分区表达式中用到的所有列

当前支持的类型包括 Range 分区、List 分区、List COLUMNS 分区和 Hash 分区,对于 Range Columns 类型的分区表,目前只支持单列的场景
Range 分区,List 分区和 List COLUMNS 分区可以用于解决业务中大量删除带来的性能问题,支持快速删除分区;Hash 分区则可以用于大量写入场景下的数据打散

TiFlash 简介 | PingCAP Docs

(2)TiDB系统变量和集群参数

变量的作用范围可以是全局范围有效 (Global Scope)、实例级别有效 (Instance Scope) 或会话级别有效 (Session Scope)

集群参数需要修改配置文件需重启集群生效(reload)

(3)TiDB监控 -- dashboard和Grafana+Prometheus

Grafana+Prometheus+Alertmanager的部署方式和查看,最好在创建TiDB的时候部署上

DashBoard的部署方式和查看,最好在创建TiDB的时候部署上,dashboard可以看到所有sql的执行情况,不止慢sql

(4)TiDB的数据文件和日志文件

TiDB只有日志文件没有数据文件;TiKV和PD既有数据文件也有日志文件

(5)LSM存储引擎和B-Tree存储引擎的适用场景

(6)TiDB的角色和用户

角色会被保存在 mysql.user 表中,角色名称的主机名部分(如果省略)默认为 '%'。如果表中有同名角色或用户,角色会创建失败并报错

角色在授予给用户之后,并不会生效;只有在用户启用了某些角色之后,才可以使用角色拥有的权限。可以对用户设置默认启用的角色;用户在登录时,默认启用的角色会被自动启用。(SET DEFAULT ROLE ALL TO 'dev1'@'localhost';)

修改用户密码的3种方式(注意考试时错误项的用户名不对):

SET PASSWORD FOR 'test'@'localhost' = 'xxx';
ALTER USER 'test'@'localhost' IDENTIFIED BY 'mypass';
grant ** to 'test'@'localhost' identified by '';

(7)tiup工具

tiup从TiDB4.0开始引用,tiup主要安装、升级、卸载、清理、销毁TiDB集群

(8)TiDB Cluster的升级

在升级 TiDB 集群的过程中,请勿执行 DDL 语句

先升级 TiUP 版本 -> 再升级 TiUP Cluster 版本 -> 编辑 TiUP Cluster 拓扑配置文件,删除新版本不支持的参数 -> 检查当前集群的健康状况 -> 升级 TiDB 集群 -> 升级后验证版本和集群状态

(9)集群停止启动顺序

集群停止顺序:tiflash -> tidb -> tikv -> pd
集群启动顺序:pd -> tikv -> tidb -> tiflash

(10)TiDB各个组件扩容步骤

扩容 TiDB/PD/TiKV 节点:编写扩容拓扑配置 -> 执行扩容命令 ->  检查集群状态

扩容 TiFlash 节点,比上述的扩容操作多一步(其他相同):开启 PD 的 Placement Rules 功能

(11)TimeZone

time_zone 的默认值是 System;优先使用 TimeZone 环境变量;如果失败,则从 /etc/localtime 的实际软链地址提取;如果上面两种都失败则使用 UTC 作为系统时区。

time_zone 的默认值是 System;优先使用 TimeZone 环境变量;如果失败,则从 /etc/localtime 的实际软链地址提取;如果上面两种都失败则使用 UTC 作为系统时区。
NOW() 和 CURTIME() 的返回值都受到时区设置的影响;只有 Timestamp 数据类型的值是受时区影响的,其实 Timestamp 持久化到存储的值始终没有变化过,只是根据时区的不同显示值不同
其它时间和日期类型,比如 Datetime/Date/Time 是不包含时区信息的,所以也不受到时区变化的影响。

还可以通过设置 session 变量 time_zone 为每个连接维护各自的时区

(12)TiKV的算子下推

TiKV -- coprocessor

TiDB -- Join

算子下推不需要显式指定,而是系统参数 tikv-client.copr-cache控制

TiDB 从 4.0 起支持下推计算结果缓存(即 Coprocessor Cache 功能)。开启该功能后,将在 TiDB 实例侧缓存下推给 TiKV 计算的结果,在部分场景下起到加速效果

  • 不同 TiDB 实例之间不共享缓存
  • 缓存的是下推计算结果,即使缓存命中,后续仍有 TiDB 计算
  • 缓存以 Region 为单位。对 Region 的写入会导致涉及该 Region 的缓存失效。基于此原因,该功能主要会对很少变更的数据有效果
  • 该功能对用户透明,开启和关闭都不影响计算结果,仅影响 SQL 执行时间
  • 通常在以下场景下,下推计算的请求是相同或部分相同的:
    SQL 语句完全一致,例如重复执行相同的 SQL 语句
    SQL 语句包含一个变化的条件,其他部分一致,变化的条件是表主键或分区主键
    SQL 语句包含多个变化的条件,其他部分一致,变化的条件完全匹配一个复合索引列。

(13)BR

BR 恢复到 TiCDC / Drainer 的上游集群时,恢复数据无法由 TiCDC / Drainer 同步到下游

在一次备份或恢复中,各个 TiKV 节点都会有一个对应的备份路径,恢复时会每个TiKV要有所有的备份文件

--ratelimit 选项限制了每个 TiKV 执行备份任务的速度上限
BR可以备份整个集群、单个数据库、单张表(--db 和 --table)

BR 可以并且会默认备份 mysql 数据库下的表,在执行恢复时,mysql 下的表默认不会被恢复

备份的时候仅仅在每个 Region 的 Leader 处生成该 Region 的备份文件。因此备份的大小等于数据大小,不会有多余的副本数据

(14)dumpling和lighting

Dumpling 可以通过 --snapshot 指定导出某个 tidb_snapshot 的数据

tidb lightning:几种后端导入数据的区别如下:
Local-backend(目标表必须为空,影响tidb对外服务):tidb-lightning 先将数据编码成键值对并排序存储在本地临时目录,然后将这些键值对以 SST 文件的形式上传到各个 TiKV 节点,然后由 TiKV 将这些 SST 文件 Ingest 到集群中。和 Importer-backend 原理相同,不过不依赖额外的 tikv-importer 组件。
Importer-backend(目标表必须为空,影响tidb对外服务):tidb-lightning 先将 SQL 或 CSV 数据编码成键值对,由 tikv-importer 对写入的键值对进行排序,然后把这些键值对 Ingest 到 TiKV 节点中
TiDB-backend目标表可以不为空不影响tidb对外服务):tidb-lightning 先将数据编码成 INSERT 语句,然后直接在 TiDB 节点上运行这些 SQL 语句进行数据导入

使用多个 TiDB Lightning 向同一目标导入时,禁止混用不同的 backend,例如,不可同时使用 Local-backend 和 TiDB-backend 导入同一 TiDB 集群
与 TiDB-backend 模式不同,TiDB Lightning 在 Local-backend 模式下直到任务结束才会检测重复行

(15)TiDB Data Migration

TiDB Data Migration (DM) 是能将 MySQL/MariaDB(上游) 的数据迁移到 TiDB (下游)的迁移工具;

分库分表 MySQL 合并迁移到 TiDB,可以使用 DM 进行分表合并迁移;

增量数据迁移:使用 TiDB DM 从 MySQL,MariaDB 或 Aurora 同步 Binlog 到 TiDB,该功能可以极大降低业务迁移过程中停机窗口时间

数据量大,你可以使用 Lightning 对分表数据进行快速合并导入(table-pattern = "table[3-4]"),然后根据业务需要选择是否使用 DM 进行增量数据 (Binlog) 的分表同步(DM:routes)

(15) TiDB Binlog

TiDB Binlog 是将 TiDB(上游) 的修改同步给下游 TiDB 或者 MySQL、Kafka 的工具;

TiDB Binlog 的输入:TiDB 集群;

TiDB Binlog 的输出:TiDB 集群、MySQL、Kafka或者本地文件

TiDB Binlog 与 TiDB v5.0 版本开始引入的一些特性不兼容,无法一起使用,建议使用 TiCDC 替代 TiDB Binlog
Pump 用于实时记录 TiDB 产生的 Binlog,并将 Binlog 按照事务的提交时间进行排序,再提供给 Drainer 进行消费
Drainer 从各个 Pump 中收集 Binlog 进行归并排序,再将 Binlog 转化成 SQL 或者指定格式的数据,最终同步到下游。

当使用 TiDB DM (Data Migration) 将数据从上游 MySQL 或者 MariaDB 迁移到 TiDB 集群时,可使用 TiDB Binlog 保持 TiDB 集群与其一个独立下游 MySQL 或 MariaDB 实例或集群同步

下游是 TiDB/MySQL,需要同步的表中存在没有主键且没有唯一索引的表,这种情况会导致 binlog 性能下降,建议加主键或唯一索引
TiDB 配置中没有开启 binlog,需要修改 TiDB 配置 [binlog]
replicate-do-db 用于指定恢复的库,不指定的话,则全部都恢复
replicate-do-table 用于指定要恢复的表,不指定的话,则全部都恢复。

(16)TiCDC

TiCDC 是一款通过拉取 TiKV 变更日志(非binlog)实现的 TiDB 增量数据同步工具;

TiCDC 的输入:TiDB 集群;

TiCDC 的输出:TiDB 集群、MySQL、Kafka、Apache Pulsar、Confluent

(17)表ID等

TiDB 对每个表分配一个 TableID,每一个索引都会分配一个 IndexID,
每一行分配一个 RowID(默认情况下,如果表使用整数型的 Primary Key,那么会用 Primary Key 的值当做 RowID)
其中 TableID 在整个集群内唯一,IndexID/RowID 在表内唯一,这些 ID 都是 int64 类型

每行数据按照如下规则进行编码成 Key-Value pair:
Key: tablePrefix{tableID}_recordPrefixSep{rowID}
Value: [col1, col2, col3, col4]

对于 Index 数据,会按照如下规则编码成 Key-Value pair:

Key: tablePrefix{tableID}_indexPrefixSep{indexID}_indexedColumnsValue
Value: rowID

对于主键非整数或没有主键的表或者是联合主键,TiDB 会使用一个隐式的自增 RowID,大量 INSERT 时会把数据集中写入单个 Region,造成写入热点。AUTO_RANDOM可以解决热点

(18)schema version

schema version 的增长数量与每个 DDL 变更操作的 schema state 个数一致,例如 create table 操作会有 1 个版本变更,add column 操作会有 4 个版本变更(详情可以参考 online schema change),所以太多的 column 变更操作会导致 schema version 增长得很快

(19)执行计划

EXPLAIN 实际不会执行查询。EXPLAIN ANALYZE 可用于实际执行查询并显示执行计划。

如果 TiDB 所选的执行计划非最优,可用 EXPLAIN 或 EXPLAIN ANALYZE 来进行诊断

(20)Follower的读能力

Follower Read 功能是指在强一致性读的前提下使用 Region 的 follower 副本来承载数据读取的任务,从而提升 TiDB 集群的吞吐能力并降低 leader 负载
为了获得强一致读取的能力,在当前的实现中,follower 节点需要向 leader 节点询问当前的执行进度(即 ReadIndex),这会产生一次额外的网络请求开销,
因此目前 Follower Read 的主要优势是处理隔离集群的读写请求以及提升整体读取吞吐
为了允许在 TiKV 的 follower 节点进行数据读取,同时又不破坏线性一致性和 Snapshot Isolation 的事务隔离,Region 的 follower 节点需要使用 Raft ReadIndex 协议确保当前读请求可以读到当前 leader 上已经 commit 的最新数据。
在 TiDB 层面,Follower Read 只需根据负载均衡策略将某个 Region 的读取请求发送到 follower 节点

(21)TiDB事务

悲观事务模式下会在每个 DML 语句执行的时候,加上悲观锁,用于防止其他事务修改相同 Key,从而保证在最后提交的 prewrite 阶段不会出现写写冲突的情况。
在 TiDB 中,读取数据时,会获取一个包含当前物理时间且全局唯一递增的时间戳作为当前事务的 start_ts。
事务在读取时,需要读到目标 key 的 commit_ts 小于这个事务的 start_ts 的最新的数据版本。
当读取时发现目标 key 上存在 lock 时,因为无法知道上锁的那个事务是在 Commit 阶段还是 Prewrite 阶段,所以就会出现读写冲突的情况

5、总结

因为我也是考过obcp的,个人感觉pcta的难度跟obcp的差不多,考的比较细,除了官方给的视频还要看官方文档,每天抽2小时的话,需要10天的时间准备

PCTA考试经验分享相关推荐

  1. 网络规划设计师考试经验分享

    网络规划设计师考试于11月12日举行,希赛软考学院将从上午的选择题.下午的案例分析和下午的论文三方面为大家整理了考试经验分享,希望对大家有所帮助. 一.上午的选择题 1.上午选择题一直延续软考知识面涉 ...

  2. 超详细28天备考Tableau考试经验分享

    Tableau考试经验分享 为什么要考Tableau QA证书? 对正在备考的小伙伴 对马上就要参加考试的小伙伴 考试环境 网络环境 考试流程 考题难度 我遇到的问题 彩蛋:真题回忆 为什么要考Tab ...

  3. 计算机二级mysql考试经验分享(2021年3月)

    计算机二级mysql考试经验分享 (声明:个人原创,只为给像我考前一样对这场考试迷茫的人一点帮助) 我一年前有在学校上过数据库基础这门课,那时候学的是sql server,想着既然学过了,sql se ...

  4. 全国计算机等级考试三级网络技术考试经验分享(自学者使用)

    今天白天结束了三级网络的等级考试 终于又可以把几年前购买的教材"名正言顺"的处理掉了 我是自己买教材(未来教育)学习的,没有参加过培训班,也没有高手指导,只有度娘默默的陪伴着我 我 ...

  5. CISP-PTE2022最新考试经验分享

    CISP_PTE2022年10月份考试心得体会 2022年9月份由于公司需要,参加了中启航的CISPPTE培训,总培训时间八天,8师傅讲的很好,浅显易懂,经过4天的理论学习和4天的实操练习,经过十一假 ...

  6. 计算机二级MYSQL考试经验分享(2022/9)

    距离考试结束过去2天了,想给大家分享一下mysql二级考试的心得,因为当时自己要考的时候,在网上搜很久,很难找到一篇能解决我疑问的帖子,我想知道上机考试,mysql我应该在哪个窗口打开,考生文件夹在哪 ...

  7. SCR考试经验分享,SCR教材book备考资料

    SCR考试经验分享,SCR教材book备考资料 分享一下我的SCR考试经验.

  8. [乐意]一建考试经验分享

    一建考试经验,分享一级建造师考试通过学员分享一建考试经验供广大考友参考学习. 一建考试经验 一建考试学习的方向和重点: 第一.一级建造师考试和其他大部分注册考试类似,都属于文科类性质的考试,顾名思义, ...

  9. 软考高级 系统架构师考试经验分享(2021年一次性通过)

    简介 笔者从事前端开发工作,是2021年11月6号第一次参加的系统架构设计师考试.很幸运一次性通过.分数不算太高,分别是 51/50/46. 下面笔者来分享下系统架构设计师的考试经验.希望能对准备考试 ...

最新文章

  1. mysql数据库唯一性_mysql表的字段怎么设置唯一性
  2. Xshell连接Ubuntu报错 “服务器发送了一个意外的数据包”
  3. linux中mysql回滚重演_DM7 达梦 数据库 数据守护(Data Watch) (1) -- 基本概念
  4. 火星人敏捷开发手册 原10.31版本已于10.14提前发布,特此通知
  5. python发送文件_Python实现基于HTTP文件传输实例
  6. linux测试网络是否连通ping、telnet命令
  7. 程序员为3万福利放弃30万年薪:贪小便宜的人,都把自己坑惨了
  8. VB6的后期绑定和前期绑定
  9. Anders Hejlsberg谈C#、Java和C++中的泛型
  10. 牛客小白月赛9: D. 树上求和(dfs序+线段树)
  11. 学习笔记:FW内容安全概述
  12. python修改pdf内容_python3.6调整字体Python处理pdf文件库 - PyPDF2详解
  13. 计算机 网络 硬件包括,局域网网络硬件主要包括5个
  14. (JS)统计重复个数
  15. (转载)MFC入门(四)  作者 zhoujiamurong
  16. 常见的端口漏洞入侵主机
  17. #数据库--第1章 Windows 下的数据库导入 TPCH 数据(以 SQL Server 作为示例,MySQL同样适用)
  18. 解决composer 安装某些扩展出现composer:Could not find package
  19. 【JavaScript】ESModule(esm)
  20. 虚拟声源定位系统+环绕声场效果

热门文章

  1. Webpack 安装css-loader和style-loader报错
  2. 简单粗暴搞定webpack4的style-loader!css-loader
  3. Struts1、Struts2及SpringMVC对比
  4. 快速拷贝文件经验及工具分享 - 天缘博客
  5. [渝粤教育] 西安交通大学 环境工程设计与管理 参考 资料
  6. linux0.11缓冲区管理程序阅读注释笔记
  7. UTC时间与Beijing时间转换工具
  8. 夜曲编程python_夜曲编程app免费版下载-百词斩夜曲编程下载v1.0.0安卓版-西西软件下载...
  9. Linux中chmod命令的用法
  10. 逻辑思维强的人适合学计算机不,逻辑思维强的人适合做什么工作?