SQL类 场景描述 TaurusDB存储过程执行很慢,处理少量数据耗时1min以上,而单独执行存储过程中的SQL语句却很快。 原因分析 存储过程和相关表、库的字符集不一致,导致查询结果存在大量字符转换,从而执行缓慢。 排查过程: 使用如下命令查看存储过程和相关表的定义,观察存储过程和表的字符集是否一致。 SHOW CREATE PROCEDURE xxx; SHOW CREATE TABLE xxx 示例: mysql> SHOW CREATE PROCEDURE testProc G 1. row Procedure: showstuscore sqlmode: STRICTTRANSTABLES,NOAUTOCREATEUSER,NOENGINESUBSTITUTION Create Procedure: xxx charactersetclient: utf8mb4 collationconnection: utf8mb4generalci Database Collation: utf8generalci 1 row in set (0.01 sec) 可以看出,上述存储过程collation为utf8mb4generalci,而所在库collation默认为utf8generalci,collation值不一致,容易导致性能问题。 解决方案 将存储过程和相关表、库的字符集改成一致后,执行缓慢问题解决。 报错ERROR [1412]的解决方法 场景描述 连接TaurusDB执行SQL时,出现如下报错: ERROR[1412]:Table definition has changed, please retry transaction 原因分析 启动一致性快照事务后,其他会话(session)执行DDL语句导致。问题复现步骤: 1. 会话1启动一致性快照事务。 2. 会话2执行DDL操作,修改表结构。 3. 会话1执行普通的查询语句。 也可以通过Binlog或者审计日志,分析业务侧是否有同一个表DDL和一致性快照事务一起执行的情况。