002、体系结构之TiDB Server

news2024/11/17 10:43:39

TiDB Server

  • 1、TiDB总览
    • 1.1、TiDB Server架构
    • 1.2、TiDB Server 主要功能:
  • 2、SQL语句处理
    • 语句的解析和编译
    • SQL层
    • 协议层
    • 上下文
    • 解析层
    • 逻辑优化器
    • 物理优化器
    • 本地执行器
    • 分布式执行器
  • 3、如何将表的数据转成kv形式
  • 4、在线DDL相关模块
  • 5、GC机制与相关模块
  • 6、TiDB Server 缓存
  • 7、热点小表缓存
    • 小表缓存原理
    • 热点小表缓存-应用

1、TiDB总览

1.1、TiDB Server架构

在这里插入图片描述
TiDB Server 是无序的,不存储数据。

  • (Protocol Layer/Parse/Compile): 负责SQL语句解析和编译(优化)。
  • (DistSQL/KV/Executor): 执行生成的计划。 简单的SQL(例如直接通过主键查到)使用KV,DistSQL复杂SQL执行计划的生成。
  • (Transaction/KV):这个和负责事务处理相关的进行。
  • (PD Client/TiKV Client):这个负责与PD和TiKV 交互的进程。 例如获得时间戳TSO,就是通过PD Client跟PD获取。
  • (schema load/worker/start job): 这三个进程主要负责online ddl
  • memBuffer: 缓存当中的数据,类似sga
  • cache table: 缓存表的内存区域。
  • GC: 垃圾回收,将MVCC过期版本数据进行回收

1.2、TiDB Server 主要功能:

  • 处理客户端的链接
  • SQL 语句的解析和编译
  • 关系型数据与 KV 的转化
  • SQL 语句的执行
  • Online DDL 的执行(DDL 操作不会阻塞读写,但对整个 TiDB 来说,同一时刻只能有一个 TiDB Server 进行 DDL 操作)
  • 垃圾回收
  • 热点小表缓存
  • 多个 TiDB Server 轮换选举 Owner 节点,Owner 中的 worker 负责执行 DDL
  • DDL job 会存储在 TiKV 中进行持久化
  • TiDB 是用 Go 开发的
  • TiDB Server GC 默认 10 分钟触发一次,删除当前时间上一个 safe point 之前的历史版本数据
  • 热点小表缓存,限制表数据需在 64m 以下,可通过 ALTER TABLE users CACHE; 将 users 表放入 TiDB Server 的 cache table 中。
  • 热点小表缓存如何保证读写一致的问题:tidb_table_cache_lease=5 参数控制缓存租约。5s 之内用户可以从缓存中读取数据;租约到期前,任何用户不能修改此表,租约过期后,写数据直接写入 TiKV,读也是从 TiKV 读,完成写操作之后,缓存重新续约,缓存内容也会刷新。所以当租约到期时,读性能会下降。不支持对缓存表直接做 DDL 操作,需要先关闭。
  • TiDB 中的表分为两种:聚簇表、非聚簇表。聚簇表需要有主键,非聚簇表可以有主键,也可以没有。KV 转换时,聚簇表使用主键作为 key,非聚簇表不管是否定义了主键,都会生成一个 key。
  • Protocol Layer 通过 PD Client 异步向 PD 请求 TSO,同时继续进行 SQL 解析和编译,在实际执行前,获取异步请求 TSO 的结果

2、SQL语句处理

在这里插入图片描述
**功能:**负责客户端的连接。 连上之后把SQL语句发送过来,所以第二件事就是解析这些语句。 然后生成一个分布式的执行计划。它是无序的,不保何数据。一个挂掉了,通过一些负载均衡技术,连其它的就可以。

语句的解析和编译

