tilfash 挂掉以后,表就无法访问了

请问一下,tiflash 挂掉以后,就无法查询有tiflash副本的表了,这样的结果算正常吗,即使tidb_isolation_read_engines 参数idb_isolation_read_engines也包含tikv


你得显示指定

不显示指定呢?万一再生产环境中,tiflash 宕机了,那些需要用到tiflash的语句都执行不了?感觉这样设计不科学啊,tilflash 访问不了,就应该去访问tikv哈

tidb_allow_fallback_to_tikv 从 v5.0 版本开始引入
作用域:SESSION | GLOBAL
是否持久化到集群:是
默认值:""
这个变量表示将 TiKV 作为备用存储引擎的存储引擎列表。当该列表中的存储引擎发生故障导致 SQL 语句执行失败时,TiDB 会使用 TiKV 作为存储引擎再次执行该 SQL 语句。目前支持设置该变量为 “” 或者 “tiflash”。如果设置该变量为 “tiflash”,当 TiFlash 返回超时错误(对应的错误码为 ErrTiFlashServerTimeout)时,TiDB 会使用 TiKV 作为存储引擎再次执行该 SQL 语句。

谢谢大佬,但是感觉这个参数的默认值设置为"" 不太合理,应该设置为tif lash

这个考虑是优先保证tp业务,如果tiflash挂掉之后,很多ap类的大查询打到tikv上有可能会影响tp业务,因此默认是"",可以根据实际情况来设置

有道理,谢谢老师,那么请问下,tidb 认为多少秒内tiflash无法访问就去访问tikv呢?这个超时时间大概是多少呢?

那么请问一下,tidb 认为多少秒内tiflash无法访问就去访问tikv呢?这个超时时间大概是多少呢?

When running clientConn.handleQuery / clientConn.handleStmtExecute , if we get ErrTiFlashServerTimeout error and the execution of SQL does’t have side effect (If TiDB server already sends data to client or the execution is in cursor mode, the execution has side effect), we delete TiFlash from IsolationReadEngines , retry executing the SQL and add TiFlash back to IsolationReadEngines . Besides, we use a switch tidb_enable_tiflash_fallback_tikv to control whether to retry and the switch is off by default.