iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >TiDB 学习笔记一(运维管理)
  • 674
分享到

TiDB 学习笔记一(运维管理)

TiDB学习笔记一(运维管理) 2019-04-03 04:04:05 674人浏览 绘本
摘要

   1.截至 4.0 版本,TiDB 与 MySQL 的区别总结 功能 MySQL TiDB 隔离级别 支持读未提交、读已提交、可重复读、串行化。【默认为可重复读】 乐观事务支持快照隔离,悲观事务支持快照隔离和读已提交 锁

TiDB 学习笔记一(运维管理)

 

 1.截至 4.0 版本,TiDB 与 MySQL 的区别总结

功能 MySQL TiDB
隔离级别 支持读未提交、读已提交、可重复读、串行化。【默认为可重复读】 乐观事务支持快照隔离,悲观事务支持快照隔离和读已提交
机制 悲观锁 乐观锁、悲观锁
存储过程 支持 不支持
触发器 支持 不支持
事件 支持 不支持
自定义函数 支持 不支持
窗口函数 支持 部分支持
JSON 支持 不支持部分 Mysql 8.0 新增的函数
外键约束 支持 忽略外键约束
字符集   只支持 ascii、latin1、binary、utf8、utf8mb4
增加/删除主键 支持 通过 alter-primary-key 配置开关提供
CREATE TABLE tblName AS SELECT stmt 支持 不支持
CREATE TEMPORARY TABLE 支持 TiDB 忽略 TEMPORARY 关键字,按照普通表创建
DML affected rows 支持 不支持
AutoRandom 列属性 不支持 支持
Sequence 序列生成器 不支持 支持

 

2.TiDB DDL操作

TiDB 集群中,用户执行的 DDL 操作分两类:普通 DDL 操作和加索引操作。

增加字段

在执行 ADD COLUMN 类型 DDL 时,TIDB并没有对数据进行回填,而是将最新添加的列的 default 值保存到 schema 的"原始默认值"字段中,在读取阶段如果 TiKV 发现该列值为 null 并且"原始默认字段"不为 null,则会使用"原始默认字段"对该 null 列进行填充,并将填充后的结果从 TiKV 返回。通过这种优化,该 DDL 操作不需要关心表中实际行数,可以更快的完成 DDL 变更,操作执行时间短,一般秒级就可以执行完成。

增加索引

加索引操作由于需要回填数据,因此执行时间略长。而在回填数据期间,需要将回填的数据写入 TiKV,对 TiKV 会产生额外的写入压力,从而造成一些性能影响。

TiDB 提供了参数 tidb_ddl_reorg_worker_cnt 和 tidb_ddl_reorg_batch_size 用来控制回填数据的速度。通过调整参数,可以在业务访问高峰到来时降低 DDL 速度,保证对业务的正常访问无影响;而在业务访问低峰增加 DDL 速度,从而更快的完成 DDL 任务。

 3.Sequence

Sequence 是数据库系统按照一定规则自增的数字序列,具有唯一和单调递增的特性。可以实现并发应用需要获取单调递增的序列号;通过调用不同的Sequence ,在一张表里面需要有多个自增字段;更新数据表中一列值为连续自增的值。

 4.AutoRandom

AutoRandom 是 TiDB 4.0 提供的一种扩展语法,用于解决整数类型主键通过 AutoIncrement 属性隐式分配 ID 时的写热点问题。使用 AUTO_RANDOM 功能前,须在 TiDB 配置文件 experimental 部分设置 allow-auto-random = true

  • 唯一性:TiDB 始终保持填充数据在表范围内的唯一性。
  • 高性能:TiDB 能够以较高的吞吐分配数据,并保证数据的随机分布以配合 PRE_SPLIT_REGioN 语法共同使用,避免大量写入时的写热点问题。
  • 支持隐式分配和显式写入:类似列的 AutoIncrement 属性,列的值既可以由 TiDB Server 自动分配,也可以由客户端直接指定写入。该需求来自于使用 Binlog 进行集群间同步时,保证上下游数据始终一致。

5. TiUP

在 TiDB 4.0 的生态系统里,TiUP 作为新的工具,承担着包管理器的角色,管理着 TiDB 生态下众多的组件(例如 TiDB、PD、TiKV)。用户想要运行 TiDB 生态中任何东西的时候,只需要执行 TiUP 一行命令即可,相比以前,极大地降低了管理难度。

 6.数据订阅复制同步工具 CDC

