前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用TiFlash ? 干货分享

如何使用TiFlash ? 干货分享

原创
作者头像
杨漆
修改2021-01-25 10:37:49
9900
修改2021-01-25 10:37:49
举报
文章被收录于专栏:Tidb

如何使用TiFlash ? 干货分享

TiFlash 部署完成后要手动指定需要同步的表才能发挥出OLAP效果。

例:ALTER TABLE ‘test’.’tab_a’ SET TIFLASH REPLICA 2

备注:2表示需要两个副本;若设置为0表示删除。

查看副本状态:

SELECT * FROM information_schema.tiflash_replica WHERE TABLE_SCHEMA = 'TEST' and TABLE_NAME = ' TAB_A '

当AVAILABLE字段为1 代表可用,0 代表不可用(副本状态为1后就不再改变,若通过 DDL 命令修改副本数量则会重新计算同步进度)。

PROGRESS 字段代表同步进度,通常位于0.0~1.0 之间,1 代表至少 1 个副本已经完成同步。

TiFlash存储可以分别被 TiDB 、TiSpark 读取(分析数据量特别大时使用TiSpark,反之则使用TiDB)

A.数据规模大时开启TiSpark

方法1

vi   spark-defaults.conf 

添加一条

spark.tispark.use.tiflash true

备注: 设置为true 时所有的查询都只读取TiFlash 副本(此时要求被查询所用到的表都必须已创建了 TiFlash 副本,若对未创建 TiFlash副本的表进行查询会报错);设置为 false 时只读取 TiKV 副本。

方法2

启动 Spark shell 或 Thrift server 时,命令行中添加

 --conf spark.tispark.use.tiflash=true

方法3

Spark shell 中实时设置:

spark.conf.set("spark.tispark.use.tiflash", true)

方法4

Thrift server 通过 beeline 连接后实时设置:

set spark.tispark.use.tiflash=true

B.数据规模一般时使用Tidb读取

  模式1:CBO

  当添加了 TiFlash 副本而没有做任何 engine配置时默认使用 CBO 方式,优化器会自动根据代价估算智能选择是否使用 TiFlash 副本。

通过 desc 或 explain analyze 查看最终是否读取了tiflash副本

desc select count(*) from test.tab;

explain analyze select count(*) from test.tab;

执行计划中出现cop[tiflash]表示读取了tiflash副本。

很多时候当没有进行统计信息收集时,CBO会不选择tiflash,此时收集一下统计信息(analyze table)后再查看执行计划。

特殊情况:当表仅有单个 TiFlash 副本且相关节点无法服务,智能选择模式下的查询会不断重试,需要指定 Engine 或者手工 Hint 来读取TiKV 副本。

模式2: Engine 隔离

通过配置变量来指定所有的查询使用指定engine 的副本。

INSTANCE 级别设置,在 TiDB 配置文件添加如下配置项:

[isolation-read]

engines = ["tikv", "tidb", "tiflash"]

备注:其中 "tidb" 表示 TiDB 内部的内存表区,主要存储TiDB 系统表,用户不能主动使用。由于 TiDB Dashboard 等组件需要读取一些存储于TiDB 内存表区的系统表, engine 配置中最好加入 "tidb" engine。

SESSION 级别设置:

set@@session.tidb_isolation_read_engines = "tikv, tidb, tiflash";

set session  tidb_isolation_read_engines = "tikv, tidb, tiflash";

如果查询中的表没有对应 engine 的副本,会报错提示:该表不存在该 engine 副本。(比如配置了 engine 为 "tiflash", 而该表没有 TiFlash副本)

模式3: 手工 Hint

在满足 engine 隔离的前提下,强制 TiDB 对于某张或某几张表使用指定的副本。

单表:

select /*+ read_from_storage(tiflash[tab]) */ ... from tab;

多表:

select /*+ read_from_storage(tiflash[a, b]) */ ... from tab_1 as a, tab_2 as b where a.col1 = b.col2;

备注:tiflash[] 提示优化器读取 TiFlash 副本,亦可根据需要使用 tikv[] 提示优化器读取 TiKV副本。

Hint 必须在满足 engine 隔离的前提下才会生效,若 Hint 指定的引擎不在 engine 隔离列表中会被忽略,并产生 warning。若Hint 指定的表在指定的引擎上不存在副本,也会被忽略,并产生 warning。

计算下推特性:

TiFlash 支持谓词、聚合下推计算以及表连接,下推的计算可以帮助 TiDB 进行分布式加速。(有些计算类型暂不支持:Full Outer Join 、 DISTINCT COUNT)

开启计算下推的命令(session级)

set @@session.tidb_opt_broadcast_join=1

目前4.0版本的TiFlash 支持如下有限的常用表达式下推:

+, -, /, *, >=, <=, =, !=, <, >, ifnull, isnull, bitor, in, mod, bitand, or, and, like, not,

case when, month, substr, timestampdiff, date_format, from_unixtime, json_length, if, bitneg, bitxor, round without fraction, cast(int as decimal), date_add(datetime, int), date_add(datetime, string)

4.0版本中TiFlash 不支持下推的情况包括:

• 所有包含 Duration 的表达式均不能下推

• 在聚合函数或者 WHERE 条件中包含了不在上述列表中的表达式,聚合或者相关的谓词过滤均不能下推。

如查询遇到不支持的下推计算,则需要依赖TiDB 完成剩余计算,可能会很大程度影响TiFlash 加速效果。Tidb官方称:后续版本会陆续完善相关问题。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档