在这里插入图片描述
把语句拆分成一个个token,生成一个AST语法树
在这里插入图片描述
按照已经解析好了执行计划,把这个执行计划给到executor ,然后它按照plan生成的树状执行计划,执行都时候分两种,

  • 第一种复杂的SQL例如过滤、范围,关联,嵌套等 防止跟TiKV耦合度太高,中间抽象出一层DistSQL接口。经过DistSQL 都会变成一个个简单的单表计算任务。

  • 第二种KV ,简单的SQL,POINT CACHE(点查的模块),例如根据主键或者唯一索引,查看一行或0行记录这种。

SQL层

SQL 层,对外暴露 MySQL 协议的连接 endpoint,负责接受客户端的连接,执⾏SQL 解析和优化,最终⽣成分布式执⾏计划。TiDB 层本身是⽆状态的,实践中可以启动多个 TiDB 实例,通过负载均衡组件(如 LVS、HAProxy 或 F5)对外提供统⼀的接⼊地址,客户端的连接可以均匀地分摊在多个 TiDB 实例上以达到负载均衡的效果。TiDB Server 本身并不存储数据,只是解析 SQL,将实际的数据读取请求转发给底层的存储节点 TiKV(或 TiFlash)。

协议层

protocol layer :协议层,能够让tidb在网络层中提供服务,例如mysql 协议的服务,通过之后,然后客户端连上tidb,把SQL语法发过来

上下文

session context: 会话上下文。例如存放用户登录的数据。登录成功后,SQL语句就发送给解析层

解析层

parser: 解析层,当然这个SQL肯定还是要 前往到具体到某台TiKV server上,集群当中的某一个leader上。所以它要去到哪个leader上面呢,它会去问pd(大脑),要对应的 data location,找到某个tikv server的地址; 另外还有个功能就是将SQL语句变成 树形结构,这个树形结构当中会保存 这条SQL语句要访问的对象以及对这个对象的操作。

逻辑优化器

logical optimizer : 逻辑优化器,
统计信息:通过一系列规则,例如总行数等辅助信息。这些辅助信息有可能对这个SQL语句的执行 起到帮助的作用

物理优化器

physical optimier: 物理优化器,拿到这些统计信息再结合逻辑优化器生成的执行计划。 来生成一个更好的物理执行计划。 这个执行计划会交由两个执行器来处理,

本地执行器

local executor: 如果我有一些命令,需要在客户端 所连的那一台TiDB Server上操作,那这个时候就会 本地执行器来做

分布式执行器

Distributed Executor: 这个SQL,是需要去到TiKV上操作命令的执行,则这些SQL 会交给分布式执行器来处理。 为什么是分布式的,因为TiKV server实际是一个集群,上面执行的SQL是一个并行SQL,它会在多台TiKV server上同时执行这样的SQL

3、如何将表的数据转成kv形式

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4、在线DDL相关模块

在这里插入图片描述

5、GC机制与相关模块

在这里插入图片描述
用于回收mvcc 旧版本,定期清理。 这个动作就叫gc
例如可以设置一个gc lift time = 4hout 则safe point 为4个小时,则四个小时内的数据即使增删改,也可以找到这四小当中的任意数据

6、TiDB Server 缓存

  • TiDB Server缓存组成
    • SQL结果
    • 线程缓存
    • 元数据,统计信息
  • TiDB Server缓存管理
    • tidb_mem_quota_query
    • oom-action

在这里插入图片描述
语句执行过程中,需要的数据会先放到缓存中,这个很类似pga
tidb_meme_quota_query: 限制每条SQL使用的内存,占用缓存的大小
oom-action: 当超过tidb_meme_quota_query这个值后,是如何执行这条SQL(例如中断或者忽略)

7、热点小表缓存

  • 表的数据量不大
  • 只读表或者修改不频繁的表
  • 表的访问和频繁

小表缓存原理

在这里插入图片描述
在这里插入图片描述
这张表的大小要小于64M才能放到cache
tidb_table_cache_lease: 租约,类似租房的有效期。

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

