问题描述
客户反馈:多个SQL或存储过程执行时间较长,在KStudio工具中能返回数据,但是通过应用就会抛出报错:57014 canceling statement due to user request ,对SQL或存储过程优化后报错消失,让数据库层面检查原因。
现场环境信息:驱动:Kdbndp_V9/8.0.3.911
数据库版本:KingbaseES_V009R004C019B0004 SQLServer兼容模式

报错说明:SQLSTATE=57014,query_canceled,数据库收到取消本次 SQL 执行的信号 ,不是 SQL 语法报错。 从字面意思看:因为用户端请求,取消了正在执行的 SQL ,"用户" 不一定是人,客户端程序、驱动、超时都属于用户侧请求 。
分析过程
1、检查连接串,未配置超时参数;
2、检查数据库中超时参数,默认值0:不超时 ( idle_in_transaction_session_timeout、statement_timeout 和 client_idle_timeout );
3、检查Kdbndp驱动Command对象的属性,参数CommandTimeout 默认 30s。
解决办法
有以下2种解决办法:
- 连接串中增加 CommandTimeout 参数并设置合理值;
- 在KdbndpCommand对象的属性中,找到参数CommandTimeout 参数并设置合理值。