TiCDC(TiDB Change Data Capture)是用来识别、捕捉和输出 TiDB/TiKV 集群上数据变更的工具系统。它既可以作为 TiDB 增量数据同步工具,将 TiDB 集群的增量数据同步至下游数据库,也提供开放数据协议,支持把数据发布到第三方系统。相较于 TiDB Binlog,TiCDC 不依赖 TiDB 事务模型保证数据同步的一致性,系统可水平扩展且天然支持高可用。在 TiCDC 工具出现之前,数据同步功能是由 TiDB-Tools 工具中的 TiDB-Binlog 来实现的。TiDB-Binlog 通过收集各个 TiDB 实例产生的 binlog,并按照事务提交的时间排序后同步到下游。

 7.数据导入工具 Lightning

TiDB Lightning 是一个将全量数据高速导入到 TiDB 集群的工具,速度可达到传统执行 sql 导入方式的 3 倍以上、大约每小时 300 GB。Lightning 有以下两个主要的使用场景:一是大量新数据的快速导入、二是全量数据的备份恢复。目前,Lightning 支持 Mydumper 或 CSV 输出格式的数据源。

 

 注意事项:一旦目标 TiKV 集群切换到导入模式,整个数据导入阶段该集群将被 tidb-lightning 独占,无法对外提供正常服务。数据导入完成后,tidb-lightning 会自动把 TiKV 集群切换回“普通模式”。

