TIDB 5.0

为提高效率,请提供以下信息,问题描述清晰能够更快得到解决:

【TiDB 版本】
v5.0
【问题描述】
为什么每次 set设置的 参数 只要集群一重启 就失效了

若提问为性能优化、故障排查类问题,请下载脚本运行。终端输出的打印结果,请务必全选并复制粘贴上传。

系统变量

TiDB 系统变量的行为与 MySQL 相似但有一些不同,变量的作用范围可以是全局范围有效 (Global Scope)、实例级别有效 (Instance Scope) 或会话级别有效 (Session Scope),或组合了上述多个范围。其中:

  • GLOBAL 作用域变量的更改,设置后 只对新 TiDB 连接会话生效 ,当前活动连接会话不受影响。更改会被持久化,重启后仍然生效。
  • INSTANCE 作用域变量的更改,设置后会立即对当前 TiDB 实例所有活动连接会话或新连接会话生效,其他 TiDB 实例不生效。更改 不会 被持久化,重启 TiDB 后会 失效

使用 SET 语句可以设置变量的作用范围为全局级别、实例级别或会话级别。

# 以下两个语句等价地改变一个 Session 变量
SET tidb_distsql_scan_concurrency = 10;
SET SESSION tidb_distsql_scan_concurrency = 10;

# 以下两个语句等价地改变一个 Global 变量
SET @@global.tidb_distsql_scan_concurrency = 10;
SET  GLOBAL tidb_distsql_scan_concurrency = 10;

注意:

  • 在 TiDB 中, GLOBAL 变量的设置即使重启后也仍然有效。每隔 2 秒,其他 TiDB server 会获取到对变量设置的更改。详情见 TiDB #14531
  • 此外,由于应用和连接器通常需要读 MySQL 变量,为了兼容这一需求,在 TiDB 中,部分 MySQL 5.7 的变量既可读取也可设置。例如,尽管 JDBC 连接器不依赖于查询缓存 (query cache) 的行为,但仍然可以读取和设置查询缓存。

具体要看你设置的是什么参数

set tidb_opt_agg_push_down=1;

INSTANCE 作用域变量的更改,更改 不会 被持久化,重启 TiDB 后会 失效

tidb_opt_agg_push_down

  • 作用域:SESSION
  • 默认值:OFF
  • 这个变量用来设置优化器是否执行聚合函数下推到 Join,Projection 和 UnionAll 之前的优化操作。当查询中聚合操作执行很慢时,可以尝试设置该变量为 ON。
1 个赞

TiDB3.0的时候,我们开启大事务都是在每个语句前set一下变量,那个也是INSTANCE的变量

1 个赞

好的谢谢

:handshake::handshake::handshake:

其实 现在遇到一个问题就是 主表关联子表查询很慢 单表数据量八千多万 查询 要50秒左右 现在找不到问题 sql 已经 全部优化了

我们也在做优化,返回结果字段少的话,可以考虑用TiFlash,速度绝对飞起

SELECT
COUNT(1)
FROM
shopee_item t
WHERE item_id IN
(SELECT
item_id
FROM
shopee_variations v
WHERE v.sellerid IN (
164,
168,
170,
65,
84,
139,
189,
82,
191,
193,
195,
196,
206,
207,
59,
208,
209,
210,
211,
212,
213,
67,
214,
63,
215,
216,
217,
218,
219,
220,
221,
222,
223,
224,
225,
226,
227,
228,
229,
230,
231,
232,
233,
234,
235,
236,
237,
238,
239,
240,
241,
242,
243,
244,
245,
246,
247,
248,
249,
250,
251,
252,
253,
254,
255,
256,
257,
258,
259,
260,
261,
262,
263,
264,
266,
274,
275,
278,
279,
280,
285,
303,
309,
312,
313,
314,
315,
316,
319,
320,
321,
283,
286,
433
)) ;

集群里面已经添加了

这是强制使用TiFlash的语法,开启TiFlash后,如果有索引,是不会自动走TiFlash的,需要强制使用
SELECT /*+ read_from_storage(tiflash[t]) */
COUNT(1)
FROM shopee_item t

另外,这几个表加到TiFlash里了么?注意看执行计划,如果执行计划中的cop[tikv]变成了cop[tiflash]就代表走TiFlash了

主表和子表 都需要 去添加的对吧 ```
ALTER TABLE table_name SET TIFLASH REPLICA count

按需去加,没必要都加上

此话题已在最后回复的 1 分钟后被自动关闭。不再允许新回复。