某个表启用tiflash副本后,查询报错。

【 TiDB 使用环境】生产环境
【 TiDB 版本】
【说明】一个表启用tiflash副本后 查询该表数据时报错。
【遇到的问题:问题现象及影响】
一个启用tiflash 副本后,程序查询报错,直连数据库 查询 select 也报错。取消副本后,没再报错。
日志:
[Error] [MPPTask.cpp:429] [“task running meets error: Code: 49, e.displayText() = DB::Exception: Check schema[i].type->equals(storage_schema[i].type) failed, schema[i].name = table_scan_2, schema[i].type->getName() = Nullable(MyDateTime(3)), storage_schema[i].name = c_create_dt, storage_schema[i].type->getName() = Nullable(MyDateTime(0)), e.what() = DB::Exception, Stack trace:\n\n\n 0x172370e\tDB::Exception::Exception(std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator > const&, int) [tiflash+24262414]\n \tdbms/src/Common/Exception.h:46\n 0x6e927d2\tDB::PhysicalTableScan::transformImpl(DB::DAGPipeline&, DB::Context&, unsigned long) [tiflash+115943378]\n \tdbms/src/Flash/Planner/plans/PhysicalTableScan.cpp:69\n 0x6e6c1ce\tDB::PhysicalAggregation::transformImpl(DB::DAGPipeline&, DB::Context&, unsigned long) [tiflash+115786190]\n \tdbms/src/Flash/Planner/plans/PhysicalAggregation.cpp:92\n 0x6e8f81a\tDB::PhysicalProjection::transformImpl(DB::DAGPipeline&, DB::Context&, unsigned long) [tiflash+115931162]\n \tdbms/src/Flash/Planner/plans/PhysicalProjection.cpp:139\n 0x6e78bad\tDB::PhysicalExchangeSender::transformImpl(DB::DAGPipeline&, DB::Context&, unsigned long) [tiflash+115837869]\n \tdbms/src/Flash/Planner/plans/PhysicalExchangeSender.cpp:55\n 0x6e5ab11\tDB::Planner::execute() [tiflash+115714833]\n \tdbms/src/Flash/Planner/Planner.cpp:36\n 0x6d444c9\tDB::(anonymous namespace)::executeDAG(DB::IQuerySource&, DB::Context&, bool) [tiflash+114574537]\n \tdbms/src/Flash/executeQuery.cpp:88\n 0x6d43fc0\tDB::executeQuery(DB::Context&, bool) [tiflash+114573248]\n \tdbms/src/Flash/executeQuery.cpp:108\n 0x6e28c1b\tDB::MPPTask::runImpl() [tiflash+115510299]\n \tdbms/src/Flash/Mpp/MPPTask.cpp:365\n 0x1805f28\tauto DB::wrapInvocable<std::__1::function<void ()> >(bool, std::__1::function<void ()>&&)::‘lambda’()::operator()() [tiflash+25190184]\n \tdbms/src/Common/wrapInvocable.h:36\n 0x1809723\tDB::DynamicThreadPool::executeTask(std::__1::unique_ptr<DB::IExecutableTask, std::__1::default_deleteDB::IExecutableTask >&) [tiflash+25204515]\n \tdbms/src/Common/DynamicThreadPool.cpp:101\n 0x1808d80\tDB::DynamicThreadPool::fixedWork(unsigned long) [tiflash+25202048]\n \tdbms/src/Common/DynamicThreadPool.cpp:115\n 0x1809e72\tvoid std::__1::__thread_proxy<std::__1::tuple<std::__1::unique_ptr<std::__1::__thread_struct, std::__1::default_deletestd::__1::__thread_struct >, std::__1::thread DB::ThreadFactory::newThread<void (DB::DynamicThreadPool::)(unsigned long), DB::DynamicThreadPool, unsigned long&>(bool, std::__1::basic_string<char, std::__1::char_traits, std::__1::allocator >, void (DB::DynamicThreadPool::&&)(unsigned long), DB::DynamicThreadPool&&, unsigned long&)::‘lambda’(auto&&…), DB::DynamicThreadPool*, unsigned long> >(void*) [tiflash+25206386]\n \t/usr/local/bin/…/include/c++/v1/thread:291\n 0x7f9ebba88ea5\tstart_thread [libpthread.so.0+32421]\n 0x7f9ebae8db0d\tclone [libc.so.6+1043213]”] [source=MPPquery:446079017190424586:1,task] [thread_id=113]

设置副本之后要等待 tiflash 副本同步完成才可以使用
可以通过以下命令确认 tiflash 副本具体状态:
select * from information_schema.tiflash_replica;

进度已经是1 了。 是之前配置上的tiflash。

感觉和日期时间类型 的字段 有什么关系?现在搞不清什么问题。

把你查询的语句发出来,看看是否需要走tiflash,好确定原因,最好带上执行计划

查询语句 就是简单的 select count(1) from table;
业务系统查询 select * from table where … 走tiflash了,才报错的。

现在生产环境没法复现问题。

可以把表结构和一条数据提出来吗?我测试下

没复现

嗯, 说不准是那条或者那部分数据引起的。等表再启用tiflash副本,试试。