本文汇总了AnalyticDB MySQL版集群中的常见查询报错问题及处理建议。
查询报错QUERY_EXCEED_LIMIT ErrMsg:groups 100000001 exceed limit => 10000000
用户在执行SQL查询用limit处理分页时,如果start值限制10000无法获取10000以后的数据,如:LIMIT 1000000,20
。分析型数据库MySQL版对分页数量有限制,即查询返回结果集限制10000行。分析型数据库MySQL版会对select语句查询的返回结果集做全局最大限制,如果不加limit或limit函数超过10000,则只能返回10000行。
可以在查询中添加注解
/*+limitmax=<最大值>*/
,例如/*+limitmax=2000000*/select * from ar_express3 limit 1000000,20`
。请联系技术支持申请调整默认返回限制。
查询时遇到memory is not enough
由于分析型数据库MySQL版查询时,大量数据存在内存中。当SQL所需处理单表或者多表join时的结果较大时,计算节点内存会成为系统瓶颈。分析型数据库MySQL版CN节点为避免SQL压垮系统,会进行自我保护,自动将查询消耗内存较大的SQL fail掉,保证其它查询正常。因此当查询分析型数据库MySQL版报错提示memory is not enough
,有以下2种建议:
优化SQL,尽量不返回可有可无的结果集,同时尽量对不关心的数据添加过滤条件。若没有很好的处理方法,请联系分析型数据库MySQL版技术支持。
若在现有业务基础上无法进行SQL优化,可考虑DB资源扩容,甚至是调整资源模型规格。
查询时报错,提示scanRows exceed limit
分析型数据库MySQL版查询时报错,错误信息为:ErrMsg:ErrCode:2001 ErrType:QUERY_EXCEED_LIMIT ErrMsg:scanRows exceed limit: xxx >
为避免用户输入的SQL误写或性能较差,从而导致扫描表的大量数据集,分析型数据库MySQL版会进行scan限制。当SQL scan的行数达到一定数量时,会fail掉SQL的执行并提示用户scanRows exceed limit
错误信息。当遇到该错误时,建议进行以下改进:
从SQL本身进行优化,尽量添加更多的过滤条件,筛选出需要关注的数据进行计算。
判断select的列是否都有必要获取,因为一个SQL可scan的数据条数=系统默认值/select的列数,若列数减少则可scan的数据条数更多。
若SQL自身无法进行优化,但依旧触发该错误,可联系分析型数据库MySQL版技术支持对单个分析型数据库MySQL版的系统默认值进行调整,此操作可能会造成数据库性能下降。
查询提示错误META_COLUMN_NOT_EXIST
在分析型数据库MySQL版表新增字段后,查询提示找不到新添加的列,具体是什么原因?表正在上线,但是上线失败或者CN副本在重启,都有可能出现META_COLUMN_NOT_EXIST
。
对于普通表
一级普通表:新增字段且执行optimize成功后可查询到新增字段(老数据为null)。
二级普通表:新增字段且需触发最大二级分区的optimize,待optimize成功后可查询到新增字段。
对于未上线或者CN副本重启导致的报错,请检查上线情况或者重启情况。
说明optimize操作为异步后台操作(目前未开放接口给用户,可联系分析型数据库MySQL版技术支持),需等待任务完成后再做查询。
查询刚刚创建的新表时报错table is not ready
新创建的表,可以INSERT数据,但查询该表报错table is not ready
。
ERROR 30007 (HY000): ProcessId=2017113014015101015416910909999087231 RT_ROUTER_ERROR tableId=28 DBId=1405 message=real time table is not ready.
一般表建好以后,还需分配相应的资源,需等待几分钟表才能正常使用,否则就会报not ready
错误。
查询报错NO_NODES_AVAILABLE
报错关键字: NO_NODES_AVAILABLE
报错信息:
ERROR 1105 (HY000): MPP_QUERY_FAILED Retry_time=1 message=MPP engine error code: 30101, message: QueryError{message=Node for bucket is offline: [], sqlState=null, errorCode=65541, errorName=NO_NODES_AVAILABLE, errorType=INTERNAL_ERROR, errorLocation=null, failureInfo=mpp.client.FailureInfo@13887b2e}
一般是数据库内部某个计算节点压力较大导致该节点暂时离线,系统能够自动修复。请用户过5~10分钟后重试。如果长时间出现该报错,请联系分析型数据库MySQL版技术支持。
查询性能不稳定
在分析型数据库MySQL版中执行SQL查询语句时,时慢时快。引起分析型数据库MySQL版查询不稳定的因素一般有以下几种:
用户执行SQL时首次较慢,之后查询明显比第一次快,这是因为分析型数据库MySQL版自身带有缓存。第一次查询时会将数据缓存到内存中,若下次查询所需要的数据依然在内存中时,此时不用再次读磁盘,因此访问速度很快。
用户使用的是普通表,且写入大量数据后未执行optimize操作,此时执行SQL会随着插入数据多而变得越来越慢。这是因为分析型数据库MySQL版的实时数据增量部分默认未建索引,因此执行查询时会频繁访问磁盘。为保证查询速度,建议当用户执行过大量INSERT或DELETE语句后,立即触发一次optimize table操作。
用户对普通表执行大量的DELETE语句,而这些DELETE的条件中没有指定分区键,导致系统在所有分区上执行DELETE,耗费CN上大量CPU和内存资源。此时其他查询也有可能变慢或超时。
按上述排查后还存在问题,请联系分析型数据库MySQL版技术支持。
查询报错IN expr values exceed limit
带有IN ()
条件的查询报错IN expr values exceed limit
,默认情况下,如果IN ()
中的值的个数大于50,则会报该错误。如果要修改此限制,请联系分析型数据库MySQL版技术支持。