 TokuDB索引结构TokuDB索引结构 网易杭州研究院---胡争(博客:openinx.github.io) TokuDB简介 • 基于分形树实现的MySQL存储引擎 • Tokutek公司2007年研发,2013年开源 • 2015年Percona公司收购Tokutek公司 • TokuDB内部的K-V存储引擎为ft-index • TokuMx: ft-index + MongoDB Server层代码 插入性能大大高于InnoDB(分形树vs B+树) • 查询性能略低于InnoDB • 在线执行DDL操作(不阻塞写操作) • 超高压缩率(TokuDB 4M vs InnoDB 16K) 更高性能,更低成本! 分形树索引结构(一) 分形树结构(二) • msg_buffer – 先进先出队列 • BasementNode(OMT) – 弱平衡二叉树 – 增删改查期望复杂度O(logN) 分形树结构(三) 分形树Insert/Update/Delete • 步骤: – a. 磁盘读取root节点页; – b. 若root节点需分裂,则root节点一分为二,提升一个 新的Root节点; – c. 若root节点是叶子节点,则插入到basementNode;否 则,append message到msg_buffer; – d. 返回 分形树Insert/Update/Delete0 码力 | 19 页 | 1.97 MB | 1 年前3 TokuDB索引结构TokuDB索引结构 网易杭州研究院---胡争(博客:openinx.github.io) TokuDB简介 • 基于分形树实现的MySQL存储引擎 • Tokutek公司2007年研发,2013年开源 • 2015年Percona公司收购Tokutek公司 • TokuDB内部的K-V存储引擎为ft-index • TokuMx: ft-index + MongoDB Server层代码 插入性能大大高于InnoDB(分形树vs B+树) • 查询性能略低于InnoDB • 在线执行DDL操作(不阻塞写操作) • 超高压缩率(TokuDB 4M vs InnoDB 16K) 更高性能,更低成本! 分形树索引结构(一) 分形树结构(二) • msg_buffer – 先进先出队列 • BasementNode(OMT) – 弱平衡二叉树 – 增删改查期望复杂度O(logN) 分形树结构(三) 分形树Insert/Update/Delete • 步骤: – a. 磁盘读取root节点页; – b. 若root节点需分裂,则root节点一分为二,提升一个 新的Root节点; – c. 若root节点是叶子节点,则插入到basementNode;否 则,append message到msg_buffer; – d. 返回 分形树Insert/Update/Delete0 码力 | 19 页 | 1.97 MB | 1 年前3
 Greenplum 排序算法7 9 8 7 7 9 6 3 2 1 分治法 9 快速排序 ● 快速排序算法: 10 堆排序是最常用的排序算法,由J.Williams在1964年发明。 ● 堆是一种近似完全二叉树的结构,最大值堆要求每个子节点的键值总是小于父 节点。最小值堆要求每个子节点的键值总是大于父节点。 堆排序算法 ● 步骤1:建立最大值堆,最大元素在堆顶 ● 步骤2:重复将堆顶元组移除并插入到排序数组,更新堆使其保持堆的性质 输 出 缓 冲 区 输 入 缓 冲 区 27 败者树算法(GP目前使用堆): ● 1. 输入每个顺串的第一个记录作为败者树的叶子节点。建立初始化败者树。 ● 2. 两两相比较,父亲节点存储了两个节点比较的败者(节点较大的值);胜利者 (较小者)可以参与更高层的比赛。这样树的顶端就是当次比较的冠军(最小 者)。 ● 3. 调整败者树,当我们把最小者输入到输出文件以后,需要从相应的顺串取出 一个记录补上去。补回来的时候,我们就需要调整败者树,我们只需要沿着当前 节点的父亲节点一直比较到顶端。比较的规则是与父亲节点比较,胜者可以参 与更高层的比较,一直向上,直到根节点。失败者留在当前节点。 败者树 28 败者树 1 10 30 44 56 . . . 6 8 34 64 66 . . . 7 11 12 13 17 . . . 22 55 67 77 79 . . .0 码力 | 52 页 | 2.05 MB | 1 年前3 Greenplum 排序算法7 9 8 7 7 9 6 3 2 1 分治法 9 快速排序 ● 快速排序算法: 10 堆排序是最常用的排序算法,由J.Williams在1964年发明。 ● 堆是一种近似完全二叉树的结构,最大值堆要求每个子节点的键值总是小于父 节点。最小值堆要求每个子节点的键值总是大于父节点。 堆排序算法 ● 步骤1:建立最大值堆,最大元素在堆顶 ● 步骤2:重复将堆顶元组移除并插入到排序数组,更新堆使其保持堆的性质 输 出 缓 冲 区 输 入 缓 冲 区 27 败者树算法(GP目前使用堆): ● 1. 输入每个顺串的第一个记录作为败者树的叶子节点。建立初始化败者树。 ● 2. 两两相比较,父亲节点存储了两个节点比较的败者(节点较大的值);胜利者 (较小者)可以参与更高层的比赛。这样树的顶端就是当次比较的冠军(最小 者)。 ● 3. 调整败者树,当我们把最小者输入到输出文件以后,需要从相应的顺串取出 一个记录补上去。补回来的时候,我们就需要调整败者树,我们只需要沿着当前 节点的父亲节点一直比较到顶端。比较的规则是与父亲节点比较,胜者可以参 与更高层的比较,一直向上,直到根节点。失败者留在当前节点。 败者树 28 败者树 1 10 30 44 56 . . . 6 8 34 64 66 . . . 7 11 12 13 17 . . . 22 55 67 77 79 . . .0 码力 | 52 页 | 2.05 MB | 1 年前3
 云原生数据库PieCloudDB 性能优化之路预处理阶段 • 通过逻辑上的等价变换,把查询树转换为更加简单高效的等式 • 分发约束条件,收集外连接信息等 • 扫描/连接优化阶段 • 主要处理扫描和连接操作 • 扫描/连接之外的优化阶段 • 主要处理除扫描和连接之外的其他操作,例如聚集、排序等 • 后处理阶段 • 主要把前面的处理结果转换成执行器期望的形式 • 简化表达式 • 简化连接树 • 把 IN,EXISTS 等类型的子查询转换为半连接 bar (5 rows) • 主要处理查询语句中FROM和WHERE部分 • 同时也会考虑到ORDER BY的信息 • 代价驱动 • 为基表生成扫描路径,并计算扫描路径的代价和结果集大小 • 搜索整个连接顺序空间,为连接操作生成连接路径 • O(n!) • 动态规划 • 遗传算法 • 考虑外连接对连接顺序的限制 (A leftjoin B on (Pab)) innerjoin C0 码力 | 26 页 | 711.44 KB | 1 年前3 云原生数据库PieCloudDB 性能优化之路预处理阶段 • 通过逻辑上的等价变换,把查询树转换为更加简单高效的等式 • 分发约束条件,收集外连接信息等 • 扫描/连接优化阶段 • 主要处理扫描和连接操作 • 扫描/连接之外的优化阶段 • 主要处理除扫描和连接之外的其他操作,例如聚集、排序等 • 后处理阶段 • 主要把前面的处理结果转换成执行器期望的形式 • 简化表达式 • 简化连接树 • 把 IN,EXISTS 等类型的子查询转换为半连接 bar (5 rows) • 主要处理查询语句中FROM和WHERE部分 • 同时也会考虑到ORDER BY的信息 • 代价驱动 • 为基表生成扫描路径,并计算扫描路径的代价和结果集大小 • 搜索整个连接顺序空间,为连接操作生成连接路径 • O(n!) • 动态规划 • 遗传算法 • 考虑外连接对连接顺序的限制 (A leftjoin B on (Pab)) innerjoin C0 码力 | 26 页 | 711.44 KB | 1 年前3
 Greenplum Database 管理员指南 6.2.1........................................................................................ - 93 - 模式搜索路径 ................................................................................................ GUC 参数的属性值,例如设 Greenplum Database 管理员指南 V6.2.1 版权所有:Esena(陈淼 +86 18616691889) 编写:陈淼 - 27 - 置缺省的搜索路径: =# ALTER ROLE admin SET search_path TO myschema, public; 需要注意的是,在 Role 上设置 GUC 参数要进行适当的验证检查,例如,要在 DATABASE命令来修改Database的属性,例如Owner、Name以及缺 省配置等。必须是该Database的Owner或者SUPERUSER才可以执行这样的操作。下 面的例子演示修改缺省的搜索路径: =# ALTER DATABASE mydatabase SET search_path TO myschema, public, pg_catalog;0 码力 | 416 页 | 6.08 MB | 1 年前3 Greenplum Database 管理员指南 6.2.1........................................................................................ - 93 - 模式搜索路径 ................................................................................................ GUC 参数的属性值,例如设 Greenplum Database 管理员指南 V6.2.1 版权所有:Esena(陈淼 +86 18616691889) 编写:陈淼 - 27 - 置缺省的搜索路径: =# ALTER ROLE admin SET search_path TO myschema, public; 需要注意的是,在 Role 上设置 GUC 参数要进行适当的验证检查,例如,要在 DATABASE命令来修改Database的属性,例如Owner、Name以及缺 省配置等。必须是该Database的Owner或者SUPERUSER才可以执行这样的操作。下 面的例子演示修改缺省的搜索路径: =# ALTER DATABASE mydatabase SET search_path TO myschema, public, pg_catalog;0 码力 | 416 页 | 6.08 MB | 1 年前3
 Apache ShardingSphere 中文文档 5.4.112.4.7 解析引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 SQL 解析引擎 . . . . . 8.1 数据分片 8.1.1 背景 传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量 数据的场景。 从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度 的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中 式数据库成为系统的最大瓶颈。 从可用性的方面来讲 分片之后的数据库集 群,是 Apache ShardingSphere 数据分片模块的主要设计目标。 8.1.4 应用场景 海量数据高并发的 OLTP 场景 由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得 磁盘访问的 IO 次数增加,进而导致查询性能的下降。通过 ShardingSphere 数据分片,按照某个业务维 度,将存放在单一数据0 码力 | 530 页 | 4.49 MB | 1 年前3 Apache ShardingSphere 中文文档 5.4.112.4.7 解析引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462 SQL 解析引擎 . . . . . 8.1 数据分片 8.1.1 背景 传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量 数据的场景。 从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度 的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中 式数据库成为系统的最大瓶颈。 从可用性的方面来讲 分片之后的数据库集 群,是 Apache ShardingSphere 数据分片模块的主要设计目标。 8.1.4 应用场景 海量数据高并发的 OLTP 场景 由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得 磁盘访问的 IO 次数增加,进而导致查询性能的下降。通过 ShardingSphere 数据分片,按照某个业务维 度,将存放在单一数据0 码力 | 530 页 | 4.49 MB | 1 年前3
 Apache ShardingSphere 中文文档 5.3.212.4.7 解析引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 SQL 解析引擎 . . . . . 8.1 数据分片 8.1.1 背景 传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量 数据的场景。 从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度 的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中 式数据库成为系统的最大瓶颈。 从可用性的方面来讲 分片之后的数据库集 群,是 Apache ShardingSphere 数据分片模块的主要设计目标。 8.1.4 应用场景 海量数据高并发的 OLTP 场景 由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得 磁盘访问的 IO 次数增加,进而导致查询性能的下降。通过 ShardingSphere 数据分片,按照某个业务维 度,将存放在单一数据0 码力 | 508 页 | 4.44 MB | 1 年前3 Apache ShardingSphere 中文文档 5.3.212.4.7 解析引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441 SQL 解析引擎 . . . . . 8.1 数据分片 8.1.1 背景 传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量 数据的场景。 从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度 的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中 式数据库成为系统的最大瓶颈。 从可用性的方面来讲 分片之后的数据库集 群,是 Apache ShardingSphere 数据分片模块的主要设计目标。 8.1.4 应用场景 海量数据高并发的 OLTP 场景 由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得 磁盘访问的 IO 次数增加,进而导致查询性能的下降。通过 ShardingSphere 数据分片,按照某个业务维 度,将存放在单一数据0 码力 | 508 页 | 4.44 MB | 1 年前3
 Apache ShardingSphere v5.5.0 中文文档12.4.7 解析引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 SQL 解析引擎 . . . . . 8.1 数据分片 8.1.1 背景 传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量 数据的场景。 从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度 的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中 式数据库成为系统的最大瓶颈。 从可用性的方面来讲 分片之后的数据库集 群,是 Apache ShardingSphere 数据分片模块的主要设计目标。 8.1.4 应用场景 海量数据高并发的 OLTP 场景 由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得 磁盘访问的 IO 次数增加,进而导致查询性能的下降。通过 ShardingSphere 数据分片,按照某个业务维 度,将存放在单一数据0 码力 | 557 页 | 4.61 MB | 1 年前3 Apache ShardingSphere v5.5.0 中文文档12.4.7 解析引擎 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 抽象语法树 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488 SQL 解析引擎 . . . . . 8.1 数据分片 8.1.1 背景 传统的将数据集中存储至单一节点的解决方案,在性能、可用性和运维成本这三方面已经难于满足海量 数据的场景。 从性能方面来说,由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度 的增加也将使得磁盘访问的 IO 次数增加,进而导致查询性能的下降;同时,高并发访问请求也使得集中 式数据库成为系统的最大瓶颈。 从可用性的方面来讲 分片之后的数据库集 群,是 Apache ShardingSphere 数据分片模块的主要设计目标。 8.1.4 应用场景 海量数据高并发的 OLTP 场景 由于关系型数据库大多采用 B+ 树类型的索引,在数据量超过阈值的情况下,索引深度的增加也将使得 磁盘访问的 IO 次数增加,进而导致查询性能的下降。通过 ShardingSphere 数据分片,按照某个业务维 度,将存放在单一数据0 码力 | 557 页 | 4.61 MB | 1 年前3
 云原生数据库 PieCloudDB eMPP架构设计与实现ChinaUrnx ,千UB A 2022 2022/12/14-16 2OlO OynamoDB CirroD 叩i Hubble B . SinoOB Ste 云树Sh可d :.. G.IIX卢罩" abr ::::· … .• e …. pyH� un lytlcD r.p ur re 。 Rock.s 2014 是⼀个基于eMPP架构的云原⽣分布式优化器,它 可以为海量数据集上的复杂OLAP查询提供最优的查询计划。 • 分布式优化器 • 处理复杂OLAP查询 • 云原生优化器 处理复杂OLAP查询 多表连接的最 优顺序搜索 多阶段聚集 分区表的静态 和动态裁剪 相关子查询的 提升转换 CTE和递归CTE 的优化 等等 更多⾼阶计算功能 • 聚集下推:1.0已经⽀持,在⼀些情况下可以⼗倍百倍更多倍提升0 码力 | 31 页 | 1.43 MB | 1 年前3 云原生数据库 PieCloudDB eMPP架构设计与实现ChinaUrnx ,千UB A 2022 2022/12/14-16 2OlO OynamoDB CirroD 叩i Hubble B . SinoOB Ste 云树Sh可d :.. G.IIX卢罩" abr ::::· … .• e …. pyH� un lytlcD r.p ur re 。 Rock.s 2014 是⼀个基于eMPP架构的云原⽣分布式优化器,它 可以为海量数据集上的复杂OLAP查询提供最优的查询计划。 • 分布式优化器 • 处理复杂OLAP查询 • 云原生优化器 处理复杂OLAP查询 多表连接的最 优顺序搜索 多阶段聚集 分区表的静态 和动态裁剪 相关子查询的 提升转换 CTE和递归CTE 的优化 等等 更多⾼阶计算功能 • 聚集下推:1.0已经⽀持,在⼀些情况下可以⼗倍百倍更多倍提升0 码力 | 31 页 | 1.43 MB | 1 年前3
 TiDB v5.2 中文手册t[1m]))BY ( �→ le, instance))> 1 • 规则描述: TiDB 处理请求的延时。如果.99 的延迟大于 1 秒,则报警。 • 处理方法: 查看 TiDB 的日志,搜索 SLOW_QUERY 和 TIME_COP_PROCESS 关键字,查找慢 SQL。 256 7.5.1.3.3 TiDB_server_event_error • 报警规则: incre 会把相关的计算和判断下推到其他节点执行,而不是把其他节点的慢 查询数据都取回来在一台 TiDB 上执行。 8.1.5 查询 SLOW_QUERY/CLUSTER_SLOW_QUERY 示例 8.1.5.1 搜索 Top N 的慢查询 查询 Top 2 的用户慢查询。is_internal=false 表示排除 TiDB 内部的慢查询,只看用户的慢查询: select query_time, query +--------------+------------------------------------------------------------------+ 8.1.5.2 搜索某个用户的 Top N 慢查询 下面例子中搜索 test 用户执行的慢查询 SQL,且按执行消耗时间逆序排序显式前 2 条: select query_time, query, user from information_schema0 码力 | 2259 页 | 48.16 MB | 1 年前3 TiDB v5.2 中文手册t[1m]))BY ( �→ le, instance))> 1 • 规则描述: TiDB 处理请求的延时。如果.99 的延迟大于 1 秒,则报警。 • 处理方法: 查看 TiDB 的日志,搜索 SLOW_QUERY 和 TIME_COP_PROCESS 关键字,查找慢 SQL。 256 7.5.1.3.3 TiDB_server_event_error • 报警规则: incre 会把相关的计算和判断下推到其他节点执行,而不是把其他节点的慢 查询数据都取回来在一台 TiDB 上执行。 8.1.5 查询 SLOW_QUERY/CLUSTER_SLOW_QUERY 示例 8.1.5.1 搜索 Top N 的慢查询 查询 Top 2 的用户慢查询。is_internal=false 表示排除 TiDB 内部的慢查询,只看用户的慢查询: select query_time, query +--------------+------------------------------------------------------------------+ 8.1.5.2 搜索某个用户的 Top N 慢查询 下面例子中搜索 test 用户执行的慢查询 SQL,且按执行消耗时间逆序排序显式前 2 条: select query_time, query, user from information_schema0 码力 | 2259 页 | 48.16 MB | 1 年前3
 TiDB v5.1 中文手册t[1m]))BY ( �→ le, instance))> 1 • 规则描述: TiDB 处理请求的延时。如果.99 的延迟大于 1 秒,则报警。 • 处理方法: 查看 TiDB 的日志,搜索 SLOW_QUERY 和 TIME_COP_PROCESS 关键字,查找慢 SQL。 7.5.1.3.3 TiDB_server_event_error • 报警规则: increase(t 会把相关的计算和判断下推到其他节点执行,而不是把其他节点的慢 查询数据都取回来在一台 TiDB 上执行。 8.1.5 查询 SLOW_QUERY / CLUSTER_SLOW_QUERY 示例 8.1.5.1 搜索 Top N 的慢查询 查询 Top 2 的用户慢查询。is_internal=false 表示排除 TiDB 内部的慢查询,只看用户的慢查询: select query_time, query +--------------+------------------------------------------------------------------+ 275 8.1.5.2 搜索某个用户的 Top N 慢查询 下面例子中搜索 test 用户执行的慢查询 SQL,且按执行消耗时间逆序排序显式前 2 条: select query_time, query, user from information_schema0 码力 | 2189 页 | 47.96 MB | 1 年前3 TiDB v5.1 中文手册t[1m]))BY ( �→ le, instance))> 1 • 规则描述: TiDB 处理请求的延时。如果.99 的延迟大于 1 秒,则报警。 • 处理方法: 查看 TiDB 的日志,搜索 SLOW_QUERY 和 TIME_COP_PROCESS 关键字,查找慢 SQL。 7.5.1.3.3 TiDB_server_event_error • 报警规则: increase(t 会把相关的计算和判断下推到其他节点执行,而不是把其他节点的慢 查询数据都取回来在一台 TiDB 上执行。 8.1.5 查询 SLOW_QUERY / CLUSTER_SLOW_QUERY 示例 8.1.5.1 搜索 Top N 的慢查询 查询 Top 2 的用户慢查询。is_internal=false 表示排除 TiDB 内部的慢查询,只看用户的慢查询: select query_time, query +--------------+------------------------------------------------------------------+ 275 8.1.5.2 搜索某个用户的 Top N 慢查询 下面例子中搜索 test 用户执行的慢查询 SQL,且按执行消耗时间逆序排序显式前 2 条: select query_time, query, user from information_schema0 码力 | 2189 页 | 47.96 MB | 1 年前3
共 58 条
- 1
- 2
- 3
- 4
- 5
- 6