热点小表缓存-应用

  • TiDB对于每张缓存表的大小限制为64Mb
  • 适用于查询频繁、数据量不大、极少修改的场景
  • 在租约(tidb_table_cache_lease)时间内,写操作会被阻塞
  • 当租约到期(tidb_table_cache_lease)时,读性能会下降
  • 不支持对缓存表直接做DDL,需要先关闭
  • 对于表加载较慢或者极少修改的表,可以适当延长tidb_table_cache_lease 保持读性能稳定

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/636944.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pyecharts案例三——河南省疫情地图绘制

代码实现 代码的业务流程基本和全国疫情地图相同,注意城市名结尾必须有“市”才能识别 import json from pyecharts.charts import Map from pyecharts.options import *f open("./疫情.txt", "r", encoding"UTF-8") data f.read…

暴力破解测试-业务安全测试实操(1)

业务安全测试实践模版理论指导_luozhonghua2000的博客-CSDN博客 测试原理和方法 暴力破解测试是指针对应用系统用户登录账号与密码进行的穷举测试,针对账号或密码进行逐一比较,直到找出正确的账号与密码。 般分为以下三种情况: 在已知账号的情况下,加载密码字典针对密码进行…

从美颜算法到AI美颜SDK:美丽的背后隐藏着什么?

在年轻人的生活中,通过美颜SDK类型的美颜工具进行拍摄已经成为了一种全新的文化现象。时下,AI美颜、美颜SDK讨论热点极高,那么大家知道美颜算法和AI美颜到底有什么不同吗?它们背后隐藏着什么样的技术和思想? 一、美颜算…

java的StringBuilder、Stringjoiner

一、StringBuilder StringBuilder可以看成是一个容器,创建之后里面的内容是可变的。作用是提高字符串的操作效率。 注意:使用String创建字符串对象时,是不能改变字符串的内容的,例如: String s1 "aaa"; St…

【解决MySQL-jdbc连接问题】com.mysql.jdbc.Driver was not found, trying direct instantiat

启动服务时出现报错 com.zaxxer.hikari.util.DriverDataSource : Registered driver with driverClassNamecom.mysql.jdbc.Driver was not found, trying direct instantiation.而且接口有时候能访问成功,有时候的超时连接,异常的慢 经查询&#xff0c…

BUUCTF Alice与Bob 1

题目描述: 密码学历史中,有两位知名的杰出人物,Alice和Bob。他们的爱情经过置换和轮加密也难以混淆,即使是没有身份认证也可以知根知底。就像在数学王国中的素数一样,孤傲又热情。下面是一个大整数:98554799767,请分解…

HTMLCSS Day03 CSS字体及文本样式

文章目录 1.文本属性- 颜色属性在CSS中如何通过color属性来修改文字颜色英文单词rgbrgba十六进制 - font-style 用于打开和关闭斜体文本- font-weight 为字体设置粗细程度- font-size 为文字指定大小- font-family 为文字指定特殊的字体,浏览器只会使用浏览器可以访…

动态规划dp —— 23.等差数列划分

1.状态表示 是什么?dp表中里的值所表示的含义就是状态表示 dp[i]表示:以i位置为结尾的所有子数组中有多少个等差数列 2.状态转移方程 dp[i] 等于什么 以i位置为结尾的等差数列,也就是说i位置必须和i-1,i-2位置构成等差数列&am…

98.实战网页构建定价部分-第一节

通过之前的文章我们实现如下的页面&#xff1a; ● 这节课我们来完成价目的部分 <section class"section-pricing"><div class"container"><span class"subheading">定价</span><h2 class"heading-secondary…

目前音质好的几款音频功放芯片

“音频功率放大器”简称音频功放&#xff0c;是扩声系统不可缺少的音响设备&#xff1b;是指把来自音源或前级放大器输出的弱信号放大并推动一定功率的音箱发出声音的集成电路。 音频功放可分为模拟功放和数字功放&#xff0c;传统模拟功放主要有A、AB、B、G类等&#xff0c;区…