8.备份恢复工具 BR

 BR(https://GitHub.com/pinGCap/br) 是分布式备份恢复工具,分布式意味着可以通过 BR 可以驱动集群中所有 TiKV 节点进行备份恢复工作,相比起 SQL dump 形式,这种分布式备份恢复的效率会有极大的提升。

注意(1)增量的实现也是全表扫,同样有性能问题,这个和传统数据库的增量不一样;(2)恢复耗时要高于备份耗时。

9.导出工具Dumpling

Dumpling 将提供以下几个特性:

  • 完全采用 golang,与 TiDB 生态集成度高
  • 能够提供 Mydumper 类似的功能,且支持并发高速导出 mysql 协议兼容数据库数据
  • 提供 SQL、CSV 等多种数据输出格式,以便于快速导出及导入
  • 支持直接导出数据到云存储系统,比如 S3

 10.限制 SQL 内存使用和执行时间

限制SQL内存使用和执行时间主要是为限制消耗系统资源多的SQL,防止某条SQL造成OOM或影响到集群的整体性能。

类别

参数

说明

限制SQL内存使用

mem-quota-query

单条 SQL 语句可以占用的最大内存阈值。【默认值32G】

tidb_mem_quota_query 设置一条查询语句的内存使用阈值。【默认值32G】
tidb_mem_quota_hashjoin 设置 HashJoin 算子的内存使用阈值。【默认值32G】
tidb_mem_quota_mergejoin 设置 MergeJoin 算子的内存使用阈值。【默认值32G】
tidb_mem_quota_sort 设置 Sort 算子的内存使用阈值。【默认值32G】
tidb_mem_quota_topn 设置 TopN 算子的内存使用阈值。【默认值32G】
tidb_mem_quota_indexlookupreader 设置 IndexLookupReader 算子的内存使用阈值。【默认值32G】
tidb_mem_quota_indexlookupjoin 设置 IndexLookupJoin 算子的内存使用阈值。【默认值32G】
tidb_mem_quota_nestedloopapply 设置 NestedLoopApply 算子的内存使用阈值。【默认值32G】

限制SQL执行时间

max_execution_time

把查询的执行时间限制在指定的 N 毫秒以内,超时后服务器会终止这条语句的执行。

【单位为:ms】

11.利用 GC 快照读恢复数据

TiDB 事务的实现采用了 mvcC(多版本并发控制)机制,当更新/删除数据时,不会做真正的数据删除,只会添加一个新版本数据,并以时间戳来区分版本。当然历史数据不会永久保留,超过一定时间的历史数据将会被彻底删除,以减小空间占用,同时避免因历史版本过多引起的性能开销。

TiDB 使用周期性运行的 GC(Garbage Collection,垃圾回收)来进行清理,默认情况下每 10 分钟一次。每次 GC 时,TiDB 会计算一个称为 safe point 的时间戳(默认为上次运行 GC 的时间减去 10 分钟),接下来 TiDB 会在保证在 safe point 之后的快照都能够读取到正确数据的前提下,删除更早的过期数据。

TiDB 的 GC 相关的配置存储于 mysql.tidb 系统表中,可以通过 SQL 语句对这些参数进行查询和更改。

 读取历史版本数据前,需设定一个系统变量: tidb_snapshot ,这个变量是 Session 范围有效级别,可以通过标准的 Set 语句修改其值。当这个变量被设置后,TiDB 会用这个时间戳建立 Snapshot(没有开销,只是创建数据结构),之后所有的查询操作都会在这个 Snapshot 上读取数据。当读取历史版本数据操作结束后,可以结束当前 Session 或者是通过 Set 语句将 tidb_snapshot 变量的值设为 “",即可读取最新版本的数据。

12.利用 Recover/Flashback 命令秒恢复误删表

Recover

TiDB 在删除表时,实际上只删除了表的元信息,并将需要删除的表数据范围(行数据和索引数据)写一条数据到 mysql.gc_delete_range 表。TiDB 后台的 GC Worker 会定期从 mysql.gc_delete_range 表中取出超过 GC lifetime 相关范围的 key 进行删除。所以,RECOVER TABLE 只需要在 GC Worker 还没删除表数据前,恢复表的元信息并删除 mysql.gc_delete_range 表中相应的行记录就可以了。恢复表的元信息可以用 TiDB 的快照读实现,TiDB 中表的恢复是通过快照读获取表的元信息后,再走一次类似于 CREATE TABLE 的建表流程,所以 RECOVER TABLE 实际上也是一种 DDL。

recover table 的一些使用限制:

  • 只能用来恢复误删除表的 DDL 操作,例如 truncate table,delete 操作没有办法恢复。
  • 只能在 GC 回收数据之前完成,超过 GC 时间后会报错无法成功恢复。
  • 如果在使用 binlog 的情况下,上游执行 recover table 可能会出现一些非预期的结果。例如下游是 MySQL 数据库,对于这个语法不兼容。上下游的 GC 策略配置不同,再加上复制延迟可能会引起下游的数据在 apply recover table 的时候已经被 GC 了从而导致语句执行失败。

Flashback

Flashback 的原理和 Recover table 比较类似,不过是 recover 的升级版,在覆盖 recover 的所有功能之外,还可以支持 truncate table 的操作,未来也会逐渐取代 recover 命令。

 

参考学习

1.TiDB In Action: based on 4.0

Https://book.tidb.io/

2.走进TiDB社区

https://www.bilibili.com/video/av242591239

3.TiDB 数据库开发规范

https://asktug.com/t/topic/93819

您可能感兴趣的文档:

--结束END--

本文标题: TiDB 学习笔记一(运维管理)

本文链接: https://www.lsjlt.com/news/8652.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • oracle学习笔记-用户管理
    1:创建用户create user username identified by password;注意:密码开头要字母2:修改密码自己:password别人:password username  ...
    99+
    2024-04-02
  • NumPy 学习笔记(一)
    NumPy:   1、NumPy 是一个功能强大的第三方库(需要自己安装),主要用于对多维数组执行计算;      它提供了大量的库函数和操作,可以帮助程序员更轻松地进行数值计算   2、可以和另外两个第三方库 SciPy 和 Matpl...
    99+
    2023-01-31
    学习笔记 NumPy
  • NumPy学习笔记(一)
    # NumPy### 安装- 通过安装Anaconda安装NumPy,一个开源的Python发行版本,其包含了conda、Python等180多个科学包及其依赖项,包含了大量的科学计算相关的包,其中就包括NumPy- 通过pip安装, ...
    99+
    2023-01-31
    学习笔记 NumPy
  • Python学习笔记整理(一)pytho
    Python对象类型 说明:python程序可以分解成模块,语句,表达式以及对象。 1)、程序由模块构成 2)、模块包含语句 3)、语句包含表达式 4)、表达式建立并处理对象 一、...
    99+
    2023-01-31
    学习笔记 Python pytho
  • 鸿蒙学习笔记之资源管理器(十一)
    本次要点: 什么是资源管理器 资源管理器的应用 1.什么是资源管理器  资源管理器是系统提供的资源管理工具,我们可以用它查看本台电脑的所有资源,特别是它提供的树形的文件系统结构,使我们能更清楚、更直观地认识电脑的文件和文件夹,这是...
    99+
    2023-09-12
    harmonyos 华为 物联网 java 前端框架
  • Python学习笔记整理(十一)pyth
    while语句,提供了编写通用循环的一种方法,而for语句是用来遍历序列对象内的元素,并对每个元素运行一个代码块。break,continue用在循环内,跳出整个循环或者跳出一次循环。 一、while循环 1、一般格式&...
    99+
    2023-01-31
    学习笔记 Python pyth
  • Python运算符(Python学习笔记
    ...
    99+
    2023-01-30
    学习笔记 运算符 Python
  • 【K210】K210学习笔记一——sensor
    【K210】K210学习笔记一——sensor 前言sensor的配置模块导入模块配置模块各配置解释 完整源码 前言 本人大四学生,电赛生涯已经走到尽头,一路上踩过不少坑,但运气也不错...
    99+
    2023-08-31
    学习 python 人工智能 单片机 图像处理
  • 第一周Python学习笔记
     Python 基本语法: ①  Python程序的格式:1.用代码高亮来标识函数丶语句等等 本身的代码高亮并没有实际的意义,只是用来辅助编程人员和阅读人员 更好的识别    2.程序以缩进来标识语句,缩进用来标识代码间的层次关系,缩进的...
    99+
    2023-01-30
    学习笔记 第一周 Python
  • 如何用Git管理PHP和NumPy学习笔记?
    在学习编程语言和数据科学时,学习笔记是非常重要的。而Git是一个非常好的工具,可以帮助我们管理这些笔记并使其易于分享和协作。在本文中,我们将介绍如何使用Git来管理PHP和NumPy学习笔记。 首先,我们需要安装Git。在Windows系...
    99+
    2023-10-07
    numy 学习笔记 git
  • 学习笔记-小甲鱼Python3学习第一讲
    测试题: 0、python 是什么类型的语言?python是一种脚本语言 IDLE 是什么?是一种python shell,类似于windows的cmd窗口和linux的shell print() 的作用是什么?打印到窗口显示 a ...
    99+
    2023-01-31
    甲鱼 学习笔记
  • Python学习笔记:第一天python
    目录 1. python简介 2. python的安装 3. 编写第一个helloword 4. 变量和常量 5. 数据...
    99+
    2023-01-30
    学习笔记 Python python
  • 【Python3.7学习笔记】一、环境搭
    【Python3.7学习笔记】一、搭建编程环境 【Python3.7学习笔记】一、环境搭建 【Python3.7学习笔记】二、第一个python程序 【Python3.7学习笔记】三、变量和简单数据类型 【Python3....
    99+
    2023-01-31
    学习笔记 环境
  • Python学习笔记一(Python数据
    Python数据类型主要包括数字,字符串,列表,元组和字典。字符串,列表,元组和字典都是序列,序列最主要两个特点是索引操作和切片操作,索引操作让我们从序列中抓取一个特定项目,切片操作让我们能够获取序列的一个切片,即一部分序列。1.数字 ...
    99+
    2023-01-31
    学习笔记 数据 Python
  • Spring学习笔记(一)【BeanUtils.copyProperties方法】
    Spring下的BeanUtils.copyProperties方法是深拷贝还是浅拷贝? 一、浅拷贝深拷贝的理解 简单地说,拷贝就是将一个类中的属性拷贝到另一个中,对于BeanUtils.copyP...
    99+
    2023-09-04
    spring 学习 java
  • 学习笔记-小甲鱼Python3学习第十一
    从列表中获取元素:列表索引值是从0开始的例把'郑十'和'王五'的位置调换一下>>> member['张三', '李四', '郑十', '王五', '赵六', '陈七', '马八', '孙九']>>> me...
    99+
    2023-01-31
    甲鱼 学习笔记
  • Python第一周 学习笔记(3)
    一、数值型 1.数据类型分类: int:整数 python3的int就是长整型,且没有大小限制,受限于内存区域的大小int(x) 返回一个整数 float:浮点数 有整数部分和小数部分组成。支持十进制和科学计数法表示。只有双精度型。f...
    99+
    2023-01-31
    学习笔记 第一周 Python
  • Python 3 学习笔记:函数(一)
    函数可以理解成实现某一功能的一系列代码的集合,这样做有一个最明显的好处就是,如果我们需要反复使用某个功能,使用函数只需要写一遍这些语句,然后就可以在程序中调用这个函数,而不再需要重新写一遍这些语句。 创建 & 调用 创建函数 创建函...
    99+
    2023-01-31
    函数 学习笔记 Python
  • Python学习笔记—第一章—Pytho
    书目:Python(Unix和Linux系统管理指南)学习日期:20120627知识点总结:Python的优势:既简单易学,也可以完成任何复杂任务可读性好(严格的代码缩进格式)支持面向对象编程(OOP)强大的Python社区强大的Pytho...
    99+
    2023-01-31
    学习笔记 Python Pytho
  • 如何创建一个有二维码的Go学习笔记?
    随着数字时代的到来,学习笔记也跟着进化了。现在,我们可以创建一个有二维码的学习笔记,使得我们可以更加方便的将学习笔记分享给他人。本文将介绍如何使用Go语言创建一个有二维码的学习笔记。 安装Go语言环境 首先,我们需要安装Go语言环境。...
    99+
    2023-06-18
    学习笔记 二维码 存储
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作