
暂无个人介绍
能力说明:
了解变量作用域、Java类的结构,能够创建带main方法可执行的java应用,从命令行运行java程序;能够使用Java基本数据类型、运算符和控制结构、数组、循环结构书写和运行简单的Java程序。
暂时未有相关云产品技术能力~
阿里云技能认证
详细说明整体架构PolarDB-X的整体架构如下:核心组件元数据服务(Global Meta Service,GMS),主要提供分布式的元数据,提供全局授时服务(TSO)、维护Table/Schema、Statistic等Meta信息、维护账号、权限等安全信息。计算节点(Compute Node,CN),主要提供分布式SQL引擎,包含核心的优化器和执行器。基于无状态的SQL引擎提供分布式路由和计算,解决分布式事务2PC协调、分布式DDL执行、全局索引维护等。存储节点 (Date Node,DN),主要提供数据存储引擎,基于多数派Paxos共识协议提供高可靠存储、分布式事务的MVCC多版本存储,另外提供计算下推能力满足分布式的计算下推要求(比如Project/Filter/Join/Agg等下推计算),可支持本地盘和共享存储。日志节点(Change Data Capture,CDC),主要提供兼容MySQL生态的主备复制协议,兼容Binlog协议和数据格式、支持主备复制Replication的协议和交互。核心模块如同大多数传统单机关系型数据库,PolarDB-X分为网络层、SQL解析层、优化层、执行层、存储层,其中优化层包含逻辑优化和物理优化,执行层包含单机两阶段执行、单机并行执行和多机并行执行,存储层包含应用了多种传统单机数据库优化和执行技术。生态工具PolarDB-X高度兼容MySQL协议和生态,可支持MySQL开源生态中常用的MySQL驱动(JDBC/ODBC)、多语言兼容(Java/GO/C/C++/Python等)、数据导入导出工具、各种客户端GUI等。PolarDB-X提供完整的生态工具方案,如下图所示:闭环的生态工具:数据管理DMS,基于阿里巴巴集团十余年的数据库服务平台的云版本,提供免安装、免运维、即开即用、多种数据库类型与多种环境统一的web数据库管理终端,可以为企业用户快速复制搭建与阿里集团同等安全、高效、规范的数据库DevOps研发流程解决方案。数据库自治服务(Database Autonomy Service,简称DAS),一种基于机器学习和专家经验实现数据库自感知、自修复、自优化、自运维及自安全的云服务,帮助用户消除数据库管理的复杂性及人工操作引发的服务故障,有效保障数据库服务的稳定、安全及高效。数据传输服务(Data Transmission Service,简称DTS),支持关系型数据库、NoSQL、大数据等数据源,集数据迁移、订阅及实时同步功能于一体,能够解决公共云、混合云场景下,远距离、毫秒级异步数据传输难题。其底层基础设施采用阿里双11异地多活架构,为数千下游应用提供实时数据流。数据库备份(Database Backup,简称DBS),低成本、企业级的云原生备份平台。它可以为多种环境的数据库提供强有力的保护,包括本地数据中心、其他云厂商、公共云及混合云。产品架构PolarDB-X作为阿里云的成熟云产品,在产品化的配套能力上支持比较完整,包括白屏化的运维操作、多样化的交付形态、完整的OpenAPI、配套的生态工具等。PolarDB-X部署架构整体基于Kubernetes,运行在高性能的物理机,产品架构设计如下:PolarDB-X实例由多个节点组成,产品购买以节点为单位,初次购买必须包含2个节点,后续扩容和缩容最小为1个节点。每个节点会有多种规格,比如4c16g、8c32g、16c64g等。PolarDB-X根据资源隔离诉求的不同,可以分为:通用规格、独享规格、独占物理机规格。 比如通用规格,同一硬件资源下的不同PolarDB-X实例,会互相充分利用彼此空闲的计算资源(如CPU),通过复用计算资源享受规模红利,性价比会更高。而独享规格每个PolarDB-X实例会独占所分配到的计算资源(如CPU),而不会与同一服务器上的其他集群共享资源,性能表现更加稳定。PolarDB-X支持公有云、混合云的多样化交付。在公有云,支持多地域、多可用区的交付,同时在网络和安全层面,支持VPC、IP白名单、非对称账号密码、TDE加密等方式,确保数据服务安全。 在混合云,支持基于DBStack轻量化输出,可在用户已有机器硬件上完成数据库部署和运维。架构优势高可用经过阿里多年双11验证的X-DB(X-Paxos共识协议能力),提供数据强一致,保证节点故障切换时RPO=0。另外支持多样化的部署和容灾能力,比如基于Paxos强同步的同城三机房、三地五中心,另外搭配binlog异步复制的两地三中心、异地灾备、异地多活等。尤其在异地长距离传输上,基于Batching & Pipelining 进行网络优化来提升性能。高兼容PolarDB-X主要兼容MySQL,包括SQL、函数类型等,技术上引入全局时间授时服务,提供全局一致性的分布式事务能力,通过TSO+2PC提供数据库完整的ACID能力,满足分布式下的Read-Commited/Repeatable-Read的隔离级别。同时在分布式事务的基础上,提供全局二级索引能力,通过事务多写保证索引和主表数据强一致的同时,引入基于代价的CBO优化器实现索引选择。除此以外,在元数据和生态对接层面,PolarDB-X基于Online DDL的技术提供了分布式下元数据的一致性。同时硬件层面,兼容主流国产操作系统和芯片认证,比如麒麟、鲲鹏、海光等。另外在业界主流的分布式数据库里,分布式下的redolog/binlog等数据库变更日志其实一直被厂商所忽视,从关系数据库的发展历史来看,生态和标准对于市场规模化非常重要,PolarDB-X 会支持全局binlog能力,全面兼容和拥抱MySQL数据库生态,用户可以将PolarDB-X当做一个MySQL库,采用标准的binlog dump协议获取binlog日志。高扩展PolarDB-X基于Share-Nothing的架构支持水平扩展,同时支持数据库在线扩缩容能力,在OLTP场景下可支持千万级别的并发、以及PB级别的数据存储规模,同样在OLAP场景下,引入MPP并行查询技术,扩展机器后查询能力可线性提升,满足TPC-H等的复杂报表查询诉求。HTAP随着移动互联网和Iot设备的普及,数据会产生爆炸式的增长趋势,传统的OLTP和OLAP的解决方案是基于简单的读写分离或者ETL模型,将在线库的数据T+1的方式抽取到数据仓库中进行计算,这种方案存在存储成本高、实时性差、链路和维护成本高。PolarDB-X 设计中支持OLTP和OLAP的混合负载的能力,可以在一个实例里同时运行TPC-C和TPC-H的benchmark测试,保证AP的查询不影响TP流量的稳定性。核心技术层面,我们也有自己的创新性,比如我们会在计算层精确识别出TP和AP的流量,结合多副本的特性和多副本的一致性读能力,智能将TP和AP路由到不同的副本上,同时在AP链路上默认开启MPP并行查询技术,从而在满足隔离性的基础上,线性提升AP的查询能力。在存储层上,我们也在完善计算下推能力,未来也会提供高性能列存引擎,实现行列混合的HTAP能力。极致弹性PolarDB-X结合PolarDB云原生的技术,可以基于PolarDB的共享存储+RDMA网络优化能力,提供秒级备份、极速弹性、以及存储按需扩展的能力。基于共享存储的基础上,结合分布式的多点写入能力,可以在不迁移数据的前提下提供秒级弹性的能力,给到用户完全不一样的弹性体验。开放生态PolarDB-X全面拥抱和坚定MySQL的开源生态,做到代码完全自主可控的同时满足分布式MySQL的兼容性,架构做到简单开放,只要具备一定MySQL背景的同学即可完成持续运维。除此以外,PolarDB-X和阿里云的数据库生态有完整的闭环对接,支持如DTS/DBS/DMS等,可打通阿里云的整个大生态。
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
五、关于锁的判定5.1 lock_sec_rec_read_check_and_lock函数主要用于二级索引数据查找段阶段加显示锁,,对于update/delete而言,首先是需要找到需要修改的数据,加锁前需要判断本记录是否存在隐式锁,由于二级索引行数据不包含trx id,因此先用page的max trx id和当前活跃的最小读写事务进行比对判断,如果大于等于则可能存在显示锁,然后需要回表通过主键进行精细化判断。而精细化回表判断行是否存在隐式锁,那么代价就比较大了,因此这需要一个判断流程如下lock_sec_rec_read_check_and_lock: if ((page_get_max_trx_id(block->frame) >= trx_rw_min_trx_id() || recv_recovery_is_on()) && !page_rec_is_supremum(rec)) { lock_rec_convert_impl_to_expl(block, rec, index, offsets);//如果符合前面的条件才调入 lock_rec_convert_impl_to_expl } 如下调入:->lock_rec_convert_impl_to_expl ->lock_sec_rec_some_has_impl ->row_vers_impl_x_locked 此处会进行聚集索引的回表,同样是通过二级索引进行定位返回btr_cur_search_to_nth_level ->row_vers_impl_x_locked_low 最后会调入 row_vers_impl_x_locked_low函数进行核心判断 栈如下:#0 row_vers_impl_x_locked_low (clust_rec=0x7fff39a21226 "\200", clust_index=0x7ffeb5092680, rec=0x7fff39a2ac30 "\200", index=0x7ffeb5093610, offsets=0x7fffe8461730, mtr=0x7fffe8460e90) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/row/row0vers.cc:101#1 0x0000000001b2c84e in row_vers_impl_x_locked (rec=0x7fff39a2ac30 "\200", index=0x7ffeb5093610, offsets=0x7fffe8461730) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/row/row0vers.cc:390#2 0x00000000019e8448 in lock_sec_rec_some_has_impl (rec=0x7fff39a2ac30 "\200", index=0x7ffeb5093610, offsets=0x7fffe8461730) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/lock/lock0lock.cc:1276#3 0x00000000019f339a in lock_rec_convert_impl_to_expl (block=0x7fff38d94ca0, rec=0x7fff39a2ac30 "\200", index=0x7ffeb5093610, offsets=0x7fffe8461730) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/lock/lock0lock.cc:6124#4 0x00000000019f3dd2 in lock_sec_rec_read_check_and_lock (flags=0, block=0x7fff38d94ca0, rec=0x7fff39a2ac30 "\200", index=0x7ffeb5093610, offsets=0x7fffe8461730, mode=LOCK_X, gap_mode=1024, thr=0x7ffeb4c89358) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/lock/lock0lock.cc:6357#5 0x0000000001af7271 in sel_set_rec_lock (pcur=0x7ffeb4c887d8, rec=0x7fff39a2ac30 "\200", index=0x7ffeb5093610, offsets=0x7fffe8461730, mode=3, type=1024, thr=0x7ffeb4c89358, mtr=0x7fffe8461a50) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/row/row0sel.cc:1278#6 0x0000000001b00049 in row_search_mvcc (buf=0x7ffeb4977070 "\370\211\037", mode=PAGE_CUR_GE, prebuilt=0x7ffeb4c885b0, match_mode=1, direction=1) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/row/row0sel.cc:5710但是需要注意的是,max trx id只会在二级索引上更新,并且每次更新一行都会更新掉,那么引起的一个问题就是如果连续多次删除同一个二级索引上的记录(delete from testimp4 where b=7700;),除第一次以外都会调入row_vers_impl_x_locked_low这个函数,因为这是查询一行加锁一行修改一行(每行都会修改page的max trx id)的。但是update却不同,update如果修改本二级索引的值一般会进入(如:update testimp4 set b=1500 where b=1800;)Searching rows for update状态,先建立一个临时文件来先存储需要更改的行记录,然后进行批量更改进入updating状态,那么则不会出现这种问题,因为这是在数据查找阶段进行的判断,而不是数据修改阶段。又比如(如:update testimp2 set c='a' where b=1800)这样的语句也不会触发,这是因为b索引的行记录一直没有改变,因此不会修改b索引page的max trx id。因此update很好的规避了这个问题不会频繁的进入函数row_vers_impl_x_locked_low进行判定,但是delete却不行。关于row_vers_impl_x_locked_low函数对于二级索引是否存在隐式锁的判定,比较复杂分为好多种情况,不再描述。因此最开始我们看到的问题,这个过程已经进入了row_vers_impl_x_locked_low函数,那么可以判断这个delete语句可能更新了多行(但是从代码行数上判断不是这种情况),或者有可能本语句事务做过修改本语句修改记录的其他语句,需要进行精细化判断。5.2 lock_sec_rec_modify_check_and_lock主要用于数据修改阶段加隐式锁,二级索引由于行数据的修改(update修改了本二级索引字包含段值或者尾部的主键)而被动维护的加锁。注意如果是select for update where条件是主键则不会加判断二级索引是否包含隐含锁,如果出现冲突会堵塞在主键上。5.3 lock_clust_rec_read_check_and_lock数据查找阶段加显示锁,主要用于主键查找数据加显示锁或者二级索引访问后的回表主键加显示锁,加锁前需要判断是否存在隐含锁。由于主键行中包含了trx id伪列,因此可以简单的用本行trx id的事务是否还活跃进行判定了,这个过程代价很小,因此每行加锁总是会有这个过程,也就是每次都会调用lock_rec_convert_impl_to_expl函数进行判断,如下:lock_clust_rec_read_check_and_lock ->lock_rec_convert_impl_to_expl ->lock_clust_rec_some_has_impl (主键判断非常简单)栈如下:#0 lock_clust_rec_some_has_impl (rec=0x7fff05ad40db "\200", index=0x7ffe8802ce70, offsets=0x7fffe8461660) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/include/lock0priv.ic:69#1 0x00000000019f3333 in lock_rec_convert_impl_to_expl (block=0x7fff050a0950, rec=0x7fff05ad40db "\200", index=0x7ffe8802ce70, offsets=0x7fffe8461660) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/lock/lock0lock.cc:6118#2 0x00000000019f418d in lock_clust_rec_read_check_and_lock (flags=0, block=0x7fff050a0950, rec=0x7fff05ad40db "\200", index=0x7ffe8802ce70, offsets=0x7fffe8461660, mode=LOCK_X, gap_mode=1024, thr=0x7ffeb49903c8) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/lock/lock0lock.cc:6430#3 0x0000000001af7193 in sel_set_rec_lock (pcur=0x7ffeb498fe38, rec=0x7fff05ad40db "\200", index=0x7ffe8802ce70, offsets=0x7fffe8461660, mode=3, type=1024, thr=0x7ffeb49903c8, mtr=0x7fffe8461980) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/row/row0sel.cc:1263#4 0x0000000001b00049 in row_search_mvcc (buf=0x7ffeb498f380 "\371\005", mode=PAGE_CUR_GE, prebuilt=0x7ffeb498fc10, match_mode=1, direction=0) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/row/row0sel.cc:57105.4 lock_clust_rec_modify_check_and_lock主键数据修改阶段加隐式锁,当前发现为在直接update主键值或者delete操作的时候,但是这种情况下实际上主键已经在数据查询阶段加了显示锁。六、update不完全等同于delete&&insert直接区分如下:主键更新,接口row_upd_clust_steprow_upd_changes_ord_field_binary 判断是否更新了聚集索引的值如果更新了 -> row_upd_clust_rec_by_insert 进行主键删除插入(设置del flag)如果没有更新 ->row_upd_clust_rec ->btr_cur_optimistic_update 只考虑乐观update ->row_upd_changes_field_size_or_external 判断新记录是否超过本行现有大小 如果否 ->btr_cur_update_in_place 原地更新 如果是 ->page_cur_delete_rec 则需要进行主键删除(实际删除非设置del falg) ->btr_cur_insert_if_possible 插入二级索引更新,接口row_upd_sec_step 始终为删除插入(设置del flag)七、关于History list length 的单位实际上History list length 就是当一个update undo log (非insert)的计数器,一个事务只有一个undo log 。来源为trx_sys->rseg_history_len,这个值会在事务提交的时候更新,无论事务大小。但是由于很多内部事务的存在,这个值会远大于可观测的事务个数。栈如下:#0 trx_purge_add_update_undo_to_history (trx=0x7fffeac7df50, undo_ptr=0x7fffeac7e370, undo_page=0x7fff2837c000 "\373\252\223T", update_rseg_history_len=true, n_added_logs=1, mtr=0x7fffe8399830) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/trx/trx0purge.cc:354#1 0x0000000001b9c064 in trx_undo_update_cleanup (trx=0x7fffeac7df50, undo_ptr=0x7fffeac7e370, undo_page=0x7fff2837c000 "\373\252\223T", update_rseg_history_len=true, n_added_logs=1, mtr=0x7fffe8399830) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/trx/trx0undo.cc:1970#2 0x0000000001b8b639 in trx_write_serialisation_history (trx=0x7fffeac7df50, mtr=0x7fffe8399830) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/trx/trx0trx.cc:1684#3 0x0000000001b8c9b0 in trx_commit_low (trx=0x7fffeac7df50, mtr=0x7fffe8399830) at /home/mysql/soft/percona-server-5.7.29-32/storage/innobase/trx/trx0trx.cc:2184到这里,杂七杂八记录了一大堆,记录于此以备后用。附录1函数接口1、read viewMVCC::view_open:建立read viewReadView::prepare:准备read view中的值ReadView::complete:写入read view中的值MVCC::view_close:释放read view2、可见性判断lock_clust_rec_cons_read_sees:主键可见性判断lock_sec_rec_cons_read_sees:二级索引可见性判断附录 2具体函数1、read view/** The read should not see any transaction with trx id >= this value. In other words, this is the "high water mark". */ trx_id_t m_low_limit_id; /** The read should see all trx ids which are strictly smaller (<) than this value. In other words, this is the low water mark". */ trx_id_t m_up_limit_id; /** trx id of creating transaction, set to TRX_ID_MAX for free views. */ trx_id_t m_creator_trx_id; /** Set of RW transactions that was active when this snapshot was taken */ ids_t m_ids; /** The view does not need to see the undo logs for transactions whose transaction number is strictly smaller (<) than this value: they can be removed in purge if not needed by other views */ trx_id_t m_low_limit_no;voidReadView::prepare(trx_id_t id){ ut_ad(!m_cloned); ut_ad(mutex_own(&trx_sys->mutex)); m_creator_trx_id = id; m_low_limit_no = m_low_limit_id = trx_sys->max_trx_id; if (!trx_sys->rw_trx_ids.empty()) { copy_trx_ids(trx_sys->rw_trx_ids); } else { m_ids.clear(); } if (UT_LIST_GET_LEN(trx_sys->serialisation_list) > 0) { const trx_t* trx; trx = UT_LIST_GET_FIRST(trx_sys->serialisation_list); if (trx->no < m_low_limit_no) { m_low_limit_no = trx->no; } }}voidReadView::complete(){ ut_ad(!m_cloned); / The first active transaction has the smallest id. / m_up_limit_id = !m_ids.empty() ? m_ids.front() : m_low_limit_id; ut_ad(m_up_limit_id <= m_low_limit_id); m_closed = false;}2、可见性判断二级索引回表判断可见性Row_sel_get_clust_rec_for_mysql::operator() ->lock_clust_rec_cons_read_sees (回表后根据主键判断其可见性) ->row_sel_build_prev_vers_for_mysql(构建前版本) ->row_vers_build_for_consistent_read 本函数循环构建,直到条件满足,或者前版本为NULL if (view->changes_visible(trx_id, index->table->name)) { /* The view already sees this version: we can copy it to in_heap and return */ buf = static_cast<byte*>( mem_heap_alloc( in_heap, rec_offs_size(*offsets))); old_vers = rec_copy(buf, prev_version, offsets); rec_offs_make_valid(old_vers, index, offsets); if (vrow && *vrow) { vrow = dtuple_copy(vrow, in_heap); dtuple_dup_v_fld(*vrow, in_heap); } break;最终会将前版本的主键值根据需求取字段返回给MySQL层关于using index 也需要回表流程row_search_mvcc:if (!srv_read_only_mode && !lock_sec_rec_cons_read_sees( // 如果二级索引记录判断为不可见 rec, index, trx->read_view)) { /* We should look at the clustered index. However, as this is a non-locking read, we can skip the clustered index lookup if the condition does not match the secondary index entry. */ switch (row_search_idx_cond_check( buf, prebuilt, rec, offsets)) { case ICP_NO_MATCH: goto next_rec; case ICP_OUT_OF_RANGE: err = DB_RECORD_NOT_FOUND; goto idx_cond_failed; case ICP_MATCH: goto requires_clust_rec; //走这里就进入了回表判断流程 }lock_sec_rec_cons_read_sees:trx_id_t max_trx_id = page_get_max_trx_id(page_align(rec));//获取页的max trx id ut_ad(max_trx_id > 0);return(view->sees(max_trx_id));全文完。Enjoy MySQL :) </div>
调试您可以在OpenAPI Explorer中直接运行该接口,免去您计算签名的困扰。运行成功后,OpenAPI Explorer可以自动生成SDK代码示例。 调试请求参数名称类型是否必选示例值描述ActionString是DescribeDBInstanceAttribute系统规定参数。取值为DescribeDBInstanceAttribute。DBInstanceNameString是pxc-sprpx766vo****实例ID。RegionIdString是cn-hangzhou实例所在地域ID。说明 您可以调用DescribeRegions接口查看PolarDB-X支持的地域详情,包括地域ID。返回数据名称类型示例值描述DBInstanceStruct实例属性详情。RequestIdString7307D0CA-E315-4D51-8D36-F83767******请求ID。示例请求示例http(s)://[Endpoint]/?Action=DescribeDBInstanceAttribute &DBInstanceName=pxc-sprpx766vo**** &RegionId=cn-hangzhou &<公共请求参数>正常返回示例XML格式<RequestId>7307D0CA-E315-4D51-8D36-F83767******</RequestId><DBInstance> <Description>test</Description> <ExpireDate>2020-08-29T06:09:30.000+0800</ExpireDate> <Port>3306</Port> <DBInstanceType>ReadWrite</DBInstanceType> <DBType>polarx</DBType> <DBVersion>5.7</DBVersion> <MaintainEndTime>06:00</MaintainEndTime> <RightsSeparationStatus>disabled</RightsSeparationStatus> <Network>VPC</Network> <CommodityCode>drds_polarxpre_public_cn</CommodityCode> <DBNodeCount>2</DBNodeCount> <MaintainStartTime>02:00</MaintainStartTime> <Engine>polarx</Engine> <Status>Running</Status> <ZoneId>cn-hangzhou-h</ZoneId> <VPCId>vpc-*</VPCId> <VSwitchId>vsw-*</VSwitchId> <CreateTime>2020-07-29T06:09:30.000+0800</CreateTime> <MinorVersion>polarx-kernel-5.4.5-15941979-xdb-20200125</MinorVersion> <LatestMinorVersion>polarx-kernel-5.4.5-15941979-xdb-20200125</LatestMinorVersion> <Expired>false</Expired> <LockMode>Unlock</LockMode> <PayType>Prepaid</PayType> <RightsSeparationEnabled>false</RightsSeparationEnabled> <DBNodeClass>polarx.x4.large.2d</DBNodeClass> <StorageUsed>6781140992</StorageUsed> <Type>ReadWrite</Type> <Id>pxc-**</Id> <RegionId>cn-hangzhou</RegionId> <ConnectionString>pxc-sprpx766vo**.polarx.singapore.rds.aliyuncs.com</ConnectionString> <KindCode>18</KindCode> <DBNodes> <NodeClass>polarx.x4.large.2d</NodeClass> <ZoneId>cn-hangzhou-h-aliyun</ZoneId> <ComputeNodeId>pxc-i-wjdrwk**</ComputeNodeId> <RegionId>cn-hangzhou</RegionId> <Id>pxi-*</Id> <DataNodeId>pxc-xdb-s-pxchzr4rh7uvjanqn**</DataNodeId> </DBNodes> <ConnAddrs> <Type>VPC</Type> <VPCId>vpc-t4n7ufog21lym1w1w**</VPCId> <VSwitchId>vsw-t4ns396av0f5o4ro1**</VSwitchId> <Port>3306</Port> <ConnectionString>rm-uf6wjk5**.mysql.rds.aliyuncs.com</ConnectionString> </ConnAddrs> <ReadDBInstances>["pxc-", "pxc-"]</ReadDBInstances></DBInstance>JSON格式{"RequestId":"7307D0CA-E315-4D51-8D36-F83767","DBInstance":{"Description":"test","ExpireDate":"2020-08-29T06:09:30.000 </div>
导读从一个现场说起,全程解析如何定位性能瓶颈。排查过程收到线上某业务后端的MySQL实例负载比较高的告警信息,于是登入服务器检查确认。1. 首先我们进行OS层面的检查确认登入服务器后,我们的目的是首先要确认当前到底是哪些进程引起的负载高,以及这些进程卡在什么地方,瓶颈是什么。通常来说,服务器上最容易成为瓶颈的是磁盘I/O子系统,因为它的读写速度通常是最慢的。即便是现在的PCIe SSD,其随机I/O读写速度也是不如内存来得快。当然了,引起磁盘I/O慢得原因也有多种,需要确认哪种引起的。第一步,我们一般先看整体负载如何,负载高的话,肯定所有的进程跑起来都慢。可以执行指令 w 或者 sar -q 1 来查看负载数据,例如(横版查看):[yejr@imysql.com:~ ]# w 11:52:58 up 702 days, 56 min, 1 user, load average: 7.20, 6.70, 6.47 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 1.xx.xx.xx 11:51 0.00s 0.03s 0.00s w或者 sar -q 的观察结果(横版查看):[yejr@imysql.com:~ ]# sar -q 1Linux 2.6.32-431.el6.x86_64 (yejr.imysql.com) 01/13/2016 x86_64 (24 CPU)02:51:18 PM runq-sz plist-sz ldavg-1 ldavg-5 ldavg-15 blocked02:51:19 PM 4 2305 6.41 6.98 7.12 302:51:20 PM 2 2301 6.41 6.98 7.12 402:51:21 PM 0 2300 6.41 6.98 7.12 502:51:22 PM 6 2301 6.41 6.98 7.12 802:51:23 PM 2 2290 6.41 6.98 7.12 8load average大意表示当前CPU中有多少任务在排队等待,等待越多说明负载越高,跑数据库的服务器上,一般load值超过5的话,已经算是比较高的了。引起load高的原因也可能有多种:某些进程/服务消耗更多CPU资源(服务响应更多请求或存在某些应用瓶颈);发生比较严重的swap(可用物理内存不足);发生比较严重的中断(因为SSD或网络的原因发生中断);磁盘I/O比较慢(会导致CPU一直等待磁盘I/O请求);这时我们可以执行下面的命令来判断到底瓶颈在哪个子系统(横版查看):[yejr@imysql.com:~ ]# toptop - 11:53:04 up 702 days, 56 min, 1 user, load average: 7.18, 6.70, 6.47Tasks: 576 total, 1 running, 575 sleeping, 0 stopped, 0 zombieCpu(s): 7.7%us, 3.4%sy, 0.0%ni, 77.6%id, 11.0%wa, 0.0%hi, 0.3%si, 0.0%stMem: 49374024k total, 32018844k used, 17355180k free, 115416k buffersSwap: 16777208k total, 117612k used, 16659596k free, 5689020k cached PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND14165 mysql 20 0 8822m 3.1g 4672 S 162.3 6.6 89839:59 mysqld40610 mysql 20 0 25.6g 14g 8336 S 121.7 31.5 282809:08 mysqld49023 mysql 20 0 16.9g 5.1g 4772 S 4.6 10.8 34940:09 mysqld很明显是前面两个mysqld进程导致整体负载较高。而且,从 Cpu(s) 这行的统计结果也能看的出来,%us 和 %wa 的值较高,表示当前比较大的瓶颈可能是在用户进程消耗的CPU以及磁盘I/O等待上。我们先分析下磁盘I/O的情况。执行 sar -d 确认磁盘I/O是否真的较大(横版查看):[yejr@imysql.com:~ ]# sar -d 1Linux 2.6.32-431.el6.x86_64 (yejr.imysql.com) 01/13/2016 x86_64 (24 CPU)11:54:32 AM dev8-0 5338.00 162784.00 1394.00 30.76 5.24 0.98 0.19 100.0011:54:33 AM dev8-0 5134.00 148032.00 32365.00 35.14 6.93 1.34 0.19 100.1011:54:34 AM dev8-0 5233.00 161376.00 996.00 31.03 9.77 1.88 0.19 100.0011:54:35 AM dev8-0 4566.00 139232.00 1166.00 30.75 5.37 1.18 0.22 100.0011:54:36 AM dev8-0 4665.00 145920.00 630.00 31.41 5.94 1.27 0.21 100.0011:54:37 AM dev8-0 4994.00 156544.00 546.00 31.46 7.07 1.42 0.20 100.00再利用 iotop 确认到底哪些进程消耗的磁盘I/O资源最多(横版查看):[yejr@imysql.com:~ ]# iotopTotal DISK READ: 60.38 M/s | Total DISK WRITE: 640.34 K/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND16397 be/4 mysql 8.92 M/s 0.00 B/s 0.00 % 94.77 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=3320 7295 be/4 mysql 10.98 M/s 0.00 B/s 0.00 % 93.59 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=332014295 be/4 mysql 10.50 M/s 0.00 B/s 0.00 % 93.57 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=332014288 be/4 mysql 14.30 M/s 0.00 B/s 0.00 % 91.86 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=332014292 be/4 mysql 14.37 M/s 0.00 B/s 0.00 % 91.23 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=3320可以看到,端口号是3320的实例消耗的磁盘I/O资源比较多,那就看看这个实例里都有什么查询在跑吧。2. MySQL层面检查确认首先看下当前都有哪些查询在运行(横版查看):[yejr@imysql.com:~ ]# iotopTotal DISK READ: 60.38 M/s | Total DISK WRITE: 640.34 K/s TID PRIO USER DISK READ DISK WRITE SWAPIN IO> COMMAND16397 be/4 mysql 8.92 M/s 0.00 B/s 0.00 % 94.77 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=3320 7295 be/4 mysql 10.98 M/s 0.00 B/s 0.00 % 93.59 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=332014295 be/4 mysql 10.50 M/s 0.00 B/s 0.00 % 93.57 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=332014288 be/4 mysql 14.30 M/s 0.00 B/s 0.00 % 91.86 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=332014292 be/4 mysql 14.37 M/s 0.00 B/s 0.00 % 91.23 % mysqld --basedir=/usr/local/m~og_3320/mysql.sock --port=3320可以看到有不少慢查询还未完成,从slow query log中也能发现,这类SQL发生的频率很高。这是一个非常低效的SQL写法,导致需要对整个主键进行扫描,但实际上只需要取得一个最大值而已,从slow query log中可看到:[yejr@imysql.com(db)]> mysqladmin pr|grep -v Sleep+----+----+----------+----+-------+-----+--------------+-----------------------------------------------------------------------------------------------+| Id |User| Host | db |Command|Time | State | Info |+----+----+----------+----+-------+-----+--------------+-----------------------------------------------------------------------------------------------+| 25 | x | 10.x:8519 | db | Query | 68 | Sending data | select max(Fvideoid) from (select Fvideoid from t where Fvideoid>404612 order by Fvideoid) t1 || 26 | x | 10.x:8520 | db | Query | 65 | Sending data | select max(Fvideoid) from (select Fvideoid from t where Fvideoid>484915 order by Fvideoid) t1 || 28 | x | 10.x:8522 | db | Query | 130 | Sending data | select max(Fvideoid) from (select Fvideoid from t where Fvideoid>404641 order by Fvideoid) t1 || 27 | x | 10.x:8521 | db | Query | 167 | Sending data | select max(Fvideoid) from (select Fvideoid from t where Fvideoid>324157 order by Fvideoid) t1 || 36 | x | 10.x:8727 | db | Query | 174 | Sending data | select max(Fvideoid) from (select Fvideoid from t where Fvideoid>324346 order by Fvideoid) t1 |+----+----+----------+----+-------+-----+--------------+-----------------------------------------------------------------------------------------------+每次都要扫描500多万行数据,却只为读取一个最大值,效率非常低。经过分析,这个SQL稍做简单改造即可在个位数毫秒级内完成,原先则是需要150-180秒才能完成,提升了N次方。改造的方法是:对查询结果做一次倒序排序,取得第一条记录即可。而原先的做法是对结果正序排序,取最后一条记录,汗啊。。。写在最后,小结在这个例子中,产生瓶颈的原因比较好定位,SQL优化也不难,实际线上环境中,通常有以下几种常见的原因导致负载较高:一次请求读写的数据量太大,导致磁盘I/O读写值较大,例如一个SQL里要读取或更新几万行数据甚至更多,这种最好是想办法减少一次读写的数据量;SQL查询中没有适当的索引可以用来完成条件过滤、排序(ORDER BY)、分组(GROUP BY)、数据聚合(MIN/MAX/COUNT/AVG等),添加索引或者进行SQL改写吧;瞬间突发有大量请求,这种一般只要能扛过峰值就好,保险起见还是要适当提高服务器的配置,万一峰值抗不过去就可能发生雪崩效应;因为某些定时任务引起的负载升高,比如做数据统计分析和备份,这种对CPU、内存、磁盘I/O消耗都很大,最好放在独立的slave服务器上执行;服务器自身的节能策略发现负载较低时会让CPU降频,当发现负载升高时再自动升频,但通常不是那么及时,结果导致CPU性能不足,抗不过突发的请求;使用raid卡的时候,通常配备BBU(cache模块的备用电池),早期一般采用锂电池技术,需要定期充放电(DELL服务器90天一次,IBM是30天),我们可以通过监控在下一次充放电的时间前在业务低谷时提前对其进行放电,不过新一代服务器大多采用电容式电池,也就不存在这个问题了。文件系统采用ext4甚至ext3,而不是xfs,在高I/O压力时,很可能导致%util已经跑到100%了,但iops却无法再提升,换成xfs一般可获得大幅提升;内核的io scheduler策略采用cfq而非deadline或noop,可以在线直接调整,也可获得大幅提升。 </div>
背景信息对于每一条SQL,优化器都会生成相应执行计划。但是很多情况下,应用请求的SQL都是重复的(仅参数不同),参数化之后的SQL完全相同。这时,可以按照参数化之后的SQL构造一个缓存,将除了参数以外的各种信息(比如执行计划)缓存起来,称为执行计划缓存(Plan Cache)。另一方面,对于较复杂的查询(例如涉及到多个表的Join),为了使其执行计划能保持相对稳定,不因为版本升级等原因发生变化。执行计划管理(Plan Management)为每个SQL记录一组执行计划,该执行计划会被持久化地保存,即使版本升级也会保留。工作流程概览当PolarDB-X收到一条查询SQL时,会经历以下流程:对查询SQL进行参数化处理,将所有参数替换为占位符?以参数化的SQL作为Key,查找执行计划缓存中是否有缓存;如果没有,则调用优化器进行优化。如果该SQL是简单查询,则直接执行,跳过执行计划管理相关步骤。如果该SQL是复杂查询,则使用基线(Baseline)中固化的执行计划;如果有多个,则选择代价最低的那个。执行计划缓存PolarDB-X默认开启执行计划缓存功能。EXPLAIN结果中的HitCache表示当前SQL是否命中执行计划缓存。开启执行计划缓存后,PolarDB-X会对SQL做参数化处理,参数化会将SQL中的常量用占位符?替换,并构建出相应的参数列表。在执行计划中也可以看到LogicalView算子的SQL中含有?。执行计划管理对于复杂SQL,经过执行计划缓存之后,还会经过执行计划管理流程。执行计划缓存和执行计划管理都是采用参数化后的SQL作为Key来执行计划。执行计划缓存中会缓存所有SQL的执行计划,而执行计划管理仅对复杂查询SQL进行处理。由于受到具体参数的影响,SQL模版和最优的执行计划并非一一对应的。在执行计划管理中,每一条SQL对应一个基线,每个基线中包含一个或多个执行计划。实际使用中,会根据当时的参数选择其中代价最小的执行计划来执行。当执行计划缓存中的执行计划走进执行计划管理时,SPM会操作一个流程判断该执行计划是否是已知的,是已知的话,是否代价是最小的;不是已知的话,是否需要执行一下以判断该执行计划的优化程度。运维指令PolarDB-X提供了丰富的指令集用于管理执行计划,语法如下:BASELINE (LOAD|PERSIST|CLEAR|VALIDATE|LIST|DELETE) [Signed Integer,Signed Integer....] BASELINE (ADD|FIX) SQL (HINT Select Statemtnt)BASELINE (ADD|FIX) SQL :将SQL以HINT修复过后的执行计划记录固定下来。BASELINE LOAD:将系统表中指定的基线信息刷新到内存并使其生效。BASELINE LOAD_PLAN:将系统表中指定的执行计划信息刷新到内存并使其生效。BASELINE LIST:列出当前所有的基线信息。BASELINE PERSIST:将指定的基线落盘。BASELINE PERSIST_PLAN:将指定的执行计划落盘。BASELINE CLEAR:内存中清理某个基线。BASELINE CLEAR_PLAN:内存中清理某个执行计划。BASELINE DELETE:磁盘中删除某个基线。BASELINE DELETE_PLAN:磁盘中删除某个执行计划。执行计划调优实战数据发生变化或PolarDB-X优化器引擎升级后,针对同一条SQL,有可能会出现更好的执行计划。SPM在自动演化时会将CBO优化自动发现的更优执行计划加入到SQL的基线中。除此以外,您也可以通过SPM的指令主动优化执行计划。正常EXPLAIN发现该SQL生成的执行计划使用的是Hash Join,并且在Baseline List的基线中,该SQL仅有这一个执行计划:假如这个SQL在某些条件下采用BKA Join(Lookup Join)会有更好的性能,那么首先需要想办法利用HINT引导PolarDB-X生成符合预期的执行计划。BKA Join的HINT格式为:通过EXPLAIN [HINT] [SQL]观察出来的执行计划是否符合预期:此时由于Hint的干预,Join的算法已修正为BKA Join。但是这并不会对基线造成变动,如果想以后每次遇到这条SQL都使用上面的计划,还需要将其加入到基线中。可以采用执行计划管理的Baseline Add指令为该SQL增加一个执行计划。这样就会同时有两套执行计划存在于该SQL的基线中,CBO优化器会根据代价选择一个执行计划执行。通过以上Baseline List指令展示出来的结果,可以看到基于BKA_JOIN的执行计划已增加到该 SQL的基线中。此时EXPLAIN这条SQL,发现随SQL中p_name LIKE ? 条件变化,PolarDB-X会选择不同的执行计划。如果想让PolarDB-X固定使用上述的执行计划(而非在两个中挑选一个),可以采用Baseline Fix指令强制PolarDB-X走指定的执行计划。Baseline Fix指令执行完后,可以看到BKA Join执行计划的Fix状态位已被置为1。此时就算不加HINT,任意条件下Explain这条SQL,都一定会采用这个执行计划。
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
API概览分类API描述实例管理DescribeDBInstanceAttribute 查看实例属性详情。DescribeDBInstances 查看实例列表详情。ModifyDBInstanceDescription 修改实例描述。ModifyDBInstanceMaintainTime 修改实例可维护时间。RestartDBInstance 重启实例。DeleteDBInstance 删除实例。数据库管理CreateDB 创建数据库。DescribeDbList 查看实例下的数据库详情。DescribeCharacterSet 查看实例下数据库支持的字符集类型。DescribeTableDetail 查看表结构详情。ModifyDatabaseDescription 修改数据库描述。DeleteDB 删除数据库。地域DescribeRegions查看支持的地域和可用区。账号管理CreateAccount创建普通账号。CreateSuperAccount创建高权限账号。DescribeAccountList查看实例的账号详情。ModifyAccountDescription修改账号的描述。ModifyAccountPrivilege修改普通账号的权限。ResetAccountPassword重置普通账号的密码。DeleteAccount删除普通账号。连接地址AllocateInstancePublicConnection创建外网链接地址。ReleaseInstancePublicConnection释放外网链接地址。数据安全DescribeSecurityIps查看实例的白名单详情。ModifySecurityIps修改实例白名单。数据监控DescribeInstancePerformance查看实例监控详情。DescribeInstanceDbPerformance查看数据库监控详情。DescribeInstanceStoragePerformance查看存储节点的监控详情。参数管理DescribeParameterTemplates查看参数模版详情。DescribeParameters查看被修改的参数详情。ModifyParameter修改参数值。SQL审计EnableSqlAudit开启SQL审计。DescribeSqlAuditInfo查看SQL审计信息。DisableSqlAudit关闭SQL审计。SSL加密DescribeDBInstanceSSL查看SSL加密配置信息。UpdateDBInstanceSSL更新SSL加密配置信息。
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
使用限制三权分立模式下的系统账号(包括系统管理员账号、安全管理员账号和审计管理员账号)存在如下限制:不支持对系统账号执行GRANT ROLE或REVOKE ROLE命令。不支持对系统账号执行GRANT PRIVILEGES 或REVOKE PRIVILEGES命令。系统账号的密码只能由对应的账号修改,如系统管理员账号的密码仅能由系统管理员账号修改,不能被其他帐号修改。系统账号均不支持SET DEFAULT ROLE命令。查看账号登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。您可以选择如下任意方式查看三权分立系统账号信息:方式一:在安全管理页面查看。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签,即可查看三权分立模式下的系统管理员、安全管理员和审计管理员账号的账号名称和备注信息等详情。方式二:在账号管理页面查看。在左侧导航栏选择配置与管理 > 账号管理。在账号管理页面,除了可以查看三权分立模式的系统账号(包括系统管理员、安全管理员和审计管理员)的信息,还可以查看普通账号的信息,如账号类型,所属数据库和拥有的权限等。重置密码登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签。在账号列表中,单击目标账号右侧操作栏中的修改密码。在弹出的对话框中,输入新密码并确认。说明账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=单击确定即可。
ClickHouse简介ClickHouse是战斗民族Yandex公司出品的OLAP开源数据库,简称CH,也有人简称CK,是目前市面上最快的OLAP数据库。性能远超Vertica、Sybase IQ等。CH具有以下几个特点:列式存储,因此数据压缩比高。向量计算,且支持多核CPU并行计算,并且执行每个SQL时都力求榨干CPU性能。基于Shared nothing架构,支持分布式方案。支持主从复制架构。兼容大部分SQL语法,其语法和MySQL尤其相近。数据实时更新。不支持事务,不适合高频更新数据。建议多用宽表,但不建议总是查询整数据行中的所有列。简言之,如果你有以下业务场景,可以考虑用CH:海量数据,但又不希望单节点的存储空间消耗太高。宽表,为了业务方便,可能会把很多相关数据列都整合到一个表里。基于SQL的查询方式,提高程序的适用性和可移植性。性能测试我选用了CH官方提供的一个测试方案:SSBM (Star Schema Benchmark)。测试机配置:腾讯云CVM主机 - 标准型S5机型 - 4核16G - 外挂500G SSD云硬盘数据盘采用xfs文件系统,ioscheduler采用deadline方式:[root@yejr.me]# cat /etc/fstab/dev/vdb /data xfs defaults,noatime,nodiratime,nobarrier 0 0[root@yejr.me]# cat /sys/block/vdb/queue/scheduler[mq-deadline] kyber none生成测试数据。# 下载SSBM工具[root@yejr.me]# git clone https://github.com/vadimtk/ssb-dbgen.git[root@yejr.me]# cd ssb-dbgen[root@yejr.me]# make# 生成测试数据,机器性能和磁盘有限,所以指定 -s 100[root@yejr.me]# ./dbgen -s 100 -T c[root@yejr.me]# ./dbgen -s 100 -T p[root@yejr.me]# ./dbgen -s 100 -T s[root@yejr.me]# ./dbgen -s 100 -T l[root@yejr.me]# wc -l *tbl 3000000 customer.tbl 1400000 part.tbl 200000 supplier.tbl[root@yejr.me]# ls -l *tbl-rw-r--r-- 1 root root 331529327 Mar 28 21:17 customer.tbl-rw-r--r-- 1 root root 140642413 Mar 28 21:17 part.tbl-rw-r--r-- 1 root root 19462852 Mar 28 21:17 supplier.tbl创建测试表,根据CH官网提供的建表DDL直接创建即可,参考这里:Star Schema Benchmark( https://clickhouse.tech/docs/en/getting_started/example_datasets/star_schema/ )。导入数据。[root@yejr.me]# clickhouse-client --query "INSERT INTO customer FORMAT CSV" < customer.tbl[root@yejr.me]# clickhouse-client --query "INSERT INTO part FORMAT CSV" < part.tbl[root@yejr.me]# clickhouse-client --query "INSERT INTO supplier FORMAT CSV" < supplier.tbl[root@yejr.me]# clickhouse-client --query "INSERT INTO lineorder FORMAT CSV" < lineorder.tbl这是导入测试数据的耗时以及导完后表空间大小的数据。表表数据量耗时(秒)tbl文件大小表空间大小customer3,000,0002.923317M116Mpart1,400,0001.573135M25Msupplier200,0000.30519M7.7Mlineorder600,037,902837.28867G17Glineorder_flat600,037,9022318.61654G只看最大的lineorder表,对tbl文件的压缩比可以达到4:1,如果是相对常规的OLTP数据库,其压缩比显然还要更高。运行SSBM的几个标准查询耗时SQL耗时(秒)扫描行数(10万)返回行数Q1.12.12391.011Q1.20.3207.751Q1.30.0531.811Q2.117.979600.04280Q2.23.625600.0456Q2.33.263600.047Q3.16.906546.67150Q3.25.330546.67600Q3.33.666546.6724Q3.40.0587.764Q4.110.110600.0435Q4.21.928144.42100Q4.31.373144.42800每次扫描这么多数据量,但这些统计分析为主的SQL查询耗时却并不大,足见CH的计算性能了。今天先简单介绍到这里,以后有机会再继续分享。 </div>
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
这阵子对OLAP数据库产生了兴趣,先是简单测试了ClickHouse,性能的确不错,不过它在稳定&可靠性,整体生态&周边配套方面还有待加强,我会持续保持关注。3月27日,腾讯云推送的文章 TXSQL(TencentDB for MySQL) 8.0特性介绍中提到即将推出 基于MySQL框架的列存引擎CSTORE,看了下架构图,和以前红极一时的 infobright 有点神似。不过现在还没上线,还不能开始内测,只能看看了。转过身看看阿里云,发现有 分析型数据库MySQL版(AnalyticDB,简称ADB) 以及 云数据库ClickHouse可选。ADB的产品介绍可以看官方文档 什么是分析型数据库MySQL版,我抓取了其中几个关键技术信息:云端PB级高并发实时数据仓库。采用关系模型的行列混存技术。自动索引,智能优化器。高度兼容MySQL和SQL 2003语法。可对RDS直接创建一个分析实例,构建ADB,并利用DTS实现数据同步。看着很牛逼,有木有,那就测测呗。1. 新建RDS实例和ADB实例我选择的RDS实例对标之前用于测试ClickHouse的规则4CPU16G内存500G存储选择ADB实例时,系统会根据RDS中的数据量,只显示符合条件的规格,我这里选择的是 3.0版本、T16型号、存储空间 600G。2. 导入测试数据老样子,用ClickHouse官网提到的dbgen工具生成测试数据,生成数据时选择 -s 100 参数。然后在RDS实例中分别导入到几个测试表。MySQL [testabc]> load data local infile '/data/ssb-dbgen/customer.tbl' into table customer fields terminated by '\t';提醒:ClickHouse官网提供的建表DDL需要自己微调下,改成适用于MySQL的语法和数据类型。3. 创建数据同步DTS任务DTS的工作机制类似 pt-table-sync,需要每个表都要指定一个主键,这就让我很不开心了。生成的测试表中,是在其他表都导完数据后,再用 CREATE...SELECT创建的。几个测试表的总数据量是604,637,902(6亿),创建完DTS同步任务后,经过22.5小时候,同步的数据量约为325,174,022条,完成率53.78%,折算下来每秒约3990条记录,这个速度如果是OLTP数据库也还算可以,但放在海量数据的OLAP场景下,可就有点慢了。对了,我选择的是 medium规则,号称最高同步性能 5000 records/s。DTS启动、停止同步进度由于测试经费预算有限,我只能放弃全量数据同步,有多少算多少吧。接下来的事情可就有点头疼了。上面说了,lineorder_flat表是 CREATE...SELECT 创建的,而这个语法在ADB中是不支持的(产品页面上宣称全面支持MySQL语法,产品经理果然很会画大饼啊,哈哈)。好嘛,我退而求其次,改成 在RDS中先创建一个空表,让DTS把表结构同步过去,再在ADB中用INSERT...SELECT写数据。由于lineorder_flat原表是没有主键的,我需要新建一个自增INT做主键,否则DTS配置阶段是过不去的,无论我选择分区表还是维度表,都必须指定主键列。分区表模式下:维度表模式下:好了,变通之后表结构是同步过去了,可是在ADB上执行 INSERT...SELECT时,弹出下面的错误提醒:INSERT INTO lineorder_flat SELECT ... FROM lineorder AS l INNER JOIN customer AS c ON c.C_CUSTKEY = l.LO_CUSTKEY INNER JOIN supplier AS s ON s.S_SUPPKEY = l.LO_SUPPKEY INNER JOIN part AS p ON p.P_PARTKEY = l.LO_PARTKEY limit 1;失败原因:[40040, 2020040414153117201906308103453294111] Query execution error: : Insert query has mismatched column types. The 1 column has mismatched types. Table: bigint. Query: decimal(20,0).而上面这条SQL,如果把所有列读取出来,再手动构造成INSERT写入,则不会报错,这就尴尬了,搞不懂具体是错在哪里。不得已,只能回到RDS实例上,硬着头皮对其他几个表都先加上主键和必要,再生成测试数据了。在RDS主库上往lineorder_flat表中写入1000万条数据,等到DTS同步完成后,再在ADB上跑测试SQL。4. 执行测试SQL下面是几个测试SQL执行耗时、返回数据,和ClickHouse运行结果的对比(提醒:CH的数据量是6亿,ADB的数据量是1000万,相差60倍)。SQLADB(毫秒)/返回数量CH(秒)/返回数量CH扫描数量(10万)Q1.133/02.141/191.01Q1.233/00.320/17.75Q1.331/00.053/11.81Q2.1271/10017.979/280600.04Q2.2385/563.625/56600.04Q2.399/73.263/7600.04Q3.1383/1006.906/150546.67Q3.2130/1005.330/600546.67Q3.396/243.666/24546.67Q3.465/20.058/47.76Q4.1304/3510.110/35600.04Q4.2519/1001.928/100144.42Q4.367/7721.373/800144.42在ADB中没办法看到每次扫描了多少条数据,因此少了这项数据。看起来性能还算可以,就是不知道如果数据量一样的话,结果又会如何。这次的测试就先到这里吧,以后有机会再继续。本次测试得到了DTS产品经理的帮助,感谢。 </div>
开发者学堂课程【TCP/IP 网络基础:TCP/IP协议基础知识】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/791TCP/IP协议基础知识 内容简介一、Internet的历史二、网络的体系结构三、OSI参考模型及TCP/IP参考模型四、TCP和UDP协议五、TCP三次/四次握手六、UDP协议七、协议的选择 一、Internet的历史Internet——冷战的产物网络互联促成TCP/IP协议的产生 二、网络的体系结构网络采用分而治之的方法,将网络的功能划分为不同的模块,以分层的形式有机结合在一起。每层实现不同的功能,其内部实现方法对外部其他层次来说是透明的,每层向上层提供服务,同时使用下层提供的服务。网络体系结构即指网络的层次结构和每层所使用的协议的集合。两类非常重要的体系结构:OSI与TCP/IP 三、OSI参考模型及TCP/IP参考模型 OSI参考模型及TCP/IP参考模型OSI模型相关的协议已经很少使用,但模型本身非常通用OSI模型一共有七层,是一个理想化的模型,但是尚未有完整的实现TCP/ IP协议一共有四层,是Internet事实上的工业标准。 四、TCP和UDP协议 是一种面向连接的传输层协议,它能提供高可靠性通信(即数据无误、数据无丢失、数 据无失序,数据无重复到达的通信)。适用情况1.适合于对传输质量要求较高,以及传输大量数据的通信2.在可靠数据传输的场合,通常使用TCP协议。3.MSN/QQ等即时通讯软件的用户登录账户管理相关的功能通常采用TCP协议。 五、TCP三次/四次握手 六、UDP协议UDP (User Datagram Protocol)用户协议, 是不可靠的无连接协议。在数据发送前,因为不需要进行连接,所以可以进行高效率的数据传输。使用情况 1.在接收到数据,给应答较困难的网络中使用UDP(如:无线网络) 2适合用于广播和组播通信当中。3msn/qq/Skype 等即使通讯软件的点对点文本通讯以及音视频通讯通常采用UDP 协议。 4流媒体、VOD、VoP、IPTV等网络多媒体服务中通常采用UDP方式进行实时数据传输。 同时,一个UDP应用可同时作为应用的客户或服务器。由于UDP协议并不需要建立一个 明确的连接,因此建立UDP应用要比建立TCP应用简单得多。 七、协议的选择TCP和UDP协议协议的选择(1)对数据可靠性的要求对数据要求高可靠性的应用需选择TCP议,如验证、密码字段的传送都是不允许出错的,而对数据的可靠性要求不那么高的应用可选择UDP传送。(2)应用的实时性TCP协议在传送过程中要使用三次握手,重传确认等手段来保证数据传输的可靠性使用TCP协议会有较大的时延,因此不适合对实时性要求较高的应用,如VOP、视频监控等,相反,UDP协议则在这些应用中能发挥很好的作用。(3)网络的可靠性由于TCP协议的提出主是解决网络的可靠性问题,它通过各种机制来减少错误发生的概率。因此,在网络状况不是很好的情况下需选用TCP协议(如在广域网等情况),但是若在网络状况很好的情况下(如局域网等)就不需要再采用TCP协议,而建议选择UDP协议。
查询Sequence语法SHOW SEQUENCES示例请在命令行输入如下代码:mysql> SHOW SEQUENCES;返回结果如下:+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+| NAME | VALUE | UNIT_COUNT | UNIT_INDEX | INNER_STEP | INCREMENT_BY | START_WITH | MAX_VALUE | CYCLE | TYPE |+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+| seq1 | 100000 | 1 | 0 | 100000 | N/A | N/A | N/A | N/A | GROUP || seq2 | 400000 | 3 | 1 | 100000 | N/A | N/A | N/A | N/A | GROUP || seq3 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | TIME || seq4 | 1006 | N/A | N/A | N/A | 2 | 1000 | 99999999999 | N | SIMPLE |+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+4 rows in set (0.00 sec)说明 返回结果中的TYPE列,显示的是Sequence类型的缩写。获取显式Sequence值语法[<schema_name>.]<sequence name>.NEXTVAL示例方法一请在命令行输入如下代码:mysql> SELECT sample_seq.nextval FROM dual;返回结果如下:+--------------------+| SAMPLE_SEQ.NEXTVAL |+--------------------+| 101001 |+--------------------+1 row in set (0.04 sec)方法二请在命令行输入如下代码:mysql> INSERT INTO some_users (name,address,gmt_create,gmt_modified,intro) VALUES ('sun',sample_seq.nextval,now(),now(),'aa');说明该方法是把sample_seq.nextval当做一个值写入了 SQL中。如果建表时已经指定了AUTO_INCREMENT参数,INSERT时不需要指定自增列,可以让PolarDB-X自动维护。批量获取Sequence值语法批量获取Sequence值的语法如下:SELECT [<schema_name>.]<sequence name>.NEXTVAL FROM DUAL WHERE COUNT = <numeric value>示例请在命令行输入如下代码:mysql> SELECT sample_seq.nextval FROM dual WHERE count = 10;返回结果如下:+--------------------+| SAMPLE_SEQ.NEXTVAL |+--------------------+| 101002 || 101003 || 101004 || 101005 || 101006 || 101007 || 101008 || 101009 || 101010 || 101011 |+--------------------+10 row in set (0.04 sec)
语法删除Sequence的语法如下:DROP SEQUENCE <name>示例请在命令行输入如下代码:mysql> DROP SEQUENCE seq3;
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
描述根据分库键时间值在一年中所对应的日期进行取余运算并得到分表下标。使用限制拆分键的类型必须是DATE、DATETIME或TIMESTAMP中的一种。只能作为分表函数使用,但不能作为分库函数。按MMDD进行分表,由于一年最多只有366天,所以各个分库的分表数目不能超过366。使用场景MMDD函数适用于按一年中的日期进行分表,分表的表名下标就是一年中的某个日期。使用示例假设需要先按ID对用户进行分库,再将create_time列按一年中的日期(包括月份与日期)进行建表,使得一年中每一天的日期都能对应一张物理表,则您可以使用如下的建表DDL:create table test_mmdd_tb ( id int, name varchar(30) DEFAULT NULL, create_time datetime DEFAULT NULL, primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by HASH(name) tbpartition by MMDD(create_time) tbpartitions 366;
基本概念JOIN是SQL查询中常见的操作,逻辑上说,它的语义等价于将两张表做笛卡尔积,然后根据过滤条件保留满足条件的数据。JOIN多数情况下是依赖等值条件做的JOIN,即Equi-Join,用来根据某个特定列的值连接两张表的数据。子查询是指嵌套在SQL内部的查询块,子查询的结果作为输入,填入到外层查询中,从而用于计算外层查询的结果。子查询可以出现在SQL语句的很多地方,比如在SELECT子句中作为输出的数据,在FROM子句中作为输入的一个视图,在WHERE子句中作为过滤条件等。本文讨论的均为不下推的JOIN算子。如果JOIN被下推到LogicalView中,其执行方式由存储层MySQL自行选择。JOIN类型PolarDB-X支持Inner Join,Left Outer Join和Right Outer Join这3种常见的JOIN类型。下面是几种不同类型JOIN示例:/* Inner Join */ SELECT * FROM A, B WHERE A.key = B.key; /* Left Outer Join */ SELECT * FROM A LEFT JOIN B ON A.key = B.key; /* Right Outer Join */ SELECT * FROM A RIGHT OUTER JOIN B ON A.key = B.key;还支持Semi-Join和Anti-Join。Semi Join和Anti Join无法直接用SQL语句来表示,通常由包含关联项的EXISTS或IN子查询转换得到。如下为Semi-Join和Anti-Join的示例。/* Semi Join - 1 */SELECT * FROM Emp WHERE Emp.DeptName IN ( SELECT DeptName FROM Dept) / Semi Join - 2 /SELECT * FROM Emp WHERE EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)/ Anti Join - 1 /SELECT * FROM Emp WHERE Emp.DeptName NOT IN ( SELECT DeptName FROM Dept) / Anti Join - 2 /SELECT * FROM Emp WHERE NOT EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)JOIN算法目前,PolarDB-X支持Nested-Loop Join、Hash Join、Sort-Merge Join和Lookup Join(BKAJoin)等JOIN算法。Nested-Loop Join (NLJoin)Nested-Loop Join通常用于非等值的JOIN。它的工作方式如下:拉取内表(右表,通常是数据量较小的一边)的全部数据,缓存到内存中。遍历外表数据,对于外表的每行:对于每一条缓存在内存中的内表数据。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。如下为Nested-Loop Join示例:> EXPLAIN SELECT * FROM partsupp, supplier WHERE ps_suppkey < s_suppkey;NlJoin(condition="ps_suppkey < s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")通常来说,Nested-Loop Join是效率最低的JOIN操作,一般只有在JOIN条件不含等值(例如上面的例子)或者内表数据量极小的情况下才会使用。通过如下Hint可以强制PolarDB-X使用Nested-Loop Join以及确定JOIN顺序:/+TDDL:NL_JOIN(outer_table, inner_table)/ SELECT ...其中inner_table 和outer_table也可以是多张表的JOIN结果,例如:/+TDDL:NL_JOIN((outer_table_a, outer_table_b), (inner_table_c, inner_table_d))/ SELECT ...Hash JoinHash Join是等值JOIN最常用的算法之一。它的原理如下所示:拉取内表(右表,通常是数据量较小的一边)的全部数据,写进内存中的哈希表。遍历外表数据,对于外表的每行:根据等值条件JOIN Key查询哈希表,取出0-N匹配的行(JOIN Key相同)。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。Hash Join示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey;HashJoin(condition="ps_suppkey = s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")Hash Join常出现在JOIN数据量较大的复杂查询、且无法通过索引Lookup来改善,这种情况下Hash Join是最优的选择。例如上面的例子中,partsupp表和supplier表均为全表扫描,数据量较大,适合使用HashJoin。由于Hash Join的内表需要用于构造内存中的哈希表,内表的数据量一般小于外表。通常优化器可以自动选择出最优的JOIN顺序。如果需要手动控制,也可以通过下面的Hint。通过如下Hint可以强制PolarDB-X使用Hash Join以及确定JOIN顺序:/+TDDL:HASH_JOIN(table_outer, table_inner)/ SELECT ...Lookup Join (BKAJoin)Lookup Join是另一种常用的等值JOIN算法,常用于数据量较小的情况。它的原理如下:遍历外表(左表,通常是数据量较小的一边)数据,对于外表中的每批(例如1000行)数据。将这一批数据的JOIN Key拼成一个IN (....)条件,加到内表的查询中。执行内表查询,得到JOIN匹配的行。借助哈希表,为外表的每行找到匹配的内表行,组合并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey AND ps_partkey = 123;BKAJoin(condition="ps_suppkey = s_suppkey", type="inner") LogicalView(tables="partsupp_3", sql="SELECT * FROM `partsupp` AS `partsupp` WHERE (`ps_partkey` = ?)") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` WHERE (`s_suppkey` IN ('?'))")Lookup Join通常用于外表数据量较小的情况,例如上面的例子中,左表partsupp由于存在ps_partkey = 123的过滤条件,仅有几行数据。此外,右表的s_suppkey IN ( ... )查询命中了主键索引,这也使得Lookup Join的查询代价进一步降低。通过如下Hint可以强制PolarDB-X使用LookupJoin以及确定JOIN顺序:/+TDDL:BKA_JOIN(table_outer, table_inner)/ SELECT ...说明 Lookup Join的内表只能是单张表,不可以是多张表JOIN的结果。Sort-Merge JoinSort-Merge Join是另一种等值JOIN算法,它依赖左右两边输入的顺序,必须按JOIN Key排序。它的原理如下:开始Sort-Merge Join之前,输入端必须排序(借助MergeSort或MemSort)。比较当前左右表输入的行,并按以下方式操作,不断消费左右两边的输入:如果左表的JOIN Key较小,则消费左表的下一条数据。如果右表的JOIN Key较小,则消费右表的下一条数据。如果左右表JOIN Key相等,说明获得了1条或多条匹配,检查是否满足JOIN条件并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey ORDER BY s_suppkey;SortMergeJoin(condition="ps_suppkey = s_suppkey", type="inner") MergeSort(sort="ps_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp` ORDER BY `ps_suppkey`") MergeSort(sort="s_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` ORDER BY `s_suppkey`")上面执行计划中的 MergeSort算子以及下推的ORDER BY,这保证了Sort-Merge Join两边的输入按JOIN Key即s_suppkey (ps_suppkey)排序。Sort-Merge Join由于需要额外的排序步骤,通常Sort-Merge Join并不是最优的。但是,某些情况下客户端查询恰好也需要按JOIN Key排序(上面的例子),这时候使用Sort-Merge Join是较优的选择。通过如下Hint可以强制PolarDB-X使用Sort-Merge Join/+TDDL:SORT_MERGE_JOIN(table_a, table_b)/ SELECT ...JOIN顺序在多表连接的场景中,优化器的一个很重要的任务是决定各个表之间的连接顺序,因为不同的连接顺序会影响中间结果集的大小,进而影响到计划整体的执行代价。例如,对于4张表JOIN(暂不考虑下推的情形),JOIN Tree可以有如下3种形式,同时表的排列又有4! = 24种,一共有72种可能的JOIN顺序。下面是几种不同类型JOIN示例:/ Inner Join */SELECT * FROM A, B WHERE A.key = B.key;/ Left Outer Join /SELECT * FROM A LEFT JOIN B ON A.key = B.key;/ Right Outer Join /SELECT FROM A RIGHT OUTER JOIN B ON A.key = B.key;还支持Semi-Join和Anti-Join。Semi Join和Anti Join无法直接用SQL语句来表示,通常由包含关联项的EXISTS或IN子查询转换得到。如下为Semi-Join和Anti-Join的示例。/ Semi Join - 1 */SELECT * FROM Emp WHERE Emp.DeptName IN ( SELECT DeptName FROM Dept) / Semi Join - 2 /SELECT * FROM Emp WHERE EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)/ Anti Join - 1 /SELECT * FROM Emp WHERE Emp.DeptName NOT IN ( SELECT DeptName FROM Dept) / Anti Join - 2 /SELECT * FROM Emp WHERE NOT EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)JOIN算法目前,PolarDB-X支持Nested-Loop Join、Hash Join、Sort-Merge Join和Lookup Join(BKAJoin)等JOIN算法。Nested-Loop Join (NLJoin)Nested-Loop Join通常用于非等值的JOIN。它的工作方式如下:拉取内表(右表,通常是数据量较小的一边)的全部数据,缓存到内存中。遍历外表数据,对于外表的每行:对于每一条缓存在内存中的内表数据。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。如下为Nested-Loop Join示例:> EXPLAIN SELECT * FROM partsupp, supplier WHERE ps_suppkey < s_suppkey;NlJoin(condition="ps_suppkey < s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")通常来说,Nested-Loop Join是效率最低的JOIN操作,一般只有在JOIN条件不含等值(例如上面的例子)或者内表数据量极小的情况下才会使用。通过如下Hint可以强制PolarDB-X使用Nested-Loop Join以及确定JOIN顺序:/+TDDL:NL_JOIN(outer_table, inner_table)/ SELECT ...其中inner_table 和outer_table也可以是多张表的JOIN结果,例如:/+TDDL:NL_JOIN((outer_table_a, outer_table_b), (inner_table_c, inner_table_d))/ SELECT ...Hash JoinHash Join是等值JOIN最常用的算法之一。它的原理如下所示:拉取内表(右表,通常是数据量较小的一边)的全部数据,写进内存中的哈希表。遍历外表数据,对于外表的每行:根据等值条件JOIN Key查询哈希表,取出0-N匹配的行(JOIN Key相同)。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。Hash Join示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey;HashJoin(condition="ps_suppkey = s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")Hash Join常出现在JOIN数据量较大的复杂查询、且无法通过索引Lookup来改善,这种情况下Hash Join是最优的选择。例如上面的例子中,partsupp表和supplier表均为全表扫描,数据量较大,适合使用HashJoin。由于Hash Join的内表需要用于构造内存中的哈希表,内表的数据量一般小于外表。通常优化器可以自动选择出最优的JOIN顺序。如果需要手动控制,也可以通过下面的Hint。通过如下Hint可以强制PolarDB-X使用Hash Join以及确定JOIN顺序:/+TDDL:HASH_JOIN(table_outer, table_inner)/ SELECT ...Lookup Join (BKAJoin)Lookup Join是另一种常用的等值JOIN算法,常用于数据量较小的情况。它的原理如下:遍历外表(左表,通常是数据量较小的一边)数据,对于外表中的每批(例如1000行)数据。将这一批数据的JOIN Key拼成一个IN (....)条件,加到内表的查询中。执行内表查询,得到JOIN匹配的行。借助哈希表,为外表的每行找到匹配的内表行,组合并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey AND ps_partkey = 123;BKAJoin(condition="ps_suppkey = s_suppkey", type="inner") LogicalView(tables="partsupp_3", sql="SELECT * FROM `partsupp` AS `partsupp` WHERE (`ps_partkey` = ?)") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` WHERE (`s_suppkey` IN ('?'))")Lookup Join通常用于外表数据量较小的情况,例如上面的例子中,左表partsupp由于存在ps_partkey = 123的过滤条件,仅有几行数据。此外,右表的s_suppkey IN ( ... )查询命中了主键索引,这也使得Lookup Join的查询代价进一步降低。通过如下Hint可以强制PolarDB-X使用LookupJoin以及确定JOIN顺序:/+TDDL:BKA_JOIN(table_outer, table_inner)/ SELECT ...说明 Lookup Join的内表只能是单张表,不可以是多张表JOIN的结果。Sort-Merge JoinSort-Merge Join是另一种等值JOIN算法,它依赖左右两边输入的顺序,必须按JOIN Key排序。它的原理如下:开始Sort-Merge Join之前,输入端必须排序(借助MergeSort或MemSort)。比较当前左右表输入的行,并按以下方式操作,不断消费左右两边的输入:如果左表的JOIN Key较小,则消费左表的下一条数据。如果右表的JOIN Key较小,则消费右表的下一条数据。如果左右表JOIN Key相等,说明获得了1条或多条匹配,检查是否满足JOIN条件并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey ORDER BY s_suppkey;SortMergeJoin(condition="ps_suppkey = s_suppkey", type="inner") MergeSort(sort="ps_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp` ORDER BY `ps_suppkey`") MergeSort(sort="s_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` ORDER BY `s_suppkey`")上面执行计划中的 MergeSort算子以及下推的ORDER BY,这保证了Sort-Merge Join两边的输入按JOIN Key即s_suppkey (ps_suppkey)排序。Sort-Merge Join由于需要额外的排序步骤,通常Sort-Merge Join并不是最优的。但是,某些情况下客户端查询恰好也需要按JOIN Key排序(上面的例子),这时候使用Sort-Merge Join是较优的选择。通过如下Hint可以强制PolarDB-X使用Sort-Merge Join/+TDDL:SORT_MERGE_JOIN(table_a, table_b)*/ SELECT ...JOIN顺序在多表连接的场景中,优化器的一个很重要的任务是决定各个表之间的连接顺序,因为不同的连接顺序会影响中间结果集的大小,进而影响到计划整体的执行代价。例如,对于4张表JOIN(暂不考虑下推的情形),JOIN Tree可以有如下3种形式,同时表的排列又有4! = 24种,一共有72种可能的JOIN顺序。
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
开发者学堂课程【HTML 入门与实战:sublime生成html骨架】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/593sublime生成html骨架 页面中输入以下2个单词1. html:5 2. !在sublim里面按下tab 键即可生成html骨架 如下图:
1、背景在MySQL 8.0.23出现执行SQL超时的报错,而在MySQL8.0.18版本上未出现,故做个记录,以飨读者。2、故障提要在客户MySQL版本8.0.23,在部署客户测试环境时出现SQL执行超时报错。通过慢日志查询,找到对应的SQL。SQL如下:SELECT * FROM t_dict WHERE FIND_IN_SET(id,(SELECT getDictChildrenNew( (select id from t_dict where code = 'metadata_classify' and root_code = 'metadata_classify' ), (select code from t_dict where code = 'metadata_classify' and root_code = 'metadata_classify' ), (select root_code from t_dict where code = 'metadata_classify' and root_code = 'metadata_classify' ) ))) order by dict_level,dict_order asc;这个SQL用到了一个自定义函数getDictChildrenNew。函数内容如下:(真实的账号使用user_name代替了,已脱敏)CREATE DEFINER=`user_name`@`%` FUNCTION `user_name`.`getDictChildrenNew`(iid varchar(255),icode varchar(255),ircode varchar(255)) RETURNS varchar(5000) CHARSET utf8mb4 READS SQL DATABEGINDECLARE oTemp VARCHAR(5000);DECLARE oTempChild VARCHAR(5000);DECLARE oTempId VARCHAR(5000);DECLARE oRootCode VARCHAR(5000);SET oTemp = '';SET oTempChild = icode;SET oTempId = iid;SET oRootCode = ircode;WHILE oTempChild IS NOT NULLDOSET oTemp = CONCAT(oTemp,',',oTempId);SELECT GROUP_CONCAT(ID) INTO oTempIdFROM t_dictWHERE ROOT_CODE = oRootCode AND FIND_IN_SET(PARENT_CODE,oTempChild);SELECT GROUP_CONCAT(CODE) INTO oTempChildFROM t_dictWHERE ROOT_CODE = oRootCode AND FIND_IN_SET(PARENT_CODE,oTempChild);END WHILE;RETURN oTemp;END3、测试现象我单独将where子句中这部分单独执行只需要122msSELECT getDictChildrenNew( (select id from t_dict where code = 'metadata_classify' #58 and root_code = 'metadata_classify' ), (select code from t_dict where code = 'metadata_classify' #metadata_classify and root_code = 'metadata_classify' ), (select root_code from t_dict where code = 'metadata_classify' #metadata_classify and root_code = 'metadata_classify' ) )或者我单独将这个查询的值以字符串形式作为FIND_IN_SET的第二个参数传入执行也很快。仅需79ms。而我单独执行上面完整的SQL就会出现超时报错:(这为了演示,我就没有等到报错再截图了) </div>
使用限制三权分立模式下的系统账号(包括系统管理员账号、安全管理员账号和审计管理员账号)存在如下限制:不支持对系统账号执行GRANT ROLE或REVOKE ROLE命令。不支持对系统账号执行GRANT PRIVILEGES 或REVOKE PRIVILEGES命令。系统账号的密码只能由对应的账号修改,如系统管理员账号的密码仅能由系统管理员账号修改,不能被其他帐号修改。系统账号均不支持SET DEFAULT ROLE命令。查看账号登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。您可以选择如下任意方式查看三权分立系统账号信息:方式一:在安全管理页面查看。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签,即可查看三权分立模式下的系统管理员、安全管理员和审计管理员账号的账号名称和备注信息等详情。方式二:在账号管理页面查看。在左侧导航栏选择配置与管理 > 账号管理。在账号管理页面,除了可以查看三权分立模式的系统账号(包括系统管理员、安全管理员和审计管理员)的信息,还可以查看普通账号的信息,如账号类型,所属数据库和拥有的权限等。重置密码登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签。在账号列表中,单击目标账号右侧操作栏中的修改密码。在弹出的对话框中,输入新密码并确认。说明账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=单击确定即可。
MySQL企业版从8.0.13开始,新增一个插件叫做Data Masking and De-Identification,我将其简称为数据打码插件,其主要功能有:将部分敏感数据转换成无害数据。这就可以在查询数据库中的敏感数据时以"***"或"XXX"等方式打码显示,避免泄漏。生成随机数据,例如邮箱或银行卡号。例如在做功能测试时,我们可能需要生成一些随机数据,就用得上了。1. 插件安装数据打码插件名为 data_masking,安装成功后,会生成一系列UDF,部分UDF需要授予 SUPER 权限才行。执行下面的命令即可快速安装插件:INSTALL PLUGIN data_masking SONAME 'data_masking.so'; CREATE FUNCTION gen_blacklist RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION gen_dictionary RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION gen_dictionary_drop RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION gen_dictionary_load RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION gen_range RETURNS INTEGER SONAME 'data_masking.so'; CREATE FUNCTION gen_rnd_email RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION gen_rnd_pan RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION gen_rnd_ssn RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION gen_rnd_us_phone RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION mask_inner RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION mask_outer RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION mask_pan RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION mask_pan_relaxed RETURNS STRING SONAME 'data_masking.so'; CREATE FUNCTION mask_ssn RETURNS STRING SONAME 'data_masking.so';执行下面的命令确认安装成功:# 查询是否已启用该插件[root@yejr.run]> show plugins;...| Name | Status | Type | Library | License |+---------------------------------+----------+--------------------+-----------------+-------------+| data_masking | ACTIVE | UDF | data_masking.so | PROPRIETARY |...# 目前共有14个UDF[root@yejr.run]> select count(*) from mysql.func where dl = 'data_masking.so';+----------+| count(*) |+----------+| 14 |+----------+到这里,就表示安装成功了,可以愉快地给数据打码了。2. 数据打码插件应用2.1 隐藏重要数据这部分共有X个UDF,我们分别举例说明。# mask_inner()函数,从第5个字符开始打码,直到最后3个字符,用"*"代替(默认用'X'打码)[root@yejr.run] [mysql]> SELECT mask_inner("MySQL is the world's most popular open source database", 5, 3, "*") as MySQL;+--------------------------------------------------------+| MySQL |+--------------------------------------------------------+| MySQL**ase |+--------------------------------------------------------+# mask_outer()函数,从头开始打码,直到第5个字符结束;再从尾部开始打码,直到倒数第三个字符结束[root@yejr.run] [mysql]> SELECT mask_outer("MySQL is the world's most popular open source database", 5, 3) AS MySQL;+--------------------------------------------------------+| MySQL |+--------------------------------------------------------+| XXXXX is the world's most popular open source databXXX |+--------------------------------------------------------+2.2 生成随机数据并打码# 生成随机数字# 并用 gen_rnd_pan() 函数打码,只保留最后4位数,例如常用于只显示电话号码最后4位[root@yejr.run]> select gen_rnd_pan() as RAND_NUMBER, mask_pan(gen_rnd_pan()) as MASK_RAND_NUMBER;+------------------+------------------+| RAND_NUMBER | MASK_RAND_NUMBER |+------------------+------------------+| 1936900392284608 | XXXXXXXXXXXX2155 |+------------------+------------------+# 也可以只打码中间部分数字[root@yejr.run]> select gen_rnd_pan() as RAND_NUMBER, mask_pan_relaxed(gen_rnd_pan()) as MASK_RAND_NUMBER;+------------------+------------------+| RAND_NUMBER | MASK_RAND_NUMBER |+------------------+------------------+| 9868703631627362 | 426420XXXXXX3182 |+------------------+------------------+其他几个生成随机数据的函数还有gen_rnd_ssn(),生成美式社会安全码(身份证),例如 1234-5678-0123。相应地,可以用函数 mask_ssn() 对其打码。gen_range(1000, 2000),在1000 - 2000之间产生一个随机数。gen_rnd_email(),生成一个随机邮件地址。gen_rnd_us_phone(),生成美式电话号码,例如 1-555-016-7135。2.3 基于字典生成随机值有时候,需要随机生成国家地区城市数据,就可以先造好这些字典,加载到数据库中,再从中随机抽取。编辑城市列表字典:[root@yejr.run]# cat cn_cities.txtBeijingShanghaiShenzhenGuangzhouHangzhouWuhan# 加载到MySQL中[root@yejr.run]> SELECT gen_dictionary_load('path/cn_cities.txt', 'CN_Cities');+--------------------------------------------------------+| gen_dictionary_load('path/cn_cities.txt', 'CN_Cities') |+--------------------------------------------------------+| Dictionary load success |+--------------------------------------------------------+# 从中随机抽取城市[root@yejr.run]> select gen_dictionary('CN_Cities') AS City;+----------+| City |+----------+| Shenzhen |+----------+# 还可以配合 ELT() 函数从多个字典中随机抽取[root@yejr.run]> select gen_dictionary(ELT(gen_range(1,3), 'DE_Cities', 'US_Cities', 'CN_Cities')) AS City;+---------+| City |+---------+| Beijing |+---------+2.4 其他要注意的地方从MySQL 8.0.19开始,部分UDF函数默认使用latin1字符集,而在此之前默认使用binary字符集,使用过程中需要注意可能因此引发隐式类型转换导致索引不可用的风险,可以用 CONV() 函数进行转码。3. 总结数据打码插件是个非常不错的功能,除了上面描述的几个场景,还可以在用在 SELECT ... INTO OUTFILE 导出线上生产数据,然后再导入本地测试环境。或者直接在线上环境中,利用这些函数将数据脱敏处理后,写入专门的测试库,让测试程序直接读取,或者再利用主从复制同步到本地测试环境,可以玩出各种花样。更多详情请参考手册内容。最后亲切友情提醒:MySQL企业版下载后只能试用一个月,试用完毕后记得删除卸载哟,土豪的话直接无脑付费即可哟。4. 延伸阅读MySQL Enterprise Data Masking and De-Identification,https://dev.mysql.com/doc/refman/8.0/en/data-masking.htmlenjoy MySQL :)全文完。 </div>
使用限制三权分立模式下的系统账号(包括系统管理员账号、安全管理员账号和审计管理员账号)存在如下限制:不支持对系统账号执行GRANT ROLE或REVOKE ROLE命令。不支持对系统账号执行GRANT PRIVILEGES 或REVOKE PRIVILEGES命令。系统账号的密码只能由对应的账号修改,如系统管理员账号的密码仅能由系统管理员账号修改,不能被其他帐号修改。系统账号均不支持SET DEFAULT ROLE命令。查看账号登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。您可以选择如下任意方式查看三权分立系统账号信息:方式一:在安全管理页面查看。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签,即可查看三权分立模式下的系统管理员、安全管理员和审计管理员账号的账号名称和备注信息等详情。方式二:在账号管理页面查看。在左侧导航栏选择配置与管理 > 账号管理。在账号管理页面,除了可以查看三权分立模式的系统账号(包括系统管理员、安全管理员和审计管理员)的信息,还可以查看普通账号的信息,如账号类型,所属数据库和拥有的权限等。重置密码登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签。在账号列表中,单击目标账号右侧操作栏中的修改密码。在弹出的对话框中,输入新密码并确认。说明账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=单击确定即可。
开启三权分立登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签,在页面右上角打开当前账户安全模式开关。说明 开启三权分立模式前,请确保已创建高权限账号。详细操作步骤,请参见创建账号。在创建三权分立账号面板中,设置以下参数。参数说明账号名填写账号名称。说明 账号名称需满足如下要求:由小写字母、数字或下划线组成,长度不超过16个字符。以字母开头,以字母或数字结尾。不能和已有的账号名重复。账号类型固定为安全管理员账号,无需选择。密码设置账号密码。说明 账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=确认密码再次输入密码。备注说明备注该账号的相关信息,便于后续账号管理。该参数为非必填项,最多支持256个字符。单击下一步,并设置以下参数。参数说明账号名填写账号名称。说明 账号名称需满足如下要求:由小写字母、数字或下划线组成,长度不超过16个字符。以字母开头,以字母或数字结尾。不能和已有的账号名重复。账号类型固定为审计管理员账号,无需选择。密码设置账号密码。说明 账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=确认密码再次输入密码。备注说明备注该账号的相关信息,便于后续账号管理。该参数为非必填项,最多支持256个字符。单击确定即可。说明 开启后请等待3~5秒,新设置才会生效。关闭三权分立登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。选择账号三权分立页签,在页面右上角关闭当前账户安全模式开关。在弹出的对话框中,单击确定。在弹出的高权限账号密码验证对话框中,输入高权限账号的密码并单击确定。说明 关闭后请等待3~5秒,新设置才会生效。
查询Sequence语法SHOW SEQUENCES示例请在命令行输入如下代码:mysql> SHOW SEQUENCES;返回结果如下:+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+| NAME | VALUE | UNIT_COUNT | UNIT_INDEX | INNER_STEP | INCREMENT_BY | START_WITH | MAX_VALUE | CYCLE | TYPE |+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+| seq1 | 100000 | 1 | 0 | 100000 | N/A | N/A | N/A | N/A | GROUP || seq2 | 400000 | 3 | 1 | 100000 | N/A | N/A | N/A | N/A | GROUP || seq3 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | TIME || seq4 | 1006 | N/A | N/A | N/A | 2 | 1000 | 99999999999 | N | SIMPLE |+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+4 rows in set (0.00 sec)说明 返回结果中的TYPE列,显示的是Sequence类型的缩写。获取显式Sequence值语法[<schema_name>.]<sequence name>.NEXTVAL示例方法一请在命令行输入如下代码:mysql> SELECT sample_seq.nextval FROM dual;返回结果如下:+--------------------+| SAMPLE_SEQ.NEXTVAL |+--------------------+| 101001 |+--------------------+1 row in set (0.04 sec)方法二请在命令行输入如下代码:mysql> INSERT INTO some_users (name,address,gmt_create,gmt_modified,intro) VALUES ('sun',sample_seq.nextval,now(),now(),'aa');说明该方法是把sample_seq.nextval当做一个值写入了 SQL中。如果建表时已经指定了AUTO_INCREMENT参数,INSERT时不需要指定自增列,可以让PolarDB-X自动维护。批量获取Sequence值语法批量获取Sequence值的语法如下:SELECT [<schema_name>.]<sequence name>.NEXTVAL FROM DUAL WHERE COUNT = <numeric value>示例请在命令行输入如下代码:mysql> SELECT sample_seq.nextval FROM dual WHERE count = 10;返回结果如下:+--------------------+| SAMPLE_SEQ.NEXTVAL |+--------------------+| 101002 || 101003 || 101004 || 101005 || 101006 || 101007 || 101008 || 101009 || 101010 || 101011 |+--------------------+10 row in set (0.04 sec)
PolarDB-X支持对Sequence的各种类型进行如下修改:修改Simple Sequence的参数:起始值、步长、最大值、循环或非循环。修改Group Sequence或单元化 Group Sequence的参数:起始值。不同类型Sequence间的转换(单元化Group Sequence除外)。注意事项在对Sequence的类型进行修改时,您需要注意如下事项:Group Sequence和单元化Group Sequence是非连续的。START WITH参数对于它们仅具有指导意义,Group Sequence和单元化Group Sequence不会严格按照该参数作为起始值,但是保证起始值比该参数大。单元化Group Sequence不支持转换到其它类型或修改单元化相关的参数。对于Simple Sequence,如果修改Sequence时指定了START WITH,则会立即生效,下次取Sequence值时会从新的START WITH值开始。比如原先Sequene增长到100,这时把START WITH值改成了200,那么下一次获取的Sequence值就从200开始。修改START WITH的参数值时,需要仔细评估已经产生的Sequence值,以及生成新Sequence值的速度,防止产生冲突。如非必要,请谨慎修改START WITH参数值。Group Sequence语法ALTER SEQUENCE <name> [ CHANGE TO SIMPLE | TIME ] START WITH <numeric value> [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]参数说明参数说明START WITHSequence的起始值,无默认值,若未指定则忽略该参数,在转换类型时必须指定。INCREMENT BY仅在将Group Sequence转换为Simple Sequence时有效,是Simple Sequence每次增长时的增量值(或称为间隔值或步长),若未指定,则默认值为1。MAXVALUE仅在将Group Sequence转换为Simple Sequence时有效,是Simple Sequence允许的最大值,若未指定,则默认值为有符号长整型(Signed BIGINT)的最大值,即9223372036854775807。CYCLE 或 NOCYCLE仅在将Group Sequence转换为Simple Sequence时有效,两者只能选择其一,代表当Simple Sequence值增长到最大值后,是否允许继续循环(即从START WITH重新开始)使用该Simple Sequence,若未指定,则默认值为NOCYCLE。说明 当修改的目标类型为TIME时,不支持上述参数。单元化Group Sequence语法ALTER SEQUENCE <name>START WITH <numeric value>参数说明参数说明START WITH单元化Group Sequence的起始值,无默认值,若未指定则忽略该参数。说明 单元化Group Sequence 不支持转换到其它类型或修改单元化相关的参数。Time-based Sequence语法ALTER SEQUENCE <name>[ CHANGE TO GROUP | SIMPLE ]START WITH <numeric value>[ INCREMENT BY <numeric value> ][ MAXVALUE <numeric value> ][ CYCLE | NOCYCLE ]参数说明参数说明START WITHSequence的起始值,无默认值,若未指定则忽略该参数,在转换类型时必须指定。INCREMENT BYSimple Sequence每次增长时的增量值(或称为间隔值或步长),若未指定,则默认值为1,将Simple Sequence转换为Group Sequence时该参数无效。MAXVALUESimple Sequence允许的最大值,若未指定,则默认值为有符号长整型(Signed BIGINT)的最大值,即9223372036854775807,将Simple Sequence转换为Group Sequence时该参数无效。CYCLE或NOCYCLE两者只能选择其一,代表当Simple Sequence值增长到最大值后,是否允许继续循环(即仍从START WITH开始)使用该Simple Sequence,若未指定,则默认值为NOCYCLE,将Simple Sequence转换为Group Sequence时该参数无效。Simple Sequence语法ALTER SEQUENCE <name> [ CHANGE TO GROUP | TIME ]START WITH <numeric value>[ INCREMENT BY <numeric value> ][ MAXVALUE <numeric value> ][ CYCLE | NOCYCLE ]参数说明参数说明START WITHSequence的起始值,无默认值,若未指定则忽略该参数,在转换类型时必须指定。INCREMENT BYSimple Sequence每次增长时的增量值(或称为间隔值或步长),若未指定,则默认值为1,将Simple Sequence转换为Group Sequence时该参数无效。MAXVALUESimple Sequence允许的最大值,若未指定,则默认值为有符号长整型(Signed BIGINT)的最大值,即9223372036854775807,将Simple Sequence转换为Group Sequence时该参数无效。CYCLE 或 NOCYCLE两者只能选择其一,代表当Simple Sequence值增长到最大值后,是否允许继续循环(即仍从START WITH开始)使用该Simple Sequence,若未指定,则默认值为NOCYCLE,将Simple Sequence转换为Group Sequence时该参数无效。说明 当修改的目标类型为TIME时,不支持上述参数。不同类型Sequence间的转换在对Sequence的不同类型进行转换时,您需要了解如下事项:通过ALTER SEQUENCE的CHANGE TO 子句实现。ALTER SEQUENCE如果指定了CHANGE TO子句,则强制必须加上START WITH参数,避免忘记指定起始值而造成取值时得到重复值;若没有CHANGE TO(可选参数),则不强制。不支持单元化Group Sequence作为源或目标的类型转换。示例将Simple Sequence seq4的起始值改为3000,步长改为5,最大值改为1000000,增长到最大值后改为继续循环。语句如下:mysql> ALTER SEQUENCE seq4 START WITH 3000 INCREMENT BY 5 MAXVALUE 1000000 CYCLE;将Group Sequence转换为Simple Sequence。mysql> ALTER SEQUENCE seq1 CHANGE TO SIMPLE START WITH 1000000;
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
描述根据分库键时间值在一年中所对应的日期进行取余运算并得到分表下标。使用限制拆分键的类型必须是DATE、DATETIME或TIMESTAMP中的一种。只能作为分表函数使用,但不能作为分库函数。按MMDD进行分表,由于一年最多只有366天,所以各个分库的分表数目不能超过366。使用场景MMDD函数适用于按一年中的日期进行分表,分表的表名下标就是一年中的某个日期。使用示例假设需要先按ID对用户进行分库,再将create_time列按一年中的日期(包括月份与日期)进行建表,使得一年中每一天的日期都能对应一张物理表,则您可以使用如下的建表DDL:create table test_mmdd_tb ( id int, name varchar(30) DEFAULT NULL, create_time datetime DEFAULT NULL, primary key(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by HASH(name) tbpartition by MMDD(create_time) tbpartitions 366;
开发者学堂课程【JDBC数据库开发进阶:MySQL中的开启和关闭事务】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/32MySQL中的开启和关闭事务 目录:1.事务的四大特性:ACID2.MySQL中的操作事务3.jabc中操作事务 而在MySQL中该如何操作事务?事务其实是有两个端点的,分为事务的开始(start transaction)和结束(commit 表示提交事务或rollback 表示回滚事务,事务执行失败,回到原来的状态) 接下来创建表!选择mydb3,将以下程序执行:为了方便演示事务,我们需要创建一一个account表:。CREATE TABLE account('id INT PRIMARY KEY AUTO_ INCREMENT,NAME VARCHAR(30),balance NUMERIC(10.2));INSERT INTO account(NAME,balanse) VALUES('zs', 100000);INSERT INTO account(NAME,balance) VALUES('Is', 10000);INSERT INTO account(NAME, balane) VALUES('ww', 10000); SELECT * FROM account; 首先事务主要包括:1.事务的四大特性:ACID2.MySQL中的操作事务3.jabc中操作事务 而在MySQL中该如何操作事务?事务其实是有两个端点的,分为事务的开始(start transaction)和结束(commit 表示提交事务或rollback 表示回滚事务,事务执行失败,回到原来的状态) 接下来我们按照操作来做一次执行,打开执行的程序,输入mysql -uroot -p,输入密码然后进入,再选择数据库mudb3,再查询一下数据库中的表 再输入show tables;又要选择account表,故输入select *front account;先查询一下数据库中的表,就显示以下 确认数据没问题之后,就开始转账操作首先使用transaction,输入start transaction;表示事务开始了,接下来执行的所有操作就都在这个事务之内,直到出现commit或rollback接下来,就开始执行update ,输入update account set balance=900 where name='zs';这句话的作用就是更新张三的账户余额,就是把张三减去100块钱,结果张三的账户余额就变成了900 之后我们再输入update account set balance=1100 where name='ls';查李四的账户余额就变成了1100但进行到这一步,此时的事务并未提交,而最后再输入rollback,则事务就相当于没有发生,就会回滚到刚刚开始。虽然整个操作进行完并没有使得最后的结果发生变化,但并不证明操作没有进行,因为每次操作后查找时都显示了不一定的变化。由此我们应该明白事务可以回滚并且可以提交!! 接下来,再重新进行一轮新的操作,输入start transaction;再更新数据update account set balance -balanc-100 where name=’zs’;最后select *fron account;查询表而之后输入update account set balance -balanc+100 where name=’ls’;将balance-100变成balance+100之后,zs变ls张三变成李四之后,再查询表,执行成功就可以发现表的数据发生了改变之后再输入commit之后数据就无法在发生改变,且并不在回滚。事务回滚是回滚到开始的时候,而输入commit之后事务就已经结束了。无法再进行回滚!!如果要回滚,只能重新再开启一个事务!!之后再输入rollback。
基本概念JOIN是SQL查询中常见的操作,逻辑上说,它的语义等价于将两张表做笛卡尔积,然后根据过滤条件保留满足条件的数据。JOIN多数情况下是依赖等值条件做的JOIN,即Equi-Join,用来根据某个特定列的值连接两张表的数据。子查询是指嵌套在SQL内部的查询块,子查询的结果作为输入,填入到外层查询中,从而用于计算外层查询的结果。子查询可以出现在SQL语句的很多地方,比如在SELECT子句中作为输出的数据,在FROM子句中作为输入的一个视图,在WHERE子句中作为过滤条件等。本文讨论的均为不下推的JOIN算子。如果JOIN被下推到LogicalView中,其执行方式由存储层MySQL自行选择。JOIN类型PolarDB-X支持Inner Join,Left Outer Join和Right Outer Join这3种常见的JOIN类型。下面是几种不同类型JOIN示例:/* Inner Join */ SELECT * FROM A, B WHERE A.key = B.key; /* Left Outer Join */ SELECT * FROM A LEFT JOIN B ON A.key = B.key; /* Right Outer Join */ SELECT * FROM A RIGHT OUTER JOIN B ON A.key = B.key;还支持Semi-Join和Anti-Join。Semi Join和Anti Join无法直接用SQL语句来表示,通常由包含关联项的EXISTS或IN子查询转换得到。如下为Semi-Join和Anti-Join的示例。/* Semi Join - 1 */SELECT * FROM Emp WHERE Emp.DeptName IN ( SELECT DeptName FROM Dept) / Semi Join - 2 /SELECT * FROM Emp WHERE EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)/ Anti Join - 1 /SELECT * FROM Emp WHERE Emp.DeptName NOT IN ( SELECT DeptName FROM Dept) / Anti Join - 2 /SELECT * FROM Emp WHERE NOT EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)JOIN算法目前,PolarDB-X支持Nested-Loop Join、Hash Join、Sort-Merge Join和Lookup Join(BKAJoin)等JOIN算法。Nested-Loop Join (NLJoin)Nested-Loop Join通常用于非等值的JOIN。它的工作方式如下:拉取内表(右表,通常是数据量较小的一边)的全部数据,缓存到内存中。遍历外表数据,对于外表的每行:对于每一条缓存在内存中的内表数据。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。如下为Nested-Loop Join示例:> EXPLAIN SELECT * FROM partsupp, supplier WHERE ps_suppkey < s_suppkey;NlJoin(condition="ps_suppkey < s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")通常来说,Nested-Loop Join是效率最低的JOIN操作,一般只有在JOIN条件不含等值(例如上面的例子)或者内表数据量极小的情况下才会使用。通过如下Hint可以强制PolarDB-X使用Nested-Loop Join以及确定JOIN顺序:/+TDDL:NL_JOIN(outer_table, inner_table)/ SELECT ...其中inner_table 和outer_table也可以是多张表的JOIN结果,例如:/+TDDL:NL_JOIN((outer_table_a, outer_table_b), (inner_table_c, inner_table_d))/ SELECT ...Hash JoinHash Join是等值JOIN最常用的算法之一。它的原理如下所示:拉取内表(右表,通常是数据量较小的一边)的全部数据,写进内存中的哈希表。遍历外表数据,对于外表的每行:根据等值条件JOIN Key查询哈希表,取出0-N匹配的行(JOIN Key相同)。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。Hash Join示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey;HashJoin(condition="ps_suppkey = s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")Hash Join常出现在JOIN数据量较大的复杂查询、且无法通过索引Lookup来改善,这种情况下Hash Join是最优的选择。例如上面的例子中,partsupp表和supplier表均为全表扫描,数据量较大,适合使用HashJoin。由于Hash Join的内表需要用于构造内存中的哈希表,内表的数据量一般小于外表。通常优化器可以自动选择出最优的JOIN顺序。如果需要手动控制,也可以通过下面的Hint。通过如下Hint可以强制PolarDB-X使用Hash Join以及确定JOIN顺序:/+TDDL:HASH_JOIN(table_outer, table_inner)/ SELECT ...Lookup Join (BKAJoin)Lookup Join是另一种常用的等值JOIN算法,常用于数据量较小的情况。它的原理如下:遍历外表(左表,通常是数据量较小的一边)数据,对于外表中的每批(例如1000行)数据。将这一批数据的JOIN Key拼成一个IN (....)条件,加到内表的查询中。执行内表查询,得到JOIN匹配的行。借助哈希表,为外表的每行找到匹配的内表行,组合并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey AND ps_partkey = 123;BKAJoin(condition="ps_suppkey = s_suppkey", type="inner") LogicalView(tables="partsupp_3", sql="SELECT * FROM `partsupp` AS `partsupp` WHERE (`ps_partkey` = ?)") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` WHERE (`s_suppkey` IN ('?'))")Lookup Join通常用于外表数据量较小的情况,例如上面的例子中,左表partsupp由于存在ps_partkey = 123的过滤条件,仅有几行数据。此外,右表的s_suppkey IN ( ... )查询命中了主键索引,这也使得Lookup Join的查询代价进一步降低。通过如下Hint可以强制PolarDB-X使用LookupJoin以及确定JOIN顺序:/+TDDL:BKA_JOIN(table_outer, table_inner)/ SELECT ...说明 Lookup Join的内表只能是单张表,不可以是多张表JOIN的结果。Sort-Merge JoinSort-Merge Join是另一种等值JOIN算法,它依赖左右两边输入的顺序,必须按JOIN Key排序。它的原理如下:开始Sort-Merge Join之前,输入端必须排序(借助MergeSort或MemSort)。比较当前左右表输入的行,并按以下方式操作,不断消费左右两边的输入:如果左表的JOIN Key较小,则消费左表的下一条数据。如果右表的JOIN Key较小,则消费右表的下一条数据。如果左右表JOIN Key相等,说明获得了1条或多条匹配,检查是否满足JOIN条件并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey ORDER BY s_suppkey;SortMergeJoin(condition="ps_suppkey = s_suppkey", type="inner") MergeSort(sort="ps_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp` ORDER BY `ps_suppkey`") MergeSort(sort="s_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` ORDER BY `s_suppkey`")上面执行计划中的 MergeSort算子以及下推的ORDER BY,这保证了Sort-Merge Join两边的输入按JOIN Key即s_suppkey (ps_suppkey)排序。Sort-Merge Join由于需要额外的排序步骤,通常Sort-Merge Join并不是最优的。但是,某些情况下客户端查询恰好也需要按JOIN Key排序(上面的例子),这时候使用Sort-Merge Join是较优的选择。通过如下Hint可以强制PolarDB-X使用Sort-Merge Join/+TDDL:SORT_MERGE_JOIN(table_a, table_b)/ SELECT ...JOIN顺序在多表连接的场景中,优化器的一个很重要的任务是决定各个表之间的连接顺序,因为不同的连接顺序会影响中间结果集的大小,进而影响到计划整体的执行代价。例如,对于4张表JOIN(暂不考虑下推的情形),JOIN Tree可以有如下3种形式,同时表的排列又有4! = 24种,一共有72种可能的JOIN顺序。下面是几种不同类型JOIN示例:/ Inner Join */SELECT * FROM A, B WHERE A.key = B.key;/ Left Outer Join /SELECT * FROM A LEFT JOIN B ON A.key = B.key;/ Right Outer Join /SELECT FROM A RIGHT OUTER JOIN B ON A.key = B.key;还支持Semi-Join和Anti-Join。Semi Join和Anti Join无法直接用SQL语句来表示,通常由包含关联项的EXISTS或IN子查询转换得到。如下为Semi-Join和Anti-Join的示例。/ Semi Join - 1 */SELECT * FROM Emp WHERE Emp.DeptName IN ( SELECT DeptName FROM Dept) / Semi Join - 2 /SELECT * FROM Emp WHERE EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)/ Anti Join - 1 /SELECT * FROM Emp WHERE Emp.DeptName NOT IN ( SELECT DeptName FROM Dept) / Anti Join - 2 /SELECT * FROM Emp WHERE NOT EXISTS ( SELECT * FROM Dept WHERE Emp.DeptName = Dept.DeptName)JOIN算法目前,PolarDB-X支持Nested-Loop Join、Hash Join、Sort-Merge Join和Lookup Join(BKAJoin)等JOIN算法。Nested-Loop Join (NLJoin)Nested-Loop Join通常用于非等值的JOIN。它的工作方式如下:拉取内表(右表,通常是数据量较小的一边)的全部数据,缓存到内存中。遍历外表数据,对于外表的每行:对于每一条缓存在内存中的内表数据。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。如下为Nested-Loop Join示例:> EXPLAIN SELECT * FROM partsupp, supplier WHERE ps_suppkey < s_suppkey;NlJoin(condition="ps_suppkey < s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")通常来说,Nested-Loop Join是效率最低的JOIN操作,一般只有在JOIN条件不含等值(例如上面的例子)或者内表数据量极小的情况下才会使用。通过如下Hint可以强制PolarDB-X使用Nested-Loop Join以及确定JOIN顺序:/+TDDL:NL_JOIN(outer_table, inner_table)/ SELECT ...其中inner_table 和outer_table也可以是多张表的JOIN结果,例如:/+TDDL:NL_JOIN((outer_table_a, outer_table_b), (inner_table_c, inner_table_d))/ SELECT ...Hash JoinHash Join是等值JOIN最常用的算法之一。它的原理如下所示:拉取内表(右表,通常是数据量较小的一边)的全部数据,写进内存中的哈希表。遍历外表数据,对于外表的每行:根据等值条件JOIN Key查询哈希表,取出0-N匹配的行(JOIN Key相同)。构造结果行,并检查是否满足JOIN条件,如果满足条件则输出。Hash Join示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey;HashJoin(condition="ps_suppkey = s_suppkey", type="inner") Gather(concurrent=true) LogicalView(tables="partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp`") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier`")Hash Join常出现在JOIN数据量较大的复杂查询、且无法通过索引Lookup来改善,这种情况下Hash Join是最优的选择。例如上面的例子中,partsupp表和supplier表均为全表扫描,数据量较大,适合使用HashJoin。由于Hash Join的内表需要用于构造内存中的哈希表,内表的数据量一般小于外表。通常优化器可以自动选择出最优的JOIN顺序。如果需要手动控制,也可以通过下面的Hint。通过如下Hint可以强制PolarDB-X使用Hash Join以及确定JOIN顺序:/+TDDL:HASH_JOIN(table_outer, table_inner)/ SELECT ...Lookup Join (BKAJoin)Lookup Join是另一种常用的等值JOIN算法,常用于数据量较小的情况。它的原理如下:遍历外表(左表,通常是数据量较小的一边)数据,对于外表中的每批(例如1000行)数据。将这一批数据的JOIN Key拼成一个IN (....)条件,加到内表的查询中。执行内表查询,得到JOIN匹配的行。借助哈希表,为外表的每行找到匹配的内表行,组合并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey AND ps_partkey = 123;BKAJoin(condition="ps_suppkey = s_suppkey", type="inner") LogicalView(tables="partsupp_3", sql="SELECT * FROM `partsupp` AS `partsupp` WHERE (`ps_partkey` = ?)") Gather(concurrent=true) LogicalView(tables="supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` WHERE (`s_suppkey` IN ('?'))")Lookup Join通常用于外表数据量较小的情况,例如上面的例子中,左表partsupp由于存在ps_partkey = 123的过滤条件,仅有几行数据。此外,右表的s_suppkey IN ( ... )查询命中了主键索引,这也使得Lookup Join的查询代价进一步降低。通过如下Hint可以强制PolarDB-X使用LookupJoin以及确定JOIN顺序:/+TDDL:BKA_JOIN(table_outer, table_inner)/ SELECT ...说明 Lookup Join的内表只能是单张表,不可以是多张表JOIN的结果。Sort-Merge JoinSort-Merge Join是另一种等值JOIN算法,它依赖左右两边输入的顺序,必须按JOIN Key排序。它的原理如下:开始Sort-Merge Join之前,输入端必须排序(借助MergeSort或MemSort)。比较当前左右表输入的行,并按以下方式操作,不断消费左右两边的输入:如果左表的JOIN Key较小,则消费左表的下一条数据。如果右表的JOIN Key较小,则消费右表的下一条数据。如果左右表JOIN Key相等,说明获得了1条或多条匹配,检查是否满足JOIN条件并输出。Lookup Join (BKAJoin)示例:> EXPLAIN SELECT FROM partsupp, supplier WHERE ps_suppkey = s_suppkey ORDER BY s_suppkey;SortMergeJoin(condition="ps_suppkey = s_suppkey", type="inner") MergeSort(sort="ps_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.partsupp_[0-7]", shardCount=8, sql="SELECT * FROM `partsupp` AS `partsupp` ORDER BY `ps_suppkey`") MergeSort(sort="s_suppkey ASC") LogicalView(tables="QIMU_0000_GROUP,QIMU_0001_GROUP.supplier_[0-7]", shardCount=8, sql="SELECT FROM `supplier` AS `supplier` ORDER BY `s_suppkey`")上面执行计划中的 MergeSort算子以及下推的ORDER BY,这保证了Sort-Merge Join两边的输入按JOIN Key即s_suppkey (ps_suppkey)排序。Sort-Merge Join由于需要额外的排序步骤,通常Sort-Merge Join并不是最优的。但是,某些情况下客户端查询恰好也需要按JOIN Key排序(上面的例子),这时候使用Sort-Merge Join是较优的选择。通过如下Hint可以强制PolarDB-X使用Sort-Merge Join/+TDDL:SORT_MERGE_JOIN(table_a, table_b)*/ SELECT ...JOIN顺序在多表连接的场景中,优化器的一个很重要的任务是决定各个表之间的连接顺序,因为不同的连接顺序会影响中间结果集的大小,进而影响到计划整体的执行代价。例如,对于4张表JOIN(暂不考虑下推的情形),JOIN Tree可以有如下3种形式,同时表的排列又有4! = 24种,一共有72种可能的JOIN顺序。
作为资深的MySQL票友,最近我总在给8.0吹水,我们知数堂的MySQL课程去年也早就升级到8.0版本了。我的VPS老早就想升级了,无奈PHP版本太低,担心升级后有问题,所以一直没去折腾。这两天稍微得空,就开始折腾升级MySQL版本。为了解锁最香新功能,我直接升级到了最新的MySQL 8.0.19版本:[yejr@imysql.com]> \s .. Using delimiter: ; Server version: 8.0.19 MySQL Community Server - GPL) Protocol version: 10 ... Binary data as: Hexadecimal注意到上面的 Binary data as: Hexadecimal了吗,我前几天的文章 MySQL 8.0.19客户端的一个小变化 中介绍了这个新特性。由于我的PHP还是相对较低的版本,MySQL 8.0相对于5.7版本,对PHP这些应用程序影响最大的就是账号认证方式,由此前的 mysqlnativepassword变成了 cachingsha2password。除了账号授权方式要保持使用 native 认证插件外,还有个要注意的默认使用的字符集还得保持用 utf8,否则可能会报告下面两种错误:SQLSTATE[HY000] [2054] Server sent charset unknown to the client或者是SQLSTATE[HY000] [2054] The server requested authentication method unknown to the client看到上面的报错不用慌,只需要修改下面两个MySQL参数即可:#MySQL 8.0起默认字符集改成了utf8mb4,这造成PHP PDO连接报错#只需要重新指定默认字符集为utf8即可,但这并不影响在MySQL里创建utf8mb4字符集的表character-set-server = utf8#指定账号认证plugin还使用native模式,否则PHP PDO连接握手时会报错default_authentication_plugin = mysql_native_password在MySQL 8.0下创建新账号时,需要先 CREATE USER并指定密码,然后再 GRANT授权,不能再像以前那样,可以直接用一条 GRANT 语句搞定 创建账号+指定密码+授权这三件事了,例如:[yejr@imysql.com]> CREATE USER yejr@localhost identified with mysql_native_password by 'c97721c63c9fc077';[yejr@imysql.com]> GRANT ALL ON yejr.* to yejr@localhost;把MySQL从5.7到8.0的升级方案,建议如下:先将当前的MySQL 5.7升级到最新子版本,例如5.7.29。检查错误日志,确认没有任何表在升级过程中报错。设置innodb_fast_shutdown=0,关闭5.7.29版本实例。修改my.cnf参数,使之适应8.0版本,例如去掉 internal_tmp_disk_storage_engine 参数。在my.cnf中增加参数 upgrade = AUTO,使得MySQL 8.0启动后能自动升级系统表和用户表。检查确认MySQL 8.0实例启动过程中无其他报错。在升级过程中,我还发现如果使用drupal系统的话,可能还会有个报错:PDOException: SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER' in lock_may_be_available() (line 167 of xx/includes/lock.inc).那是因为在drupal代码中,连接mysql时顺便设置了SQLMODE,其中 NOAUTOCREATEUSER这个模式在8.0之后不复存在了,只需要微调下面的代码:[root@yejr.me]# vim includes/database/mysql/database.inc $connection_options['init_commands'] += array( #注释掉本行代码,或者删除 NO_AUTO_CREATE_USER 模式即可 #'sql_mode' => "SET sql_mode = 'ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER'", 'sql_mode' => "SET sql_mode = 'ANSI,STRICT_TRANS_TABLES,STRICT_ALL_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO'", );好了,现在全站都升级到MySQL 8.0了,yeah✌️enjoy MySQL 8.0。全文完。 </div>
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
这阵子对OLAP数据库产生了兴趣,先是简单测试了ClickHouse,性能的确不错,不过它在稳定&可靠性,整体生态&周边配套方面还有待加强,我会持续保持关注。3月27日,腾讯云推送的文章 TXSQL(TencentDB for MySQL) 8.0特性介绍中提到即将推出 基于MySQL框架的列存引擎CSTORE,看了下架构图,和以前红极一时的 infobright 有点神似。不过现在还没上线,还不能开始内测,只能看看了。转过身看看阿里云,发现有 分析型数据库MySQL版(AnalyticDB,简称ADB) 以及 云数据库ClickHouse可选。ADB的产品介绍可以看官方文档 什么是分析型数据库MySQL版,我抓取了其中几个关键技术信息:云端PB级高并发实时数据仓库。采用关系模型的行列混存技术。自动索引,智能优化器。高度兼容MySQL和SQL 2003语法。可对RDS直接创建一个分析实例,构建ADB,并利用DTS实现数据同步。看着很牛逼,有木有,那就测测呗。1. 新建RDS实例和ADB实例我选择的RDS实例对标之前用于测试ClickHouse的规则4CPU16G内存500G存储选择ADB实例时,系统会根据RDS中的数据量,只显示符合条件的规格,我这里选择的是 3.0版本、T16型号、存储空间 600G。2. 导入测试数据老样子,用ClickHouse官网提到的dbgen工具生成测试数据,生成数据时选择 -s 100 参数。然后在RDS实例中分别导入到几个测试表。MySQL [testabc]> load data local infile '/data/ssb-dbgen/customer.tbl' into table customer fields terminated by '\t';提醒:ClickHouse官网提供的建表DDL需要自己微调下,改成适用于MySQL的语法和数据类型。3. 创建数据同步DTS任务DTS的工作机制类似 pt-table-sync,需要每个表都要指定一个主键,这就让我很不开心了。生成的测试表中,是在其他表都导完数据后,再用 CREATE...SELECT创建的。几个测试表的总数据量是604,637,902(6亿),创建完DTS同步任务后,经过22.5小时候,同步的数据量约为325,174,022条,完成率53.78%,折算下来每秒约3990条记录,这个速度如果是OLTP数据库也还算可以,但放在海量数据的OLAP场景下,可就有点慢了。对了,我选择的是 medium规则,号称最高同步性能 5000 records/s。DTS启动、停止同步进度由于测试经费预算有限,我只能放弃全量数据同步,有多少算多少吧。接下来的事情可就有点头疼了。上面说了,lineorder_flat表是 CREATE...SELECT 创建的,而这个语法在ADB中是不支持的(产品页面上宣称全面支持MySQL语法,产品经理果然很会画大饼啊,哈哈)。好嘛,我退而求其次,改成 在RDS中先创建一个空表,让DTS把表结构同步过去,再在ADB中用INSERT...SELECT写数据。由于lineorder_flat原表是没有主键的,我需要新建一个自增INT做主键,否则DTS配置阶段是过不去的,无论我选择分区表还是维度表,都必须指定主键列。分区表模式下:维度表模式下:好了,变通之后表结构是同步过去了,可是在ADB上执行 INSERT...SELECT时,弹出下面的错误提醒:INSERT INTO lineorder_flat SELECT ... FROM lineorder AS l INNER JOIN customer AS c ON c.C_CUSTKEY = l.LO_CUSTKEY INNER JOIN supplier AS s ON s.S_SUPPKEY = l.LO_SUPPKEY INNER JOIN part AS p ON p.P_PARTKEY = l.LO_PARTKEY limit 1;失败原因:[40040, 2020040414153117201906308103453294111] Query execution error: : Insert query has mismatched column types. The 1 column has mismatched types. Table: bigint. Query: decimal(20,0).而上面这条SQL,如果把所有列读取出来,再手动构造成INSERT写入,则不会报错,这就尴尬了,搞不懂具体是错在哪里。不得已,只能回到RDS实例上,硬着头皮对其他几个表都先加上主键和必要,再生成测试数据了。在RDS主库上往lineorder_flat表中写入1000万条数据,等到DTS同步完成后,再在ADB上跑测试SQL。4. 执行测试SQL下面是几个测试SQL执行耗时、返回数据,和ClickHouse运行结果的对比(提醒:CH的数据量是6亿,ADB的数据量是1000万,相差60倍)。SQLADB(毫秒)/返回数量CH(秒)/返回数量CH扫描数量(10万)Q1.133/02.141/191.01Q1.233/00.320/17.75Q1.331/00.053/11.81Q2.1271/10017.979/280600.04Q2.2385/563.625/56600.04Q2.399/73.263/7600.04Q3.1383/1006.906/150546.67Q3.2130/1005.330/600546.67Q3.396/243.666/24546.67Q3.465/20.058/47.76Q4.1304/3510.110/35600.04Q4.2519/1001.928/100144.42Q4.367/7721.373/800144.42在ADB中没办法看到每次扫描了多少条数据,因此少了这项数据。看起来性能还算可以,就是不知道如果数据量一样的话,结果又会如何。这次的测试就先到这里吧,以后有机会再继续。本次测试得到了DTS产品经理的帮助,感谢。 </div>
开发者学堂课程【Cassandra数据库入门与实战:Cassandra性能压测及调优实战】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/784Cassandra性能压测及调优实战内容简介:一、性能压测二、性能调优场景一 写入稳定,读取的延迟在逐渐升高场景二 写入少,读取多场景三 写入量级特别大场景四 读响应时间长场景五读响应毛刺较高三、性能调优总结 一、性能压测 市面上有很多压测工具,ycsb也是其中之一,但是ycsb的使用较为简单,支持多种开源数据库,例如redis,mango,cassandra,hbase等,掌握ycsb就能够对多种数据库进行压测,并且ycsb方便在多个数据库之间做切换,对不同数据库做性能对比,选择出对应业务使用以上数据库的哪一种较为适合。ycsb支持对多种数据库进行压测,所以如果要下载其完整压缩包的话,会占用较大内存,以下是cassandra专用压缩包,可以较为快速的安装。将其解压缩后可进入目录页面。Cassandra目录结构主要有三种目录,分别是bin,lab,workloads。bin主要是执行文件目录,lab主要依赖jar包,重点关注于workloads。在这个目录里面可以看到预先存在一些定义完成的压测模型,可以根据其提供的默认压缩模型进行略微的修改,快速得到一个需要的压缩模型。一次正确的压测,首先需要定义压测模型,而如何定义压测模型主要和以下几个方面有关系。首先需要定义初始的数据量,这个数据量最好是匹配实际的数据量。假设有1亿个数据,那么在压测的时候,就需要准备1亿个数据,如果只准备了10万或100万个数据,那么压测出来的性能和实际的性能会相差甚远。次数比那你在亚瑟的时候,你就需要准备1亿的数据,如果你只准备了1万或者10万的数据,那压出来的性能和你实际的性能会相差甚远。其次就是在压缩过程中需要执行的读写次数。 除了这两个之外,还有一个比较重要的部分。以表的结构来举例,表是由很多行组成的,每一行有多个列,每列都有大小。所以需要定义字段数以及每个字段的长度。如此匹配你的实际业务模型,才能得到一个比较准确的压测。因为在大部分数据库对于每一行的大小都会有限制和要求,当这一行比较大时,其性能衰退往往比较明显的。除了这几个字段以外还有readallfields,表示在压测的时候,是否需要读取所有的字段以及readproportion updateproportion可以定义读写比例。假设是纯读的场景,那么readproportion就设为一,如果是纯写的,insertproportion就设为一。 压测模型定义完成后,要对数据库进行初始化。ycsb这款压测工具默认的命名空间是ycsb,默认的压测表是usertable。通过这两条命令,可以直接创建出所需要的namespace和table表。需要注意的是在创建namespace的时,需要指定一个副本数。副本数也会影响整体的数据大小,同时会影响读写性能,所以在设置压测副本数的时候,和实际应用保持一致最佳。构造好表后,第一步需要构造测试数据,通过ycsbload加数据库类型指定一个现成数以及压测模板开始完成测试数据的构造。由于测试数据的构造是一个写入的过程,所以整个构造过程也可以理解为纯写入场景下数据库性能的表现。构造完成后会反馈出共执行的操作次数,成功率,整个吞吐每秒所在量级,以及平均响应时长。所以ycsb这款工具在使用的时候较为方便,最后会形成一个报表的形式,告诉使用者整个过程中的性能表现情况。压缩时要使用内网来进行压测,如果使用公网那么网络延迟会很大,导致压缩出来的结果不理想。其次是使用的压测ecs,例如虚拟器,其规格不宜太小,如果客户端规格太小,例如只有一盒两器,那么在压测的过程中,首先达到性能瓶颈的并不是数据库,而是客户端。压缩数据的时候,要确保数据量足够大,能够持续一段时间,因为任何一款数据库都存在周期运行的任务或后台的任务,如果持续的时间只有一分钟,那么这个后台的任务或者周期任务就可能没有执行,那么压缩出来的表现就并不是最真实的表现。任何一个周期任务都会抢占cpu资源或磁盘的io资源会影响读写的性能。以读场景来举例,刚开始的时候,cassandra里面的缓存是空的,只有在持续一段时间之后,数据库的缓存命中率较为稳定了,测试出来的数据才真实。二、性能调优 以下为常见的压测场景以及对应的性能调优的思路cassandra读写原理 写请求就是在写请求进入之后,会首先进入log,也就是commit log或y log。在记录完成之后,会将其插入到内存里对应的一个结构,一旦抄录完成,写请求就结束了。大部分产品如果正确的使用,写入,基本不会成为瓶颈。因为只涉及到一次磁盘写入和一次内存操作,而这一次磁盘写入,因为是写论文的形式,所以直接append,append磁盘写入的话,性能很高。以上就是如何完成一次写请求。读请求,因为每一次写入,都写入到了内存的Memortable里,如果一直写入到内存中,memortable会越来越多,但内存却放不下。为了避免内存水位过高,cassandra会周期性的把内存里面的Memortable fresh到磁盘形成一个ss table文件。ss table文件逐渐增多之后,文件数会过多,所以会有周期性的任务,叫做compaction,把多个ss table文件合并成一个大的ss table文件。所以在一条读请求进来之后,会对内存里面的memortable和磁盘剩的ss table做多路归并排序,然后找到所需要的数据再发回。在cassandra里面不存在落盘延迟或读延迟,在cassandra里,每一条写请求,只要成功了,立马就是可读的。因为在读的时候,会考虑内存里面的memmortable对象,所以每次写入成功,立马就可读,这就是cassandra的使用特性。 做任何一次的性能调优,都需要有完善的监控。完善的监控是所有性能调优的出发地以及终点。一个完善的监控,需要具备cpu,内存,磁盘,网络等最基本的系统级别的监控,同时还需要能够看到一些Cassandra内部的应用的状态,例如读写的oops,命中率以及各线程承担的状态。 场景一的特点是写入稳定,但是读取的延迟在逐渐的升高,这是一个典型的案例。如何处理一个读请求,读请求会对内存里面的table和s磁盘上的多个ss table做多路归并的排序。所以说如果ss table的数量越多,可能涉及到的io次数就会越多,IO是磁盘,当读取延迟在逐渐升高的时候,文件数在越来越多,compaction的过程被阻塞,导致文件数一直在增多。通过nodetool compactionstarts可以看到叫Pending task的数据,通过这个数据可以定位是否是compaction任务太慢或卡住了,导致有太多堆积的compaction任务没有完成,如果是,可以通过调整Compaction的并发数或者升级拥有更赋予的cpu资源来完成compassion任务,起到优化的效果。场景二 写入少,读取多,对响应延迟较为敏感。Compaction是自然默认的compaction策略,默认的compaction策略叫做size tiered compaction,在这个Compaction实行很多次之后,磁盘上的ss table会形成根据大小进行分层的一种分布,也就是会出现一些相对较小的ss table或者大小比较中等的ss table以及大小比较大的ss table。这些ss table根据它的大小形成一个分层的一种设计。这个compassion策略作为默认的一种compaction设计,有好处,但是也有劣势。每一个table可能会存在重叠,所以在最坏的情况下,读取请求进来后,可能会需要对每一个ss table做一次sick操作,才能知道在当前ss table里,是否有对应需要的数据。文件数越多,设计的io就越长,延时就越长,这时可以考虑使用另一种Compaction策略,叫做leveled tiered compaction。会把磁盘上的ss table分成若干层,每一层里面的ss table相互之间没有重叠关系。有了这个保证,所以读取请求进来之后,在每一层里面,最多就只会有一个ss table会纳入到归并排序当中,所以层级次数会决定涉及这一次读取请求需要ss table的上限,从而更加可控。但由于它需要保证每一个层级里面ss table之间相互不重叠,所以对于写的时候,会产生较大的放大和较多的Compaction任务的执行。比较适合于读较多,但是写入比较少的一种场景。 场景三写入量级特别大。类似于iot行业,物联网行业,或像滴滴轨迹记录行业,以上都很少有读,但是写入量级特别大,以下就是针对这个场景的优化思路。第一,需要知道的是网络延迟远远高于磁盘的写入延迟,所以在写入量级特别大的时候,可以考虑用批量写入的方式来使网络延迟减少客户端和服务端的交互次数,从而减少网络延迟的影响,Cassandra Batch不是为了批量写入这一个场景而设计的,它的功能强大,可以实现跨表级别的事物,但是在这样的使用方式下,它的性能损耗比较大。不太符合这个场景下的初衷,所以在实现一个批量写入的时候,需要注意的是,在做Batchinsert的时候,更适合对于同一个表做处理,不宜做跨表写入。需要unloged batch写入,而不是loged。使用unloged可以避免在实现事物的时候存在的巨大的性能损耗。同时由于它并不是专门为了批量写入这个场景而设计的,所以每一个批量写入包含的写入数最好不超过十。如果第一个场景不能满足写入的要求,大概率会遇到瓶颈,即commit log sync跟不上写入速度。其原理就是在每十秒对Commit log做一次sync操作,sync操作就是把内存里面的commit log刷到磁盘里,这意味着每次审核都会产生一次磁盘写入峰值。这一次写入其实并真正的写入到磁盘的介质当中,而会写入到一个叫磁盘的page cache里,默认的磁盘的page cache会周期性的将需要持久化到磁盘介质里面的内容下刷到磁盘里面。每次写入磁盘都是一次大批量的写入,会产生一个较大的峰值,大概率会触发写入流量的限流策略,所以在这个情况下面,调节linux内核参数,例如dirty right back和dirty expire这两个参数,可以提高page cache下刷云盘的频率,从而导致每次刷下去的大小都会减小。不容易触发限流策略,导致io weight显著的降低,对于写的延迟会有一个质的提升。另一个cassandra写入的原理,由于默认每十秒做一次sync,再写入的量级特别大时,这十秒内会堆积大量的commit log,需要被sync到磁盘。commit log的sync操作是一个单线程的处理操作,可想而知,当sync速度跟不上写入的速度时,写入就需要被block住等待。以下代码根据上一次sync完成的时间点和当下期望的时间点,如果sync小于期望sync的时间点,证明sync的速率跟不上写入的速率。于是就会有等待的操作去降低写入的tps,能让sink追上。根据搭建一个完整的监控系统来看,cassandra的监控指标叫做waitoncommit,可以定位是否是由于这一个瓶颈导致的。而在云Cassandra里面,由于每一个commit log都是一个单独的文件,在云Cassandra上,通过文件级别的并发,实现了sync环节的处理效率的提升,从而解决了这一个问题。 如果对数据进行应用多副本,数据可靠性会更高,磁盘出现故障的时候,数据不会丢失,在多副本中的一条写入请求,会走到接收节点,往往接收节点自己会形成一个副本数,同时会像其他的节点去带领发送请求,从而满足设置的副本数。在cassandra里面,每一个节点和急需的其他的节点都会维护一个队列来保存节点和节点之间通信的消息。假设设置三副本,10万级别的写入量级,就会产生20万级别的内部消息的通信成本。副本数越多,内部消息通信的放大就越严重,但量级过高的时候,可随着默认的队列实现,会产生很严重的冲突,从而导致性能降低。此时,可以通过降低副本数来达到减少内部通信的量子液去规避这个问题,或者增加节点数,节点数增加后,变相的节点之间的队列数就增加了,每一个队列的负载相对就会减少,从而也可以达到降低冲突的效果,但是这两个措施都需要业务改造,并且都有对应的成本,例如副本数降低,数据可靠性就降低了,或者集群节点数增加,其实增加的是运维的成本。而云Cassandra是通过去修改它的源码实现了一个高性能的无锁队列。 场景四 读响应时间长,io重。通用的使用误区就是在cassandra3的版本时,如果使用压缩,默认的大小是64kb。某种程度上是合理的,因为压缩需要针对指定的大小去进行压缩,才能达到比较理想的压缩率,磁盘的存储成本才能够降低,但是默认的64k依然很大,所以已经调整为16k。在4的版本里面默认的压缩的块大小就是16k,同时有比较理想的压缩率并且io会显著的降低。一个请求下来之后,需要落到对应的block下面做一个block,如果说是在磁盘里,需要把默认的64k全部读出来,做解压缩,然后才能找到对应的数据。当block的大小设置得太大的时候,磁盘io会增加很多,通过alert表属性进行调整之后,还需要做major compaction才能使这个调整真正的生效。磁盘io重就是因为cache的命中没有命中到,才会走到磁盘,才会产生磁盘io。所以可以通过nodetool info这个工具看到对应的命中率。如果实力上有较富余的内存资源,可以调整chunkcache,key cache的大小,从而去提升cache的命中率。这样落到磁盘上的io就会显著减少,降低io,从而读响应时间会更加快。如果场景是80%的读请求集中在20%的row上面,也可以考虑开启Row cache功能,这个功能默认关闭,因为会带来内存上的压力。至于说key cache,row cache和chunk cache三个cache的大小如何设置是没有一个最佳的比例的,可以根据的实际情况来调整三个cache的大小关系。调整往后以监控数据为准,监控数据实际效果好的就是最佳的大小比例。完善的监控不仅能够发现问题,还能去验证优化效果是否达到了预期,或优化措施是否有效果。 场景五读响应毛刺较高。如果毛刺较高,大概率是gc导致的。参考调参最佳时间,调整gc相关的参数能够实现gc的优化。还可以考虑使用cassandra自带的叫speculative的特性。speculative的工作原理就是客户端向服务端的节点发送了请求,根据设置的阈值,在超过这个阈值之后,如果请求还没有得到响应,就会选择第二个节点发送请求。此时,针对一个请求发送了两次请求,到服务端这两次请求中任何一次请求优先返回之后,这一次请求都算成功。都算生效,所以集群里面会周期性的有一些慢节点,通过这个阈值来判断是否遇到了慢节点,如果是就可以通过一系列操作来规避这个慢节点导致请求一直被卡住。如果阈值设置过小,会产生较多的额外请求,会增加整个集群的负载和压力,如果阈值设置得过大,就起不到应有的效果。于是,应该不断地调整阈值,去找到比较合适的一个点。性能调优总结一定要有监控,有监控才能分析,有监控才能评估优化效果,监控是性能优化的出发点和终点。熟练掌握相关工具要对原理有一定的理解
开启三权分立登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签,在页面右上角打开当前账户安全模式开关。说明 开启三权分立模式前,请确保已创建高权限账号。详细操作步骤,请参见创建账号。在创建三权分立账号面板中,设置以下参数。参数说明账号名填写账号名称。说明 账号名称需满足如下要求:由小写字母、数字或下划线组成,长度不超过16个字符。以字母开头,以字母或数字结尾。不能和已有的账号名重复。账号类型固定为安全管理员账号,无需选择。密码设置账号密码。说明 账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=确认密码再次输入密码。备注说明备注该账号的相关信息,便于后续账号管理。该参数为非必填项,最多支持256个字符。单击下一步,并设置以下参数。参数说明账号名填写账号名称。说明 账号名称需满足如下要求:由小写字母、数字或下划线组成,长度不超过16个字符。以字母开头,以字母或数字结尾。不能和已有的账号名重复。账号类型固定为审计管理员账号,无需选择。密码设置账号密码。说明 账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=确认密码再次输入密码。备注说明备注该账号的相关信息,便于后续账号管理。该参数为非必填项,最多支持256个字符。单击确定即可。说明 开启后请等待3~5秒,新设置才会生效。关闭三权分立登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。选择账号三权分立页签,在页面右上角关闭当前账户安全模式开关。在弹出的对话框中,单击确定。在弹出的高权限账号密码验证对话框中,输入高权限账号的密码并单击确定。说明 关闭后请等待3~5秒,新设置才会生效。
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
开启三权分立登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。单击账号三权分立页签,在页面右上角打开当前账户安全模式开关。说明 开启三权分立模式前,请确保已创建高权限账号。详细操作步骤,请参见创建账号。在创建三权分立账号面板中,设置以下参数。参数说明账号名填写账号名称。说明 账号名称需满足如下要求:由小写字母、数字或下划线组成,长度不超过16个字符。以字母开头,以字母或数字结尾。不能和已有的账号名重复。账号类型固定为安全管理员账号,无需选择。密码设置账号密码。说明 账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=确认密码再次输入密码。备注说明备注该账号的相关信息,便于后续账号管理。该参数为非必填项,最多支持256个字符。单击下一步,并设置以下参数。参数说明账号名填写账号名称。说明 账号名称需满足如下要求:由小写字母、数字或下划线组成,长度不超过16个字符。以字母开头,以字母或数字结尾。不能和已有的账号名重复。账号类型固定为审计管理员账号,无需选择。密码设置账号密码。说明 账号密码需满足如下要求:密码长度需为8~32个字符。由大写字母、小写字母、数字、特殊字符中的任意三种组成。特殊字符为:@#$%^&+=确认密码再次输入密码。备注说明备注该账号的相关信息,便于后续账号管理。该参数为非必填项,最多支持256个字符。单击确定即可。说明 开启后请等待3~5秒,新设置才会生效。关闭三权分立登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。找到目标实例,单击实例ID。在左侧导航栏选择配置与管理 > 安全管理。选择账号三权分立页签,在页面右上角关闭当前账户安全模式开关。在弹出的对话框中,单击确定。在弹出的高权限账号密码验证对话框中,输入高权限账号的密码并单击确定。说明 关闭后请等待3~5秒,新设置才会生效。
风险与解决方案风险传统数据库运维模式下,数据库管理员DBA(Database Administrator)拥有的权限过高且集中,容易在某些场景下给业务带来风险:DBA误判导致系统安全事故。DBA出于某种目的进行非法操作。DBA、第三方外包人员或程序开发人员越权访问敏感信息。解决方案PolarDB-X新增支持三权分立模式,打破传统数据库运维由DBA行使特权的独立控制体系,使得数据库管理员DBA、安全管理员DSA(Department Security Administrator)和审计管理员DAA(Data Audit Administrator)3者的权责更加清晰。其中:数据库管理员(DBA):只具备DDL(Data Definition Language)权限。安全管理员(DSA):只具备管理角色(Role)或用户(User)以及为其他账号授予权限的权限。审计管理员(DAA):只具备查看审计日志的权限。数据库系统账号的权限对比下表展示了在默认模式和三权分立模式下,不同数据库系统账号的权限对比。说明默认模式下的高权限账号即系统管理员账号。更多关于高权限账号的详情,请参见账号类型。开启或关闭三权分立模式,仅对系统账号(即高权限账号、系统管理员账号、安全管理员账号和审计管理员账号)的权限有影响,普通账号权限不受模式变更的影响。三权分立模式下,虽然所有系统账号均不具备DML(Data Manipulation Language)、DQL(Data Query Language)或DAL(Data Administration Language)权限,但安全管理员仍然能够将这些权限授予给普通账号。表中✔️表示具备该权限,❌表示不具备该权限。权限默认模式三权分立模式分类说明高权限账号系统管理员账号安全管理员账号审计管理员账号DDLALTER TABLECREATE TABLECREATE VIEWCREATE INDEXCREATE CCL_RULEDROP VIEWDROP INDEXDROP TABLETRUNCATE TABLE✔️✔️❌❌DMLDELETEUPDATEINSERT✔️❌❌❌DQLSELECTEXPLAINDALSHOW CCL_RULESHOW INDEX账号或角色相关账号权限管理角色权限管理✔️❌✔️❌查看审计日志查看如下两张表中的审计日志信息:information_schema.polardbx_audit_loginformation_schema.polardbx_ddl_log✔️❌❌✔️使用限制三权分立模式下的系统账号(包括系统管理员账号、安全管理员账号和审计管理员账号)存在如下限制:不支持对系统账号执行GRANT ROLE或REVOKE ROLE命令。不支持对系统账号执行GRANT PRIVILEGES 或REVOKE PRIVILEGES命令。系统账号的密码只能由对应的账号修改,如系统管理员账号的密码仅能由系统管理员账号修改,不能被其他帐号修改。系统账号均不支持SET DEFAULT ROLE命令。
查询Sequence语法SHOW SEQUENCES示例请在命令行输入如下代码:mysql> SHOW SEQUENCES;返回结果如下:+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+| NAME | VALUE | UNIT_COUNT | UNIT_INDEX | INNER_STEP | INCREMENT_BY | START_WITH | MAX_VALUE | CYCLE | TYPE |+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+| seq1 | 100000 | 1 | 0 | 100000 | N/A | N/A | N/A | N/A | GROUP || seq2 | 400000 | 3 | 1 | 100000 | N/A | N/A | N/A | N/A | GROUP || seq3 | N/A | N/A | N/A | N/A | N/A | N/A | N/A | N/A | TIME || seq4 | 1006 | N/A | N/A | N/A | 2 | 1000 | 99999999999 | N | SIMPLE |+------+--------+------------+------------+------------+--------------+------------+-------------+-------+--------+4 rows in set (0.00 sec)说明 返回结果中的TYPE列,显示的是Sequence类型的缩写。获取显式Sequence值语法[<schema_name>.]<sequence name>.NEXTVAL示例方法一请在命令行输入如下代码:mysql> SELECT sample_seq.nextval FROM dual;返回结果如下:+--------------------+| SAMPLE_SEQ.NEXTVAL |+--------------------+| 101001 |+--------------------+1 row in set (0.04 sec)方法二请在命令行输入如下代码:mysql> INSERT INTO some_users (name,address,gmt_create,gmt_modified,intro) VALUES ('sun',sample_seq.nextval,now(),now(),'aa');说明该方法是把sample_seq.nextval当做一个值写入了 SQL中。如果建表时已经指定了AUTO_INCREMENT参数,INSERT时不需要指定自增列,可以让PolarDB-X自动维护。批量获取Sequence值语法批量获取Sequence值的语法如下:SELECT [<schema_name>.]<sequence name>.NEXTVAL FROM DUAL WHERE COUNT = <numeric value>示例请在命令行输入如下代码:mysql> SELECT sample_seq.nextval FROM dual WHERE count = 10;返回结果如下:+--------------------+| SAMPLE_SEQ.NEXTVAL |+--------------------+| 101002 || 101003 || 101004 || 101005 || 101006 || 101007 || 101008 || 101009 || 101010 || 101011 |+--------------------+10 row in set (0.04 sec)
PXC-1305 ERR_UNKNOWN_SAVEPOINT描述:指定名称的SAVEPOINT不存在。示例:ERR-CODE: [PXC-1305][ERR_UNKNOWN_SAVEPOINT] SAVEPOINT ***** does not exist 说明:在PolarDB-X上执行ROLLBACK TO SAVEPOINT或者RELEASE SAVEPOINT命令时,如果指定的SAVEPOINT名称不存在,会提示PXC-1305错误。建议检查SAVEPOINT命令返回的名称是否和使用的名称一致。PXC-1094 ERR_UNKNOWN_THREAD_ID描述:KILL命令指定的会话ID不存在。示例:ERR-CODE: [PXC-1094][ERR_UNKNOWN_THREAD_ID] Unknown thread id: *****说明:在PolarDB-X上执行KILL命令取消执行的SQL语句时,如果指定的会话ID不存在,或者对应的SQL语句已经结束执行,会提示PXC-1094错误。建议使用SHOW PROCESSLIST命令查看正在执行的SQL语句会话ID,并只针对返回的ID执行KILL命令。PXC-4006 ERR_TABLE_NOT_EXIST描述:PolarDB-X数据表不存在。示例:ERR-CODE: [PXC-4006][ERR_TABLE_NOT_EXIST] Table '*****' doesn't exist.说明:该错误码表示PolarDB-X数据表不存在,或者由于未知原因,PolarDB-X无法加载数据表的元数据信息。PXC-4007 ERR_CANNOT_FETCH_TABLE_META描述:PolarDB-X无法加载数据表的元数据信息。示例:ERR-CODE: [PXC-4007][ERR_CANNOT_FETCH_TABLE_META] Table '*****' metadata cannot be fetched because Table '*****.*****' doesn't exist.说明:该错误码表示PolarDB-X尝试读取数据表的元数据信息失败。可能的错误原因如下:数据表未创建。维护的元数据库信息不一致。表被删除或者改名。出现该错误时,首先检查表名是否存在,或者执行check table 命令确认PolarDB-X维护的元数据库信息是否一致。如果确定表被人为删除或改名,可以通过PolarDB-X提供的数据恢复功能修复。如果仍无法修复,请联系技术支持。PXC-4018 ERR_INVALID_DDL_PARAMS描述:PolarDB-X执行DDL过程失败。示例:ERR-CODE: [PXC-4018][ERR_INVALID_DDL_PARAMS] invalid '*****'.说明:该错误表示用户执行DDL的参数有错误,请检查参数正确性。如果确认参数正确,请联系技术支持。PXC-4100 ERR_ATOM_NOT_AVALILABLE描述:PolarDB-X后端数据节点暂时不可用。示例:ERR-CODE: [PXC-4100][ERR_ATOM_NOT_AVALILABLE] Atom : ***** isNotAvailable说明:如果PolarDB-X探测到后端某个数据节点状态异常,会临时阻止访问该实例并提示PXC-4100错误。当遇到该错误,请检查PolarDB-X后端所有数据节点是否异常。当后端数据节点从异常状态恢复后,PolarDB-X将自动解除不可用状态,恢复应用正常访问。PXC-4101 ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON描述:PolarDB-X计算节点和数据节点连接获取失败。示例:ERR-CODE: [PXC-4101][ERR_ATOM_GET_CONNECTION_FAILED_UNKNOWN_REASON] Get connection for db '*****' from pool failed. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 0, maxActive 5. You should look for the following logs which contains the real reason.说明:PolarDB-X在处理请求时会向数据节点异步创建连接。如果无法在等待时间内完成数据节点连接创建,而异步任务又尚未返回错误原因,PolarDB-X会向应用返回PXC-4101错误。该错误通常是由后端数据节点异常导致的。如果排除数据节点问题后仍然出现该错误,请联系技术支持。PXC-4102 ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON描述:已知原因的PolarDB-X后端连接获取失败。示例:ERR-CODE: [PXC-4102][ERR_ATOM_GET_CONNECTION_FAILED_KNOWN_REASON] Get connection for db '*****' failed because wait millis 5000, active 0, maxActive 5说明:PolarDB-X计算节点获取数据节点连接时出错,错误原因已经在ERR-CODE消息中给出。常见PolarDB-X数据节点连接失败的原因如下:后端数据节点连接数已满计算节点到数据节点的连接超时数据节点拒绝连接如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。PXC-4103 ERR_ATOM_CONNECTION_POOL_FULL描述:PolarDB-X后端数据节点连接池已满。示例:ERR-CODE: [PXC-4103][ERR_ATOM_CONNECTION_POOL_FULL] Pool of DB '*****' is full. Message from pool: wait millis 5000, active 5, maxActive 5. AppName:*****, Env:*****, UnitName:null.说明:该错误表示PolarDB-X后端连接池已满。导致PXC-4103错误的常见原因如下:应用SQL语句执行比较慢,占用单个连接的时间过长,导致连接数不够;应用端没有关闭数据库连接,导致连接泄露;有很多跨库查询(例如聚合统计类查询,未带分库条件的查询)同时执行,占用大量连接。解决方法建议如下:尽量使用框架访问数据库,如Spring JDBC、MyBatis等;按性能分析报告与DBA建议优化业务SQL语句;使用PolarDB-X读写分离将跨库查询转发至读库处理;升级更高规格的PolarDB-X,提升后端处理能力;联系技术支持调整PolarDB-X后端连接数。PXC-4104 ERR_ATOM_CREATE_CONNECTION_TOO_SLOW描述:PolarDB-X后端数据节点连接创建太慢。示例:ERR-CODE: [PXC-4104][ERR_ATOM_CREATE_CONNECTION_TOO_SLOW] Get connection for db '*****' from pool timeout. AppName:*****, Env:*****, UnitName:null. Message from pool: wait millis 5000, active 3, maxActive 5.说明:PolarDB-X向后端数据节点异步创建连接时,如果在短时间创建大量连接,或者数据节点建立连接速度太慢,会出现等待超时。该问题通常是由于后端数据节点压力过大或异常导致的,建议使用PolarDB-X读写分离,或者升级更高规格,减轻后端处理压力。如果排除后端数据节点问题后仍然出现该错误,请联系技术支持。如果问题是由短时间创建大量连接导致,建议联系技术支持调整PolarDB-X最小连接数。PXC-4105 ERR_ATOM_ACCESS_DENIED描述:PolarDB-X后端数据节点拒绝创建连接。示例:ERR-CODE: [PXC-4105][ERR_ATOM_ACCESS_DENIED] DB '*****' Access denied for user '*****'@'*****'. AppName:*****, Env:*****, UnitName:null. Please contact DBA to check.说明:该错误表明PolarDB-X通过用户名和密码连接数据节点时被拒绝访问,请联系技术支持。PXC-4106 ERR_ATOM_DB_DOWN描述:PolarDB-X后端数据节点无法连接。示例:ERR-CODE: [PXC-4106][ERR_ATOM_DB_DOWN] DB '*****' cannot be connected. AppName:*****, Env:*****, UnitName:null. It seems a very real possibility that this DB IS DOWN. Please contact DBA to check.说明:该错误表明PolarDB-X向后端数据节点创建连接超时或者没有响应。遇到该错误的通常原因是数据节点故障,请联系技术支持。PXC-4108 ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW描述:变量(variable)不允许被设置为NULL。示例:ERR-CODE: [PXC-4108][ERR_VARIABLE_CAN_NOT_SET_TO_NULL_FOR_NOW] System variable ***** can''t set to null for now;说明:有些数据节点变量(variable)不允许用SET var = x语句设置成NULL值。遇到这种情况,PolarDB-X会提示PXC-4108错误。PXC-4200 ERR_GROUP_NOT_AVALILABLE描述:PolarDB-X下的某个数据节点暂时不可用。示例:ERR-CODE: [PXC-4200][ERR_GROUP_NOT_AVALILABLE] The TDDL Group ***** is running in fail-fast status, caused by this SQL:***** which threw a fatal exception as *****.说明:当分库包含的数据节点出现访问异常,并且分库下没有其他可用数据节点时,PolarDB-X会将分库置于fail-fast状态并提示PXC-4200错误。通常该错误是由于数据节点故障导致的。请根据包含的数据节点异常信息定位和解决问题。当故障数据节点恢复后,PolarDB-X将自动取消fail-fast状态。如果数据节点故障解决后仍然出现PXC-4200错误,请联系技术支持。PXC-4201 ERR_GROUP_NO_ATOM_AVALILABLE描述:PolarDB-X分库内暂时没有可用数据节点。示例:ERR-CODE: [PXC-4201][ERR_GROUP_NO_ATOM_AVALILABLE] All weights of DBs in Group '*****' is 0. Weights is: *****.说明:当分库包含的数据节点全都不可用,或者处于fail-fast状态时,PolarDB-X会提示PXC-4201错误。通常该错误是由于数据节点故障导致的。请检查后端数据节点状态以定位和解决问题。如果故障解决后仍然出现PXC-4201错误,请联系技术支持。PXC-4202 ERR_SQL_QUERY_TIMEOUT描述:PolarDB-X查询超时。示例:ERR-CODE: [PXC-4202][ERR_SQL_QUERY_TIMEOUT] Slow query leads to a timeout exception, please contact DBA to check slow sql. SocketTimout:*** ms, Atom:*****, Group:*****, AppName:*****, Env:*****, UnitName:null.说明:该错误表示SQL语句在后端数据节点上的执行时间超过PolarDB-X设置的socketTimeout参数限制。默认的PolarDB-X超时(socketTimeout)时间设置是900秒。建议优化SQL语句,以及在后端数据节点上创建适合的索引以提升SQL语句的执行性能。如果优化后的SQL语句仍然较慢,可以参见如下Hint语法临时设置PolarDB-X的超时时间:/*TDDL:SOCKET_TIMEOUT=900000*/ SELECT * FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。如果需要永久调整PolarDB-X超时设置,请联系技术支持。PXC-4203 ERR_SQL_QUERY_MERGE_TIMEOUT描述:PolarDB-X分布式查询超时。示例:ERR-CODE: PXC-4203 Slow sql query leads to a timeout exception during merging results, please optimize the slow sql. The the default timeout is ms. DB is *说明:PolarDB-X执行分布式查询超时,默认的超时设置是900秒。产生PXC-4203错误表示SQL语句扫描了多个分库的数据并且执行时间超过900秒。建议进行如下优化:在WHERE条件中添加分库键(Sharding key)条件,将SQL语句优化成单库执行;检查是否可以在后端数据节点上创建适合的索引,提升扫描各个分库数据的性能;设法消除分布式查询中的跨库JOIN,数据重排序等耗时操作,降低PolarDB-X数据合并阶段的消耗。如果优化后的SQL语句仍然较慢,可以使用如下Hint语法临时设置PolarDB-X的超时时间:/TDDL:SOCKET_TIMEOUT=900000/ SELECT FROM dual;,其中SOCKET_TIMEOUT设置的单位是毫秒。关于PolarDB-X的Hint用法,详情请参见自定义SQL超时时间。PXC-4400 ERR_SEQUENCE描述:处理Sequence(全局唯一序列)失败。示例:ERR-CODE: PXC-4400 Sequence : All dataSource faild to get value!说明:处理Sequence出错,错误信息在Sequence :中给出。导致PXC-4400的常见原因是数据节点故障,无法访问Sequence有关的数据表。建议先检查后端数据节点状态。如果排除数据节点故障后仍然发生错误,请联系技术支持。PXC-4401 ERR_MISS_SEQUENCE描述:Sequence不存在。示例:ERR-CODE: PXC-4401 Sequence '*' is not found说明:命令中使用的Sequence名称不存在。建议用SHOW SEQUENCES命令检查PolarDB-X中所有已创建的Sequence名称,并且选择正确的Sequence使用。如果使用的Sequence尚不存在,可以用如下语句创建:CREATE SEQUENCE <sequence name> [ START WITH <numeric value> ] [ INCREMENT BY <numeric value> ] [ MAXVALUE <numeric value> ] [ CYCLE | NOCYCLE ]`如果使用的Sequence已经存在,但是仍然提示PXC-4401错误,请联系技术支持。关于PolarDB-X的Sequence用法,详情请参见PolarDB-X Sequence介绍。PXC-4403 ERR_MISS_SEQUENCE_TABLE_ON_DEFAULT_DB描述:Sequence使用的数据表不存在。示例:ERR-CODE: PXC-4403 Sequence table is not in default db.说明:无法在PolarDB-X后端的数据库里访问名称叫sequence或者sequence_opt的数据表,请联系技术支持。PXC-4404 ERR_SEQUENCE_TABLE_META描述:Sequence数据表结构错误。示例:ERR-CODE: PXC-4404 the meta of sequence table is error, some columns missed说明:Sequence相关数据表(如sequence或sequence_opt)中缺少相应的字段,请联系技术支持。PXC-4405 ERR_INIT_SEQUENCE_FROM_DB描述:初始化Sequence错误。示例:ERR-CODE: PXC-4405 init sequence manager error: 说明:初始化需要访问的Sequence时出错,错误信息在init sequence manager error:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4405错误,请联系技术支持。PXC-4407 ERR_OTHER_WHEN_BUILD_SEQUENCE描述:访问Sequence数据表出错。示例:ERR-CODE: PXC-4407 error when build sequence: 说明:在访问Sequence相关数据表(如sequence或sequence_opt)时发生错误。错误信息在error when build sequence:后给出。建议先检查PolarDB-X后端数据节点状态。如果排除数据节点故障后仍然提示PXC-4407错误,请联系技术支持。PXC-4408 ERR_SEQUENCE_NEXT_VALUE描述:获取Sequence值出错。示例:ERR-CODE: PXC-4408 error when get sequence's next value, sequence is: , error: 说明:使用PolarDB-X自增主键,或者使用.NEXTVAL语法手工获取全局唯一ID时发生错误。错误原因在error:提示后给出。产生PXC-4408错误的原因是后端数据节点故障。建议先检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点故障后仍然提示PXC-4408错误,请联系技术支持。PXC-4500 ERR_PARSER描述:解析SQL语句失败。示例:ERR-CODE: PXC-4500 not support statement: '*'说明:PolarDB-X支持符合SQL-92标准的SQL语法,以及MySQL支持的语法扩展与函数。请检查执行的SQL语句是否符合PolarDB-X兼容的SQL标准及MySQL规范。关于SQL标准语法,请参见SQL标准语法。关于SQL兼容性,请参见SQL兼容性。关于MySQL 5.6 SQL语法,请参见MySQL 5.6 SQL语法。如果您的SQL语句符合上述语法规则仍然提示PXC-4500错误,请联系技术支持。PXC-4501 ERR_OPTIMIZER描述:优化器转换SQL语句失败。示例:ERR-CODE: PXC-4501 optimize error by: Unknown column '' in 'order clause'说明:PolarDB-X优化器的工作是转换SQL语句到内部语法树。如果SQL语句中出现逻辑错误,优化器转换就会失败,产生PXC-4501错误。建议按照optimize error by:后的提示检查和调整您的SQL语句。如果调整SQL语句后仍然提示PXC-4501错误,请联系技术支持。PXC-4502 ERR_OPTIMIZER_MISS_ORDER_FUNCTION_IN_SELECT描述:ORDER BY包含的函数列在SELECT子句中不存在。示例:ERR-CODE: PXC-4502 Syntax Error: orderBy/GroupBy Column is not existed in select clause`说明:当SQL语句中的ORDER BY子句包含函数列(例如RAND())时,PolarDB-X要求同样的函数列必须也在SELECT子句中出现,否则提示PXC-4502错误。建议在SELECT子句中添加相应的函数列。PXC-4504 ERR_OPTIMIZER_SELF_CROSS_JOIN描述:相同表JOIN的条件不足。示例:ERR-CODE: PXC-4504 self cross join case, add shard column filter on right table说明:PolarDB-X在执行相同表的JOIN时,如果WHERE子句只包含其中一张左表(或右表)的拆分字段(sharding column)条件,会提示PXC-4504错误。建议调整SQL语句,在WHERE子句中补全JOIN左表(或右表)的拆分字段条件。PXC-4506 ERR_MODIFY_SHARD_COLUMN描述:禁止更新拆分键。示例:ERR-CODE: PXC-4506 Column '' is a sharding key of table '', which is forbidden to be modified.说明:这是禁止修改拆分键(sharding key)的异常,PolarDB-X目前静止修复包含GSI的表的分区键。建议将对应UPDATE语句修改为相同效果的INSERT+DELETE语句。PXC-4508 ERR_OPTIMIZER_NOT_ALLOWED_SORT_MERGE_JOIN描述:无法执行合并排序JOIN。示例:ERR-CODE: PXC-4508 sort merge join is not allowed when missing equivalent filter说明:如果SQL语句中需要JOIN的数据表分别来自不同的数据节点,PolarDB-X会优先选择合并排序(Sort-merge Join)算法。该算法要求JOIN的左表与右表必须包含字段相等的关联条件,否则PolarDB-X将提示PXC-4508错误。建议调整SQL语句,在JOIN或WHERE部分添加相应的关联条件。PXC-4509 ERR_OPTIMIZER_ERROR_HINT描述:Hint语法错误。示例:ERR-CODE: PXC-4509 Hint Syntax Error: unexpected operation: *.说明:该错误表示SQL语句中的Hint语法无法被PolarDB-X解析。更多关于Hint语法信息,请参见自定义HINT简介PXC-4510 ERR_CONTAINS_NO_SHARDING_KEY描述:缺少拆分键(sharding key)条件。示例:ERR-CODE: PXC-4510 Your SQL contains NO SHARDING KEY '' for table '', which is not allowed in DEFAULT.说明:禁止全表扫描(full-table scan)功能,PolarDB-X在建表时默认开启全表扫描功能。如果手动关闭全表扫描,建议确认与该表有关的SQL语句都已添加拆分键条件。PXC-4511 ERR_INSERT_CONTAINS_NO_SHARDING_KEY描述:INSERT语句缺少拆分键 (sharding key)。示例:ERR-CODE: PXC-4511 Your INSERT SQL contains NO SHARDING KEY '' for table ''.说明:当INSERT语句的目标是一张PolarDB-X拆分表时,必须在插入数据中包含拆分键的值(拆分键是自增主键例外)。否则,PolarDB-X将提示PXC-4511错误。如果遇到该错误,建议修改INSERT语句补充缺少的拆分键值。PXC-4515 ERR_CONNECTION_CHARSET_NOT_MATCH描述:输入字符集不匹配。示例:ERR-CODE: PXC-4515 Caused by MySQL's character_set_connection doesn't match your input charset. Partition DDL can only take ASCII or chinese column name. If you want use chinese table or column name, Make sure MySQL connection's charset support chinese character. Use "set names xxx" to set correct charset.说明:PolarDB-X支持用中文字符命名表名及字段名。在执行含有中文字符的SQL语句时,如果数据库连接的字符集设置(character_set_connection)不支持中文(如 latin1),会提示PXC-4515错误。您可以使用SHOW VARIABLES LIKE 'character_set_connection'查询MySQL客户端当前的连接字符集,使用SET NAMES命令修改当前连接字符集。如果是Java程序JDBC方式连接PolarDB-X,请设置数据库连接参数characterEncoding。PXC-4517 ERR_MODIFY_SYSTEM_TABLE描述:禁止修改系统表。示例:ERR-CODE: PXC-4617 Table '' is PolarDB-XSYSTEM TABLE, which is forbidden to be modified.说明:PolarDB-X内部维护了一些系统表,使用SQL语句更新其中的数据会提示PXC-4517错误。限制的系统表包括sequence、sequence_opt、txc_undo_log等,请避免在业务或数据库设计中使用这些表名。PXC-4520 ERR_DML_WITH_SUBQUERY描述:不支持在DML使用子查询语句。示例:ERR-CODE: PXC-4520 DO NOT support UPDATE/DELETE with subQuery说明:目前PolarDB-X中禁止在DML语句中包含子查询语句,遇到此类问题建议先从业务上改写SQL,避免使用子查询。PXC-4521 ERR_INSERT_SHARD描述:Insert过程中一条记录被路由到了多个分片。示例:ERR-CODE: PXC-4521 Cannot decide which group to insert说明:Insert过程中一条记录被路由到了多个分片,导致不知道这条记录被插入到哪个分片,出现这类问题,请联系技术支持。PXC-4523 ERR_TODNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4523 toDnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将DNF_REX_NODE_LIMIT参数调整大。PXC-4524 ERR_TOCNF_LIMIT_EXCEED描述:where后面的过滤条件太多。示例:ERR-CODE: PXC-4524 toCnf has exceed the limit size说明:PolarDB-X会对用户SQL的查询条件(即where子句)进行CNF/DNF的条件范式转换,并进行条件推导与优化,为了优化稳定性,限制了条件数2000。用户可以将CNF_REX_NODE_LIMIT参数调整大。PXC-4526 ERR_FUNCTION_NOT_FOUND描述:该函数不支持调用。示例:ERR-CODE: PXC-4526 No match found for function signature说明:该错误表明在SQL语句中使用了错误的语法或不支持的函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4527 ERR_MODIFY_SHARD_COLUMN_ON_TABLE_WITHOUT_PK描述:不允许在无主键的表上修改分库键。示例:ERR-CODE: PXC-4527 说明:PolarDB-X目前不允许在无主键的表上修改分库键。PXC-4595 ERR_UNKNOWN_TZ描述:设置错误的时区。示例:ERR-CODE: PXC-4595 说明:建议检查时间的语法和格式是否设置正确。PXC-4600 ERR_FUNCTION描述:错误的函数调用。示例:ERR-CODE: PXC-4600 function compute error by Incorrect parameter count in the call to native function '' 说明:该错误表明在SQL语句中使用了错误的语法或参数调用函数。建议仔细检查SQL语句中的函数调用部分,使用正确的参数个数和类型调用函数。PXC-4602 ERR_CONVERTOR描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4603 ERR_ACCROSS_DB_TRANSACTION描述:错误的类型转换。示例:ERR-CODE: PXC-4602 convertor error by Unsupported convert: []说明:该错误表明PolarDB-X在执行SQL时进行数据类型转换失败。请检查SQL语句中是否存在需要隐式类型转换的数据,并且尽量使用相同类型进行比较和计算。PXC-4604 ERR_CONCURRENT_TRANSACTION描述:嵌套事务失败。示例:ERR-CODE: PXC-4604 Concurrent query is not supported on transaction group, transaction group is: {0}.说明:PolarDB-X不支持嵌套事务,如果在同一个数据库连接里尝试同时开启2个以上事务,将提示PXC-4604错误。建议在应用开发时避免使用嵌套事务,或者使用应用层的事务框架防止产生嵌套事务。PXC-4606 ERR_QUERY_CANCLED描述:当前执行的SQL被取消。示例:ERR-CODE: PXC-4606 Getting connection is not allowed when query has been cancled, group is 说明:使用KILL取消某条SQL语句的执行时,被取消的SQL语句会返回该错误。如果经常出现这一情况,请排查是否有客户端或程序在执行KILL命令。PXC-4610 ERR_CONNECTION_CLOSED描述:连接已经关闭。示例:ERR-CODE: PXC-4610 connection has been closed说明:当事务中的SQL语句执行出错,或者被KILL命令取消后,重复使用同一个数据库连接执行其他SQL语句会提示PXC-4610错误。建议在该情况下关闭连接,重新获取一个新的数据库连接。PXC-4612 ERR_CHECK_SQL_PRIV描述:由于权限不够,SQL语句无法执行。示例:ERR-CODE: PXC-4612 check user on db * sql privileges failed.说明:PolarDB-X的新版本支持账号和授权,类似MySQL账号权限体系,只有拥有对应类型权限的账号才能执行该SQL语句。如果账号权限不足,PolarDB-X将提示PXC-4612错误。建议检查用户拥有的PolarDB-X权限。如果权限不足,请在PolarDB-X控制台设置。关于PolarDB-X账号与权限设置,请参见PolarDB-X账号和权限系统PXC-4614 ERR_EXECUTE_ON_MYSQL描述:SQL语句在DN上执行报错。示例:ERR-CODE: PXC-4614 Error occurs when execute on GROUP '': Duplicate entry '' for key 'PRIMARY'PolarDB-X在后端数据节点数据库上执行SQL语句报错,末尾包含了从数据节点返回的原始错误信息,例如: Duplicate entry '*' for key 'PRIMARY'表示写入数据节点数据表发生了主键冲突。 The table '*' is full表示数据节点使用的临时表已满,需要调整临时表空间或优化SQL语句。 Deadlock found when trying to get lock;表示在数据节点中出现了死锁,通常是数据写入存在较多事务冲突导致的。说明:建议参见PXC-4614提供的原始错误信息排查问题。更多关于SQL语句错误信息请参见MySQL 5.6文档。如果排除应用或数据节点问题后仍然发生PXC-4614错误,请联系技术支持。PXC-4616 ERR_UNKNOWN_DATABASE描述:错误的数据库。示例:ERR-CODE: PXC-4616 Unknown database ''说明:PolarDB-X允许在DDL语句中指定数据库名称。如果指定的数据库名称与PolarDB-X提供的数据库名称不一致,将返回PXC-4616错误。建议修改DDL语句中的数据库名称,确保与PolarDB-X数据库名称一致。PXC-4620 ERR_FORBID_EXECUTE_DML_ALL说明:PolarDB-X禁止不带where条件执行delete和update操作。PXC-4633 ERR_DB_STATUS_READ_ONLY示例:ERR-CODE: PXC-4633 Database is read-only, only read sql are supported说明:该错误码表示数据库只有读权限,请检查下当前账号的权限是否受限。PXC-4707 ERR_OUT_OF_MEMORY描述:临时表使用内存超限。示例:ERR-CODE: PXC-4707说明:为了保证数据库稳定性,PolarDB-X限制了每条查询的临时表使用内存量,说明用户当前的查询涉及到的数据比较多,可以打开SPILL或者调大当前查询临时表内存限制。PXC-4709 ERR_IVENTORY_HINT_NOT_SUPPORT_CROSS_SHARD示例:ERR-CODE: PXC-4709说明:热点秒杀功能要求是单分片事务,如果涉及到多分片事务,会出现该错误。请调整业务逻辑,确保在单分片事务下使用热点功能。PXC-4994 ERR_FLOW_CONTROL描述:流量已达上限。示例:ERR-CODE: PXC-4994 [] flow control by 说明:该错误代表PolarDB-X处理SQL请求已达到内部流量上限,当前请求被拒绝。建议检查SQL请求量是否存在异常峰值。如果观察到SQL请求量下降后,仍然大量提示PXC-4994错误,请联系技术支持。PXC-4998 ERR_NOT_SUPPORT描述:不支持的特性。示例:ERR-CODE: PXC-4998 not support yet!说明:该错误代表使用的SQL语法或者功能PolarDB-X尚不支持。如果这些SQL语法或者功能对您十分重要,请联系技术支持。PXC-5001 ERR_TRANS描述:一般性的事务错误。示例:ERR-CODE: PXC-5001 Too many lines updated in statement.说明:请参见错误信息处理。Too many lines updated in statement事务中的UPDATE语句更新行数超出限制(1000),建议检查UPDATE语句的WHERE条件。如果需要在事务中执行大批量数据更新,可以使用PolarDB-XHint/TDDL:UNDO_LOG_LIMIT={number}/调整限制值。Deferred execution is only supported in Flexible or XA Transaction后置执行功能仅仅在柔性事务与XA事务策略下可用。在用PolarDB-X的Hint/TDDL:DEFER/语句提交后置执行功能之前,请先用SET drds_transaction_policy = 命令更改PolarDB-X事务策略。其他错误信息,请联系技术支持。PXC-5002 ERR_TRANS_UNSUPPORTED描述:事务中的语法或功能尚不支持。示例:ERR-CODE: PXC-5002 Table without primary keys is not supported.说明:该功能在PolarDB-X事务中尚不支持。如果此功能很重要,请联系技术支持。PXC-5003 ERR_TRANS_LOG描述:无法访问事务日志。示例:ERR-CODE: PXC-5003 Failed to update transaction state: 说明:为保证分布式事务的原子性,PolarDB-X在事务中会访问后端数据节点上的事务日志。如果PolarDB-X在读写事务日志时出错,将返回PXC-5003错误。产生PXC-5003错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5003错误,请联系技术支持。PXC-5006 ERR_TRANS_COMMIT描述:事务提交过程中出错。示例:ERR-CODE: PXC-5006 Failed to commit primary group : , TRANS_ID = 说明:PolarDB-X在提交事务分支过程中出错,TRANS_ID对应的事务将被自动回滚。产生PXC-5006错误的原因通常来自后端的数据节点故障。建议检查PolarDB-X后端数据节点状态和访问压力。如果排除数据节点问题后仍然产生PXC-5006错误,请联系技术支持。PXC-5008 ERR_TRANS_TERMINATED描述:事务已被Kill或超时中止。示例:ERR-CODE: PXC-5008 Current transaction was killed or timeout. You may need to set a longer timeout value.说明:如果PolarDB-X事务在执行中被Kill或者超时(执行时间超出drds_transaction_timeout值),则出现该错误。如果是事务超时导致报错,建议使用SET drds_transaction_timeout = 命令修改PolarDB-X事务的执行时间上限,单位是毫秒。PXC-5010 ERR_TRANS_CONTINUE_AFTER_WRITE_FAIL描述:写入失败后,不允许继续进行事务操作。示例:ERR-CODE: PXC-5010 Cannot continue or commit transaction after writing failed说明:如果PolarDB-X事务中涉及到分布式事务,执行失败后,不允许继续进行事务,这个时候需要前端主动执行rollback,重试事务操作。PXC-5108 ERR_CHECK_PRIVILEGE_FAILED_ON_TABLE说明:当前账号没有对当前表的操作权限,请检查权限。PXC-5119 ERR_FILE_CANNOT_BE_CREATE说明:PolarDB-X默认关闭对select outfile语句的支持,如有需要请联系技术支持。PXC-5302 ERR_GLOBAL_SECONDARY_INDEX_UNSUPPORTED说明:当前表不支持创建全局二级索引。可能是如下原因导致的:1. 当前表是单表或者广播表;2. 全局二级索引的列不包含分区键。其他情况请联系技术支持。PXC-5306 ERR_GLOBAL_SECONDARY_INDEX_INSERT_DUPLICATE_VALUES说明:在数据写入到全局二级索引表过程中存在主键冲突,请根据报错信息提示的记录值,确认是否存在主键冲突。PXC-5308 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_UNIQUE_KEY说明:在执行DML过程中,全局二级索引表存在唯一键冲突,请根据报错信息提示的记录值,确认是否存在唯一键冲突。PXC-5310 ERR_GLOBAL_SECONDARY_INDEX_ONLY_SUPPORT_XA说明:PolarDB-X只有在XA/TSO分布式事务下,才支持全局二级索引,如果产生此报错,可能业务之前调整过默认事务策略,请调整回XA/TSO分布式事务,再创建全局二级索引。PXC-5313 ERR_GLOBAL_SECONDARY_INDEX_MODIFY_GSI_TABLE_WITH_DDL说明:PolarDB-X默认不支持对全局二级索引表做DDL操作,如有需要请联系技术支持。PXC-5316 ERR_GLOBAL_SECONDARY_INDEX_INDEX_AND_SHARDING_COLUMNS_NOT_MATCH说明:PolarDB-X在创建全局二级索引时,要求索引表字段必须包含主表分区键,因为在回表过程中需要根据分区键定位到具体的分片和具体记录。如果产生此报错,请检查DDL语句中索引表字段是否包含了分区键。PXC-5317 ERR_GLOBAL_SECONDARY_INDEX_CONTINUE_AFTER_WRITE_FAIL示例:ERR-CODE: PXC-5317 Cannot continue or commit transaction after writing global secondary index failed说明:在包含GSI的表上执行DML语句时,如果产生此报错,则不允许继续提交包含该失败DML语句的事务。需要修改业务代码,DML报错后需要回滚事务之后重试。PXC-5321 ERR_GLOBAL_SECONDARY_INDEX_BACKFILL_DUPLICATE_ENTRY说明:在创建全局二级索引过程中,数据回填出现了索引表主键冲突,请确认索引表的主键是否存在相同值。PXC-8007 ERR_ABANDONED_TASK说明:查询过慢或者由于不明原因卡住超过2小时,数据库系统会终止查询,出现该异常。请先优化查询,确保不会出现超慢查询,若无法解决,请联系技术支持。PXC-8008 ERR_EXECUTE_SPILL说明:查询过程中,数据过大会触发临时表落盘,这个错误是在数据落盘过程中出现的异常,请联系技术支持。PXC-8011 ERR_OUT_OF_SPILL_SPACE说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的可落盘的最大磁盘空间就会出现此错误。请先优化查询,减少计算过程中对临时表的依赖。若无法解决请联系技术支持。PXC-8012 ERR_OUT_OF_SPILL_FD说明:查询过程中,数据过大会触发临时表落盘,如果临时表生产的文件过多,超过了系统允许的文件句柄个数就会出现此错误。请联系技术支持,确保是否存在文件句柄泄漏,若没有泄漏,可以适当调大文件句柄个数限制。PXC-8102 ERR_PAGE_TOO_LARGE说明:在MPP并计算过程中,数据是按批在多个计算节点网络交互,如果一个批的数据过大超过RPC限制最大值,就会出现此错误,可以尝试调小默认CHUNK_SIZE值。PXC-8103 ERR_NO_NODES_AVAILABLE说明:在MPP并行计算过程中可能有计算节点出现故障,导致执行调度之初没有计算节点可调度,请确认计算节点服务是否正常,如果计算节点服务都正常仍然出现报此类错误,请联系技术支持。PXC-9301 ERR_DUPLICATED_PARTITION_NAME说明:在执行分区表相关的DDL操作过程中,使用了相同的分区表名。PXC-9305 ERR_PARTITION_NAME_NOT_EXISTS说明:在执行分区表相关的DDL操作过程中,提示分区表名不存在。请检查下分表名是否拼写正常,使用show create table和 check table检查表元数据是否一致,如果不一致,可能是元数据维护信息不一致导致。请联系技术支持。PXC-10004 ERR_X_PROTOCOL_RESULT示例:ERR-CODE: PXC-10004 Should use chunk2chunk to fetch data说明:PolarDB-X计算节点和数据节点采用的是私有RPC通信,出现这类异常主要是计算节点和数据节点建立的连接异常,具体原因有很多种,需要查看异常信息,如果无法定位具体问题,请联系技术支持。 </div>
开发者学堂课程【JDBC数据库开发进阶:MySQL中的开启和关闭事务】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/32MySQL中的开启和关闭事务 目录:1.事务的四大特性:ACID2.MySQL中的操作事务3.jabc中操作事务 而在MySQL中该如何操作事务?事务其实是有两个端点的,分为事务的开始(start transaction)和结束(commit 表示提交事务或rollback 表示回滚事务,事务执行失败,回到原来的状态) 接下来创建表!选择mydb3,将以下程序执行:为了方便演示事务,我们需要创建一一个account表:。CREATE TABLE account('id INT PRIMARY KEY AUTO_ INCREMENT,NAME VARCHAR(30),balance NUMERIC(10.2));INSERT INTO account(NAME,balanse) VALUES('zs', 100000);INSERT INTO account(NAME,balance) VALUES('Is', 10000);INSERT INTO account(NAME, balane) VALUES('ww', 10000); SELECT * FROM account; 首先事务主要包括:1.事务的四大特性:ACID2.MySQL中的操作事务3.jabc中操作事务 而在MySQL中该如何操作事务?事务其实是有两个端点的,分为事务的开始(start transaction)和结束(commit 表示提交事务或rollback 表示回滚事务,事务执行失败,回到原来的状态) 接下来我们按照操作来做一次执行,打开执行的程序,输入mysql -uroot -p,输入密码然后进入,再选择数据库mudb3,再查询一下数据库中的表 再输入show tables;又要选择account表,故输入select *front account;先查询一下数据库中的表,就显示以下 确认数据没问题之后,就开始转账操作首先使用transaction,输入start transaction;表示事务开始了,接下来执行的所有操作就都在这个事务之内,直到出现commit或rollback接下来,就开始执行update ,输入update account set balance=900 where name='zs';这句话的作用就是更新张三的账户余额,就是把张三减去100块钱,结果张三的账户余额就变成了900 之后我们再输入update account set balance=1100 where name='ls';查李四的账户余额就变成了1100但进行到这一步,此时的事务并未提交,而最后再输入rollback,则事务就相当于没有发生,就会回滚到刚刚开始。虽然整个操作进行完并没有使得最后的结果发生变化,但并不证明操作没有进行,因为每次操作后查找时都显示了不一定的变化。由此我们应该明白事务可以回滚并且可以提交!! 接下来,再重新进行一轮新的操作,输入start transaction;再更新数据update account set balance -balanc-100 where name=’zs’;最后select *fron account;查询表而之后输入update account set balance -balanc+100 where name=’ls’;将balance-100变成balance+100之后,zs变ls张三变成李四之后,再查询表,执行成功就可以发现表的数据发生了改变之后再输入commit之后数据就无法在发生改变,且并不在回滚。事务回滚是回滚到开始的时候,而输入commit之后事务就已经结束了。无法再进行回滚!!如果要回滚,只能重新再开启一个事务!!之后再输入rollback。
前提条件释放实例前,请确保已经删除了该实例下的所有数据库。警告 数据库删除后,数据库内所有数据将被清空且无法找回,请谨慎操作。仅商品类型为按量付费的实例才支持被释放。操作步骤登录云原生分布式数据库控制台。在页面左上角选择目标实例所在地域。在实例列表页,单击PolarDB-X 2.0页签。在目标实例右侧的警告 实例释放后不可恢复,请谨慎操作。在弹出的对话框中,单击确定。操作栏中,单击图标后,再单击释放。
开发者学堂课程【Java面试疑难点串讲2:乐观锁与悲观锁】学习笔记,与课程紧密联系,让用户快速学习知识。课程地址:https://developer.aliyun.com/learning/course/25乐观锁与悲观锁 悲观锁本质上是数据库自身所具备的一种处理机制,在数据库的事务里面有一个隔离性的概念,其主要特征是当一个session操作某条数据的时候,其他的session无法操作(见oracle数据库的事务课程),这是一种锁的实现,是数据库自带的功能。之前都是针对更新的操作使用的锁,如果在做查询时也使用锁,就需加上FOR UPDATE:语句:SELECT*FROM 表名称FOR UPDATE; 表示使用悲观锁,在事务提交或回滚之前该数据都不允许更新。乐观锁是不使用数据库锁的处理(不推荐),需在使用的数据表追加一个字段,而这个字段用于做一个版本号。例如,正常情况下用户表可能只有mid、password,但若使用了悲观锁则还需追加有一个字段的列,这个列标识版本号: 现假设有一条数据:LNSERTINTO member(mid,name,ver)VALUES(‘mldn’,‘hello’,0); 现假设有两个session要进行该数据的读取,由于没有使用悲观锁,所以两个session均可对该数据进行修改,第一个session修改之后将版本号做了“+1”处理,变为1,而后一个·session更新时发现版本号不对,则不允许更新。乐观锁是基于算法的一种实现,实际操作麻烦,虽在Hibernate设计框架中有此概念,但从开发角度看,建议交由数据库自行处理(使用悲观锁)。
PolarDB-X HTAP架构更多信息,请参见混合负载HTAP。HTAP集群您购买的PolarDB-X主实例,主要面向在线通用业务场景。如果业务针对同一份数据有分析、专注离线拖数、跑批等场景,您可以在PolarDB-X主实例上购买多个只读实例。业务如果有在线HTAP混合流量或者读写分离的需求,推荐使用集群地址。PolarDB-X内部会基于智能路由或者读写权重将部分流量转发给只读实例;业务上只有离线数据分析需求时,推荐使用只读地址,只读地址会直接访问只读实例,只读地址的流量会采用MPP加速。关于连接地址信息,请参见集群地址和只读地址。路由智能路由PolarDB-X优化器会基于代价分析出查询物理扫描行数、CPU、内存、IO、网络等核心资源消耗量,将请求区分为TP与AP负载。当您在集群地址上开启了智能路由,会主动识别SQL的工作负载类型来做路由,比如将识别为AP负载的流量路由给只读实例。您可以通过explain cost指令查看SQL工作负载类型的识别情况。例如以下查询,该查询涉及到物理扫描行数rowcount很小,计算资源(CPU&Memory)也消耗比较少,所以这个查询被识别为TP负载。mysql> explain cost select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10; | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TopN(sort="cnt ASC", offset=?2, fetch=?3): rowcount = 1.0, cumulative cost = value = 2.8765038E7, cpu = 37.0, memory = 64.0, io = 3.0, net = 5.75, id = 163602178 | | Filter(condition="cnt > ?1"): rowcount = 1.0, cumulative cost = value = 2.8765026E7, cpu = 26.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602177 | | HashAgg(group="k", cnt="COUNT()"): rowcount = 1.0, cumulative cost = value = 2.8765025E7, cpu = 25.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602171 | | BKAJoin(condition="k = id", type="inner"): rowcount = 1.0, cumulative cost = value = 2.8765012E7, cpu = 12.0, memory = 18.0, io = 3.0, net = 5.75, id = 163602169 | | Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 2.3755003E7, cpu = 3.0, memory = 0.0, io = 1.0, net = 4.75, id = 163602164 | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)"): rowcount = 1.0, cumulative cost = value = 2.3755002E7, cpu = 2.0, memory = 0.0, io = 1.0, net = 4.75, id = 163601451 | | Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 5003.0, cpu = 3.0, memory = 0.0, io = 1.0, net = 0.0, id = 163602167 | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))"): rowcount = 1.0, cumulative cost = value = 5002.0, cpu = 2.0, memory = 0.0, io = 1.0, net = 0.0, id = 163601377 | | | WorkloadType: TP | | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+工作负载的识别,对于HTAP路由至关重要。这里也允许您通过HINT WORKLOAD_TYPE指定工作负载。同样以上述查询为例,可以将查询负载强制指定为AP。mysql> explain cost /*+TDDL:WORKLOAD_TYPE=AP*/ select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10; |+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| TopN(sort="cnt ASC", offset=?2, fetch=?3): rowcount = 1.0, cumulative cost = value = 2.8765038E7, cpu = 37.0, memory = 64.0, io = 3.0, net = 5.75, id = 163602178 || Filter(condition="cnt > ?1"): rowcount = 1.0, cumulative cost = value = 2.8765026E7, cpu = 26.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602177 || HashAgg(group="k", cnt="COUNT()"): rowcount = 1.0, cumulative cost = value = 2.8765025E7, cpu = 25.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602171 || BKAJoin(condition="k = id", type="inner"): rowcount = 1.0, cumulative cost = value = 2.8765012E7, cpu = 12.0, memory = 18.0, io = 3.0, net = 5.75, id = 163602169 || Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 2.3755003E7, cpu = 3.0, memory = 0.0, io = 1.0, net = 4.75, id = 163602164 || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)"): rowcount = 1.0, cumulative cost = value = 2.3755002E7, cpu = 2.0, memory = 0.0, io = 1.0, net = 4.75, id = 163601451 || Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 5003.0, cpu = 3.0, memory = 0.0, io = 1.0, net = 0.0, id = 163602167 || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))"): rowcount = 1.0, cumulative cost = value = 5002.0, cpu = 2.0, memory = 0.0, io = 1.0, net = 0.0, id = 163601377 | || WorkloadType: AP | |+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+规则路由除了基于代价的智能路由以外,我们也支持基于读写规则的路由。允许您在控制台参数管理上设置读写分离权重参数MASTER_READ_WEIGHT,默认值为100,可配置值区间[0, 100]。如果配置为Weight=60,意味着占60%的流量会继续在主实例执行,40%的剩余流量会路由到只读实例执行,如果只读实例有多个会进行自动分配。智能路由和规则路由这两者关系是解耦的,具体关系请查看下表格。智能路由规则规则路由 (MASTER_READ_WEIGHT)路由结果开启以代价的读写分离为主规则路由建议保持默认值为100事务和写操作流量,全部路由给主实例;识别为AP的查询流量,全部路由给只读实例;识别为TP的查询流量,按照(100-MASTER_READ_WEIGHT)路由给只读实例。关闭以规则的读写分离为主规则路由的可选范围:[0-100]事务和写操作流量,全部路由给主实例;识别为TP/AP的查询流量,一律按照(100-MASTER_READ_WEIGHT)路由给只读实例。执行模式目前PolarDB-X支持了三种执行模式:单机单线程(TP_LOCAL):查询过程中,是单线程计算,TP负载的查询涉及到的扫描行数比较少,往往会采样这种执行模式,比如基于主键的点查。单机并行(AP_LOCAL):查询过程中,会利用节点的多核资源做并行计算,您在没有购买只读实例的前提下,针对AP负载的查询,往往会采样这种执行模式,一般也称之为Parallel Query模式。多机并行(MPP):您若购买了只读实例,针对AP负载的查询,可以协调只读实例上多个节点的多核做分布式多机并行加速。为了让您可以准确知道执行模式,我们在原有EXPLAIN指令上,扩展出了EXPLAIN PHYSICAL。例如以下查询,通过指令可以查看到当前查询采样的是MPP模式,此外还可以获取到每个执行片段的并发数。mysql> explain physical select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 or der by cnt limit 5, 10; +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | PLAN | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ExecutorType: MPP | | The Query's MaxConcurrentParallelism: 2 | | Fragment 1 | | Shuffle Output layout: [BIGINT, BIGINT] Output layout: [BIGINT, BIGINT] | | Output partitioning: SINGLE [] Parallelism: 1 | | TopN(sort="cnt ASC", offset=?2, fetch=?3) | | Filter(condition="cnt > ?1") | | HashAgg(group="k", cnt="COUNT()") | | BKAJoin(condition="k = id", type="inner") | | RemoteSource(sourceFragmentIds=[0], type=RecordType(INTEGER_UNSIGNED id, INTEGER_UNSIGNED k)) | | Gather(concurrent=true) | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))") | | Fragment 0 | | Shuffle Output layout: [BIGINT, BIGINT] Output layout: [BIGINT, BIGINT] | | Output partitioning: SINGLE [] Parallelism: 1 Splits: 16 | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)") | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+工作负载和执行模式有一定的耦合关系,AP工作负载会采用多机并行计算。同样的也允许您通过HINT EXECUTOR_MODE指定执行模式。假如主实例空闲资源很多,可以考虑强制设置为单机或者多机并行模式来加速。mysql> explain physical /*+TDDL:EXECUTOR_MODE=AP_LOCAL*/select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10; |+-------------------------------------------------------------------------------------------------------------------------------------------------------------+| ExecutorMode: AP_LOCAL || Fragment 0 dependency: [] parallelism: 4 || BKAJoin(condition="k = id", type="inner") || Gather(concurrent=true) || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)") || Gather(concurrent=true) || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))") || Fragment 1 dependency: [] parallelism: 8 || LocalBuffer || RemoteSource(sourceFragmentIds=[0], type=RecordType(INTEGER_UNSIGNED id, INTEGER_UNSIGNED k, INTEGER_UNSIGNED k0)) || Fragment 2 dependency: [0, 1] parallelism: 8 || Filter(condition="cnt > ?1") || HashAgg(group="k", cnt="COUNT()") || RemoteSource(sourceFragmentIds=[1], type=RecordType(INTEGER_UNSIGNED id, INTEGER_UNSIGNED k, INTEGER_UNSIGNED k0)) || Fragment 3 dependency: [0, 1] parallelism: 1 || LocalBuffer || RemoteSource(sourceFragmentIds=[2], type=RecordType(INTEGER_UNSIGNED k, BIGINT cnt)) || Fragment 4 dependency: [2, 3] parallelism: 1 || TopN(sort="cnt ASC", offset=?2, fetch=?3) || RemoteSource(sourceFragmentIds=[3], type=RecordType(INTEGER_UNSIGNED k, BIGINT cnt)) |+-------------------------------------------------------------------------------------------------------------------------------------------------------------+在多机并行MPP执行模式的并发度是根据物理扫描行数、实例规格和计算所涉及到表的分表数来计算出来的,整体的并行度要考虑高并发场景,所以并行度的计算会偏保守,您可以通过上述EXPLAIN PHYSICAL指令查看并行度。当然也同样支持HINT MPP_PARALLELISM强制指定并行度,/+TDDL:EXECUTOR_MODE=MPP MPP_PARALLELISM=8/select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10;调度策略假设您购买了多个只读实例并加入到集群地址中,您通过集群地址的查询SQL路由到只读实例的流量,会被均匀调度到只读实例多个节点上执行,调度会考虑各个节点的资源负载,确保各个节点的负载压力差不多。比如PolarDB-X会将只读实例延迟作为调度参考指标,避免将流量调度到延迟较大的只读实例上执行。业务如果有在线HTAP混合流量或者读写分离的需求,推荐使用集群地址。PolarDB-X内部会基于智能路由或者读写权重将部分流量转发给只读实例;业务上只有离线数据分析需求时,推荐使用只读地址,只读地址会直接访问只读实例,只读地址的流量会采用MPP加速。关于连接地址信息,请参见集群地址和只读地址。路由智能路由PolarDB-X优化器会基于代价分析出查询物理扫描行数、CPU、内存、IO、网络等核心资源消耗量,将请求区分为TP与AP负载。当您在集群地址上开启了智能路由,会主动识别SQL的工作负载类型来做路由,比如将识别为AP负载的流量路由给只读实例。您可以通过explain cost指令查看SQL工作负载类型的识别情况。例如以下查询,该查询涉及到物理扫描行数rowcount很小,计算资源(CPU&Memory)也消耗比较少,所以这个查询被识别为TP负载。mysql> explain cost select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10; | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TopN(sort="cnt ASC", offset=?2, fetch=?3): rowcount = 1.0, cumulative cost = value = 2.8765038E7, cpu = 37.0, memory = 64.0, io = 3.0, net = 5.75, id = 163602178 | | Filter(condition="cnt > ?1"): rowcount = 1.0, cumulative cost = value = 2.8765026E7, cpu = 26.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602177 | | HashAgg(group="k", cnt="COUNT()"): rowcount = 1.0, cumulative cost = value = 2.8765025E7, cpu = 25.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602171 | | BKAJoin(condition="k = id", type="inner"): rowcount = 1.0, cumulative cost = value = 2.8765012E7, cpu = 12.0, memory = 18.0, io = 3.0, net = 5.75, id = 163602169 | | Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 2.3755003E7, cpu = 3.0, memory = 0.0, io = 1.0, net = 4.75, id = 163602164 | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)"): rowcount = 1.0, cumulative cost = value = 2.3755002E7, cpu = 2.0, memory = 0.0, io = 1.0, net = 4.75, id = 163601451 | | Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 5003.0, cpu = 3.0, memory = 0.0, io = 1.0, net = 0.0, id = 163602167 | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))"): rowcount = 1.0, cumulative cost = value = 5002.0, cpu = 2.0, memory = 0.0, io = 1.0, net = 0.0, id = 163601377 | | | WorkloadType: TP | | +-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+工作负载的识别,对于HTAP路由至关重要。这里也允许您通过HINT WORKLOAD_TYPE指定工作负载。同样以上述查询为例,可以将查询负载强制指定为AP。mysql> explain cost /*+TDDL:WORKLOAD_TYPE=AP*/ select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10; |+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+| TopN(sort="cnt ASC", offset=?2, fetch=?3): rowcount = 1.0, cumulative cost = value = 2.8765038E7, cpu = 37.0, memory = 64.0, io = 3.0, net = 5.75, id = 163602178 || Filter(condition="cnt > ?1"): rowcount = 1.0, cumulative cost = value = 2.8765026E7, cpu = 26.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602177 || HashAgg(group="k", cnt="COUNT()"): rowcount = 1.0, cumulative cost = value = 2.8765025E7, cpu = 25.0, memory = 47.0, io = 3.0, net = 5.75, id = 163602171 || BKAJoin(condition="k = id", type="inner"): rowcount = 1.0, cumulative cost = value = 2.8765012E7, cpu = 12.0, memory = 18.0, io = 3.0, net = 5.75, id = 163602169 || Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 2.3755003E7, cpu = 3.0, memory = 0.0, io = 1.0, net = 4.75, id = 163602164 || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)"): rowcount = 1.0, cumulative cost = value = 2.3755002E7, cpu = 2.0, memory = 0.0, io = 1.0, net = 4.75, id = 163601451 || Gather(concurrent=true): rowcount = 1.0, cumulative cost = value = 5003.0, cpu = 3.0, memory = 0.0, io = 1.0, net = 0.0, id = 163602167 || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))"): rowcount = 1.0, cumulative cost = value = 5002.0, cpu = 2.0, memory = 0.0, io = 1.0, net = 0.0, id = 163601377 | || WorkloadType: AP | |+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+规则路由除了基于代价的智能路由以外,我们也支持基于读写规则的路由。允许您在控制台参数管理上设置读写分离权重参数MASTER_READ_WEIGHT,默认值为100,可配置值区间[0, 100]。如果配置为Weight=60,意味着占60%的流量会继续在主实例执行,40%的剩余流量会路由到只读实例执行,如果只读实例有多个会进行自动分配。智能路由和规则路由这两者关系是解耦的,具体关系请查看下表格。智能路由规则规则路由 (MASTER_READ_WEIGHT)路由结果开启以代价的读写分离为主规则路由建议保持默认值为100事务和写操作流量,全部路由给主实例;识别为AP的查询流量,全部路由给只读实例;识别为TP的查询流量,按照(100-MASTER_READ_WEIGHT)路由给只读实例。关闭以规则的读写分离为主规则路由的可选范围:[0-100]事务和写操作流量,全部路由给主实例;识别为TP/AP的查询流量,一律按照(100-MASTER_READ_WEIGHT)路由给只读实例。执行模式目前PolarDB-X支持了三种执行模式:单机单线程(TP_LOCAL):查询过程中,是单线程计算,TP负载的查询涉及到的扫描行数比较少,往往会采样这种执行模式,比如基于主键的点查。单机并行(AP_LOCAL):查询过程中,会利用节点的多核资源做并行计算,您在没有购买只读实例的前提下,针对AP负载的查询,往往会采样这种执行模式,一般也称之为Parallel Query模式。多机并行(MPP):您若购买了只读实例,针对AP负载的查询,可以协调只读实例上多个节点的多核做分布式多机并行加速。为了让您可以准确知道执行模式,我们在原有EXPLAIN指令上,扩展出了EXPLAIN PHYSICAL。例如以下查询,通过指令可以查看到当前查询采样的是MPP模式,此外还可以获取到每个执行片段的并发数。mysql> explain physical select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 or der by cnt limit 5, 10; +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | PLAN | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | ExecutorType: MPP | | The Query's MaxConcurrentParallelism: 2 | | Fragment 1 | | Shuffle Output layout: [BIGINT, BIGINT] Output layout: [BIGINT, BIGINT] | | Output partitioning: SINGLE [] Parallelism: 1 | | TopN(sort="cnt ASC", offset=?2, fetch=?3) | | Filter(condition="cnt > ?1") | | HashAgg(group="k", cnt="COUNT()") | | BKAJoin(condition="k = id", type="inner") | | RemoteSource(sourceFragmentIds=[0], type=RecordType(INTEGER_UNSIGNED id, INTEGER_UNSIGNED k)) | | Gather(concurrent=true) | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))") | | Fragment 0 | | Shuffle Output layout: [BIGINT, BIGINT] Output layout: [BIGINT, BIGINT] | | Output partitioning: SINGLE [] Parallelism: 1 Splits: 16 | | LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)") | +-------------------------------------------------------------------------------------------------------------------------------------------------------------------+工作负载和执行模式有一定的耦合关系,AP工作负载会采用多机并行计算。同样的也允许您通过HINT EXECUTOR_MODE指定执行模式。假如主实例空闲资源很多,可以考虑强制设置为单机或者多机并行模式来加速。mysql> explain physical /*+TDDL:EXECUTOR_MODE=AP_LOCAL*/select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10; |+-------------------------------------------------------------------------------------------------------------------------------------------------------------+| ExecutorMode: AP_LOCAL || Fragment 0 dependency: [] parallelism: 4 || BKAJoin(condition="k = id", type="inner") || Gather(concurrent=true) || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `id`, `k` FROM `sbtest1` AS `sbtest1` WHERE (`id` > ?)") || Gather(concurrent=true) || LogicalView(tables="[000000-000003].sbtest1_[00-15]", shardCount=16, sql="SELECT `k` FROM `sbtest1` AS `sbtest1` WHERE ((`k` > ?) AND (`k` IN (...)))") || Fragment 1 dependency: [] parallelism: 8 || LocalBuffer || RemoteSource(sourceFragmentIds=[0], type=RecordType(INTEGER_UNSIGNED id, INTEGER_UNSIGNED k, INTEGER_UNSIGNED k0)) || Fragment 2 dependency: [0, 1] parallelism: 8 || Filter(condition="cnt > ?1") || HashAgg(group="k", cnt="COUNT()") || RemoteSource(sourceFragmentIds=[1], type=RecordType(INTEGER_UNSIGNED id, INTEGER_UNSIGNED k, INTEGER_UNSIGNED k0)) || Fragment 3 dependency: [0, 1] parallelism: 1 || LocalBuffer || RemoteSource(sourceFragmentIds=[2], type=RecordType(INTEGER_UNSIGNED k, BIGINT cnt)) || Fragment 4 dependency: [2, 3] parallelism: 1 || TopN(sort="cnt ASC", offset=?2, fetch=?3) || RemoteSource(sourceFragmentIds=[3], type=RecordType(INTEGER_UNSIGNED k, BIGINT cnt)) |+-------------------------------------------------------------------------------------------------------------------------------------------------------------+在多机并行MPP执行模式的并发度是根据物理扫描行数、实例规格和计算所涉及到表的分表数来计算出来的,整体的并行度要考虑高并发场景,所以并行度的计算会偏保守,您可以通过上述EXPLAIN PHYSICAL指令查看并行度。当然也同样支持HINT MPP_PARALLELISM强制指定并行度,/+TDDL:EXECUTOR_MODE=MPP MPP_PARALLELISM=8/select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10;调度策略假设您购买了多个只读实例并加入到集群地址中,您通过集群地址的查询SQL路由到只读实例的流量,会被均匀调度到只读实例多个节点上执行,调度会考虑各个节点的资源负载,确保各个节点的负载压力差不多。比如PolarDB-X会将只读实例延迟作为调度参考指标,避免将流量调度到延迟较大的只读实例上执行。
少量的写或者更新请求,大多数是读请求;每次查询都从数据库中读取大量的行,但是同时又仅需要少量的列;大多数查询都是比较复杂的查询,查询的并发不会很大,但单个查询需要高吞吐量;对于简单查询,允许一定的延迟;分析场景上分布式事务可能不是必须的;大部分查询中往往会涉及到事实表和维表的关联,是典型的大小表关联场景;查询结果明显小于源数据,即数据被过滤或聚合后能够被盛放在单台服务器的内存中;分析的数据往往是最近的业务数据,历史数据可以被清理或者被归档。依据上述对分析场景的归纳,分析场景做性能优化除了要沿用TP数据库的优化思路,还会有自身不一样的优化思路。这主要会体现在结构设计和查询优化两个方面。结构设计在结构设计上主要包括如何选择表类型、分区键、主键以及聚簇,使表的性能达到最优。设计为分区表或者广播表广播表会在集群的每个数据节点都存储一份数据,建议广播表的数据量不宜太大,每张广播表存储的数据不超过20万行,这样在大表和广播表做关联时,可以计算下推,让关联贴近数据层做计算,避免大表数据拉取到计算节点做计算。其他业务数据尽可能做成分区表,可以充分利用分布式系统的查询能力。理论上表的分区数量越多越好,这样多个分区表可以做并行扫描。存储层更易做到水平扩展,存储千万条甚至上亿条数据。不过实际使用中建议一个分区表的数量在500w~5000w之间。选择合适的分区键PolarDB-X默认按照主键做分拆,主要为了降低您使用分布式数据库的成本。同时我们也支持通过指定分区键建分区表,在分析场景建议您根据如下依据选择的分区键:尽可能选择参与JOIN的字段作为分区键,这样做的目的还是为了关联条件下推,避免数据被拉取到计算层做计算。尽可能选择值分布均匀的字段作为分区键,这样可以避免由于分布式不均导致出现计算长尾现象,严重托慢大查询性能。合理设计二级分区PolarDB-X支持二级分区。当数据量过大或者有数据倾斜时,二级分区的选择至关重要,如果数据量大的表中没有二级分区或者二级分区切分不合理,也会影响性能。如果业务明确有增量数据导入需求,主要是对最近数据的报表分析,那么建议用日期格式做二级分区,避免对历史过期数据的扫描。//直接用col先做一级分区 PARTITION BY HASH(col) SUBPARTITION BY LIST (ds) //ds转换后的月做分区 SUBPARTITION TEMPLATE ( PARTITION p1 VALUES LESS THAN ('2021-08-00'), PARTITION p2 VALUES LESS THAN ('2021-09-00'), )合理设计索引如果业务已经按照关联字段,合理的设计了分区键。但依然还有部分复杂查询涉及到对该表的其他列做关联,无法做到关联查询下推,此时可以考虑基于该非分区键的列做全局二级索引。这样复杂查询对该表做关联,可以转化成与该全局二级索引做关联。同时了为了避免回表的代价,对于分析场景建议所有的全局二级索引都建成聚簇索引。查询优化在分析场景中,由于会涉及比较大的数据,且对简单查询的延迟有一定的容忍度,推荐您采用MPP执行模式,既利用多个计算节点(CN)的计算资源承担复杂计算。一般只在只读实例默认开启MPP能力,如果您可以允许在主实例做分析需求,请联系阿里云技术支持。在查询过程中,PolarDB-X首先会基于优化器选择合适的分布式执行计划,然后将计划调度到各个计算节点,充分发挥整个集群的计算资源加速查询。这个过程生成的分布式执行计划完全是基于统计信息做代价选择,所以及时的信息采集至关重要;同时由于优化器生成的计划不一定是最优的,所以这里也给到您在SQL编写和优化时的经验。收集统计信息PolarDB-X会及时定时收集统计信息,如果发现PolarDB-X生成的分布式执行计划不是最优的。可以通过ANALYZE TABLE手动对某个表做统计信息收集。SQL编写技巧去掉不必要的列由于分析场景大多数是高吞吐的,所以应该去除返回过程中不必要的列,减少对带宽的压力。在编写SQL时一定要确认业务需要返回的列,不要直接使用星号(*)进行查询。//不合适写法select * from T1 where a1>100 and a2<1000;//更合适写法,只需要返回业务关心的列select a1, a2 from T2 where a1>100 and a2<1000;基于局部索引做过滤很多分析场景都期望用时间做二级分区,这样做大数据扫描的时候可以把时间做过滤条件,过滤掉绝大多数历史数据。select a1,c2 from T1 where time >='2010-01-01 00:00:00';为了避免全部扫描,目前默认会在这个分区列上做局部索引。同样的在很多高吞吐的扫描场景下,可以考虑基于过滤条件做局部索引。避免低效的SQL语法如果表记录数非常大,扫描会很慢,直接导致查询缓慢。所以在SQL编写过程中我们需要注意以下几点:第一,避免索引失效不在索引列上做任何操作,计算、函数、类型转换(自动或手动),会导致索引失效而转向全表扫描。mysql> explain execute select * from staffs where name= 'hu';+----+-------------+--------+------------+------+-----------------------+-----------------------+---------+-------+------+----------+-------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+--------+------------+------+-----------------------+-----------------------+---------+-------+------+----------+-------+| 1 | SIMPLE | staffs | NULL | ref | idx_staffs_nameAgePos | idx_staffs_nameAgePos | 74 | const | 1 | 100 | NULL |+----+-------------+--------+------------+------+-----------------------+-----------------------+---------+-------+------+----------+-------+1 row in set , 1 warning (0.00 sec)//在索引列上做了其他操作,导致索引试下mysql> explain execute select * from staffs where left(name,4)= 'hu';+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+| 1 | SIMPLE | staffs | NULL | ALL | NULL | NULL | NULL | NULL | 198 | 100 | Using where |+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+1 row in set , 1 warning (0.00 sec)在使用不等于(!=或<>)的时候,无法使用索引导致全表扫描。is null,is not null也无法使用索引。mysql> explain execute select * from staffs where name is null ;+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------+| 1 | SIMPLE | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | Impossible WHERE |+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+------------------+1 row in setlike以通配符开头,mysql索引失效会进行全表扫描的操作。mysql> explain exeucte select * from staffs where name like '%hu' ;+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+| 1 | SIMPLE | staffs | NULL | ALL | NULL | NULL | NULL | NULL | 198 | 11.11 | Using where |+----+-------------+--------+------------+------+---------------+------+---------+------+------+----------+-------------+1 row in setmysql> explain execute select * from staffs where name like 'hu%' ;+----+-------------+--------+------------+-------+-----------------------+-----------------------+---------+------+------+----------+-----------------------+| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |+----+-------------+--------+------------+-------+-----------------------+-----------------------+---------+------+------+----------+-----------------------+| 1 | SIMPLE | staffs | NULL | range | idx_staffs_nameAgePos | idx_staffs_nameAgePos | 74 | NULL | 1 | 100 | Using index condition |+----+-------------+--------+------------+-------+-----------------------+-----------------------+---------+------+------+----------+-----------------------+1 row in set第二,尽量少用like,like操作一般不会很高效,尽量使用范围条件到达目的。比如between...and...第三,多表关联场景下:尽量包含分区列条件。如果不包含,则尽量通过WHERE条件过滤掉多余的数据。outer join的on和where作用域不同。on是作用于join的过程,where是作用于join之后的结果,所以应该将能在join的时候提前过滤的条件写在on上,也可以写在join表的子查询里,这样可以减少join原始表的数据量。数据倾斜的检查和处理如果出现查询异常缓慢,或者资源利用率不均匀的情况,则需要确认是否出现了数据倾斜。一般解决倾斜有三种策略:通过show info from table检查某个分片在各个节点上的数据分布计数,如果各节点上的数据分布明显不均匀,则可以考虑对该表的分区键进行调整。如果是出现了严重Join Key热点问题,将倾斜的Key用单独的逻辑来处理。例如两边的Key中有大量NULL数据导致了倾斜,则需要在Join前先过滤掉NULL数据或者补上随机数,然后再进行Join,示例如下。SELECT * FROM A JOIN B ON CASE WHEN A.value IS NULL THEN CONCAT('value',RAND() ) ELSE A.value END = B.value;在实际场景中,如果您发现已经数据倾斜,但无法获取导致数据倾斜的Key信息,可以使用如下方法查看数据倾斜。--执行如下语句查询数据倾斜。SELECT * FROM a JOIN b ON a.key=b.key; --您可以执行如下SQL,查看Key的分布,判断执行Join操作时是否会有数据倾斜。SELECT left.key, left.cnt * right.cnt FROM (select key, count(*) AS cnt FROM a GROUP BY key) LEFT JOIN(SELECT key, COUNT(*) AS cnt FROM b GROUP BY key) RIGHTON left.key=right.key;如果Group By Key出现了热点问题,可以考虑对SQL进行改写,添加随机数,把长Key进行拆分。例如:SELECT Key,COUNT(*) AS Cnt FROM TableName GROUP BY Key;//优化成以下SQL,先对热点做打散预聚合,再做最终聚合-- 假设长尾的Key已经找到是KEY001。SELECT a.Key , SUM(a.Cnt) AS CntFROM ( SELECT Key , COUNT(*) AS CntFROM TableNameGROUP BY Key, CASE WHEN Key = 'KEY001' THEN rand() % 50 ELSE 0 END) aGROUP BY a.Key;调整执行策略按照上述策略调整后,查询性能依然不理想且计算和存储资源都未到达瓶颈,这个时候可以调整下执行策略。主要有两种方式去调整:加大并发度,您可以通过HINT /+TDDL:MPP_PARALLELISM=4/ 指定MPP执行器并行度。mysql> /+TDDL:TDDL:MPP_PARALLELISM=4/ select a.k, count(*) cnt from sbtest1 a, sbtest1 b where a.id = b.k and a.id > 1000 group by k having cnt > 1300 order by cnt limit 5, 10;通过HINT指定特定的算法,如何调整更好的聚合算法和关联算法,请参见聚合和关联。
2022年12月