vscode 实时同步代码到远程服务器

&#xff08;1&#xff09;在本地新建一个工程文件夹quant&#xff0c;将要同步的文件或者代码或文件夹放到quant里面&#xff1a; &#xff08;2&#xff09;创建sftp配置 使用 ctrlshiftp 快捷键调出输入框&#xff0c;选择 SFTP:Config 回车 会在 .vscode 目录下创建一个 s…

实验篇(7.2) 11. 创建点对点安全隧道(FortiGate-IPsec) ❀ 远程访问

【简介】前面我们实验的是FortiClient客户端与防火墙进行VPN连接&#xff0c;现在我们要做的实验是防火墙与防火墙之间进行VPN连接。现在我们来看看两台防火墙之间要怎样创建VPN连接。 实验要求与环境 OldMei集团深圳总部部署了域服务器和ERP服务器&#xff0c;用来对集团总部进…

基于Java+Spring+vue+element实现唯美鲜花商城购物系统

基于JavaSpringvueelement实现唯美鲜花商城购物系统 博主介绍&#xff1a;5年java开发经验&#xff0c;专注Java开发、定制、远程、指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获取源码联系方式 文…

unocss 基础用法

一、什么是unocss unocss是一个即时的原子CSS引擎&#xff0c;它可以让你用简短的类名来控制元素的样式&#xff0c;而不需要写复杂的CSS代码。 当然&#xff0c;原子样式也有很多选择&#xff0c;最著名的就是 Tailwind。 但由于Tailwind 会生成大量样式定义&#xff0c;会导…

C语言函数的函数名和参数

VC6新建单文档工程&#xff1b; 视类添加2个函数&#xff1b; int getmax(int a,int b) {return a>b?a:b; }int two(int a) {return a * 2; } 调用&#xff0c;输出&#xff0c; void CMingView::OnDraw(CDC* pDC) {CMingDoc* pDoc GetDocument();ASSERT_VALID(pDoc);…

Segment-Anything的一些相关论文总结

1、 Segment Anything Model (SAM) Enhanced Pseudo Labels for Weakly Supervised Semantic Segmentation Tianle Chen, Zheda Mai, Ruiwen Li, Wei-lun Chao https://arxiv.org/abs/2305.05803 图像级监督的弱监督语义分割(WSSS)由于其标注成本较像素级标注低而受到越来越…

基于react18.x和router v6创建一个简单的静态页面

基于react18.x和router v6创建一个简单的静态页面 效果示例图README.md学习网站创建项目安装react-router-dom v6依赖安装scss 项目目录路由router/index.jsApp.jsindex.js路由地址错误&#xff0c;打开404页面页面docs/index.jsx页面tutorial/index.jsx 效果示例图 README.md …

fio下发的请求大小不确定

fio下发的请求大小不确定 问题描述调用栈回顾nvme_set_queue_limits函数研究内核调用栈 问题描述 fio --filename/dev/xxx_dev --direct1 --rwwrite --bs1M --ioenginelibaio --iodepth1 --runtime60 --numjobs1 --time_based --group_reporting --name"test xxx" -…

第一课 django后端框架初始和安装

这里写目录标题 django是什么django 发展历史:django主要组件django的应用场景django的官网如下django的安装 django是什么 Django 是一个由 Python 编写的一个开放源代码的 Web 应用框架。 django 发展历史: Django 是从真实世界的应用中成长起来的&#xff0c;它是由堪萨斯…

你知道微信的转账是可以退回的吗

微信作为当今最受欢迎的即时通讯软件之一&#xff0c;其转账功能得到了广泛的应用。在使用微信转账时&#xff0c;我们可能会遇到一些问题&#xff0c;例如误操作、支付失败或者需要退款等等。 首先需要注意的是&#xff0c;微信转账退回的操作只能在“一天内未确认”时进行。如…