Row size too large

【 使用环境 】生产环境

【 使用版本 】
【问题描述】我想问一下oceanbase的行长度最大限制是多少,如何可以设置的更大?我实际测试当建表的时候,所有字段总长度大于38KB就会建表错误。

【问题现象及影响】
建表的时候提示失败,Row size too large

【附件】
Row size too large

2023/4/17 10:26:29 at com.yunli.bigdata.operatingsystem.engine.OceanbaseEngine.createTable(OceanbaseEngine.java:212)

2023/4/17 10:26:29 at com.yunli.bigdata.operatingsystem.metadata.service.TableApiService.createTable(TableApiService.java:653)

2023/4/17 10:26:29 at com.yunli.bigdata.operatingsystem.metadata.service.TableApiService$$FastClassBySpringCGLIB$$86ceec1f.invoke()

2023/4/17 10:26:29 at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)

2023/4/17 10:26:29 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:793)

2023/4/17 10:26:29 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

2023/4/17 10:26:29 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)

2023/4/17 10:26:29 at org.springframework.transaction.interceptor.TransactionInterceptor$1.proceedWithInvocation(TransactionInterceptor.java:123)

2023/4/17 10:26:29 at org.springframework.transaction.interceptor.TransactionAspectSupport.invokeWithinTransaction(TransactionAspectSupport.java:388)

2023/4/17 10:26:29 at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:119)

2023/4/17 10:26:29 at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:186)

2023/4/17 10:26:29 at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:763)

2023/4/17 10:26:29 at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:708)

2023/4/17 10:26:29 at com.yunli.bigdata.operatingsystem.metadata.service.TableApiService$$EnhancerBySpringCGLIB$$c6d61816.createTable()

2023/4/17 10:26:29 at com.yunli.bigdata.operatingsystem.metadata.controller.TableApiController.createTable(TableApiController.java:143)

2023/4/17 10:26:29 at jdk.internal.reflect.GeneratedMethodAccessor329.invoke(Unknown Source)

2023/4/17 10:26:29 at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

2023/4/17 10:26:29 at java.base/java.lang.reflect.Method.invoke(Unknown Source)

2023/4/17 10:26:29 at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:205)

2023/4/17 10:26:29 at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:150)

2023/4/17 10:26:29 at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:117)

2023/4/17 10:26:29 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:895)

2023/4/17 10:26:29 at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808)

2023/4/17 10:26:29 at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87)

2023/4/17 10:26:29 at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1072)

2023/4/17 10:26:29 at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965)

2023/4/17 10:26:29 at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006)

2023/4/17 10:26:29 at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:909)

2023/4/17 10:26:29 at javax.servlet.http.HttpServlet.service(HttpServlet.java:528)

2023/4/17 10:26:29 at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883)

2023/4/17 10:26:29 at javax.servlet.http.HttpServlet.service(HttpServlet.java:596)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:209)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)

2023/4/17 10:26:29 at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)

2023/4/17 10:26:29 at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:108)

2023/4/17 10:26:29 at com.yunli.bigdata.infrastructure.interceptor.WarpRepeatableReadBodyRequestFilter.doFilter(WarpRepeatableReadBodyRequestFilter.java:19)

2023/4/17 10:26:29 at org.springframework.web.filter.CompositeFilter$VirtualFilterChain.doFilter(CompositeFilter.java:113)

2023/4/17 10:26:29 at org.springframework.web.filter.CompositeFilter.doFilter(CompositeFilter.java:74)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)

2023/4/17 10:26:29 at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201)

2023/4/17 10:26:29 at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:178)

2023/4/17 10:26:29 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:153)

2023/4/17 10:26:29 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)

2023/4/17 10:26:29 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)

2023/4/17 10:26:29 at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)

2023/4/17 10:26:29 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:130)

2023/4/17 10:26:29 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)

2023/4/17 10:26:29 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)

2023/4/17 10:26:29 at org.apache.catalina.valves.RemoteIpValve.invoke(RemoteIpValve.java:768)

2023/4/17 10:26:29 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)

2023/4/17 10:26:29 at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:389)

2023/4/17 10:26:29 at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)

2023/4/17 10:26:29 at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:926)

2023/4/17 10:26:29 at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1791)

2023/4/17 10:26:29 at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)

2023/4/17 10:26:29 at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)

2023/4/17 10:26:29 at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)

2023/4/17 10:26:29 at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)

2023/4/17 10:26:29 at java.base/java.lang.Thread.run(Unknown Source)

2023/4/17 10:26:29 Caused by: java.sql.SQLSyntaxErrorException: (conn=29239) Row size too large

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.createException(ExceptionFactory.java:110)

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.util.exceptions.ExceptionFactory.create(ExceptionFactory.java:202)

2023/4/17 10:26:29 at com.oceanbase.jdbc.OceanBaseStatement.executeExceptionEpilogue(OceanBaseStatement.java:315)

2023/4/17 10:26:29 at com.oceanbase.jdbc.JDBC4PreparedStatement.executeInternal(JDBC4PreparedStatement.java:243)

2023/4/17 10:26:29 at com.oceanbase.jdbc.JDBC4PreparedStatement.execute(JDBC4PreparedStatement.java:161)

2023/4/17 10:26:29 at com.yunli.bigdata.infrastructure.foundation.DefaultDatabaseTemplate.execute(DefaultDatabaseTemplate.java:184)

2023/4/17 10:26:29 at com.yunli.bigdata.operatingsystem.engine.OceanbaseEngine.createTable(OceanbaseEngine.java:286)

2023/4/17 10:26:29 at com.yunli.bigdata.operatingsystem.engine.OceanbaseEngine.createTable(OceanbaseEngine.java:210)

2023/4/17 10:26:29 … 62 common frames omitted

2023/4/17 10:26:29 Caused by: com.oceanbase.jdbc.internal.util.exceptions.OceanBaseSqlException: Row size too large

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.util.exceptions.OceanBaseSqlException.of(OceanBaseSqlException.java:79)

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:199)

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.exceptionWithQuery(AbstractQueryProtocol.java:180)

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:372)

2023/4/17 10:26:29 at com.oceanbase.jdbc.JDBC4PreparedStatement.executeInternal(JDBC4PreparedStatement.java:234)

2023/4/17 10:26:29 … 66 common frames omitted

2023/4/17 10:26:29 Caused by: java.sql.SQLException: Row size too large

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.readErrorPacket(AbstractQueryProtocol.java:2192)

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.readPacket(AbstractQueryProtocol.java:2057)

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.getResult(AbstractQueryProtocol.java:1951)

2023/4/17 10:26:29 at com.oceanbase.jdbc.internal.protocol.AbstractQueryProtocol.executeQuery(AbstractQueryProtocol.java:370)

2023/4/17 10:26:29 … 67 common frames omitted

OB版本?社区版还是企业版?

看看这个

OceanBase使用限制相关内容

标识符长度限制

MySQL 模式
数据项 	最大长度
集群名 	128 字节
租户名 	64 字节
用户名 	64 字节
数据库名 	128 字节
表名 	64 字符
列名 	128 字节
索引名 	64 字节
视图名 	64 字节
别名 	255 字节
表组名 	128 字节

https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000881170

1、麻烦提供一下OB的版本
show variables like ‘version_comment’;

2、表结构

用的是社区版本,看文档是行长度 1.5M 字节,但是我实际测试建表达不到1.5M字节。我设定一个String类型长度65535长度,建一个张表才7个字段就提示 Row size too large了,计算了一下:65535 * 7 = 40kb的样子。

创建的表中所有数据类型的长度之和不能超过了1.5M(1572864)长度。
如果使用默认的collation UTF8MB4 那么每个字符占4字节,所以这些数据类型长度之和应小于 1.5M/4 = 393216。

1、提供一下OB具体的版本:
show variables like ‘version_comment’;

2、对应的表结构

version_comment:OceanBase_CE 4.1.0.0 (r100000192023032010-0265dfc6d00ff4f0ff4ad2710504a18962abaef6) (Built Mar 20 2023 10:12:57)

建表语句如下:
CREATE TABLE ns_oceanbase40_oceanbase40.table_length2 (
t1 VARCHAR(65535),
t2 VARCHAR(65535),
t3 VARCHAR(65535),
t4 VARCHAR(65535),
t5 VARCHAR(65535),
t6 VARCHAR(65535)
t7 VARCHAR(65535)
);

如果使用默认的collation UTF8MB4 那么每个字符占4字节,所以这些数据类型长度之和应小于 1.5M/4 = 393216个字符。

目前提供的表结构,65535*7=458745 个字符,超过了限制,符合预期。

好的,感谢您的回答!!那么目前有没有什么配置设置,或者其他方式,能够调整这个1.5M的限制呢?

目前无法修改单行的长度限制,可以考虑:
1、使用其他字符集,
2、使用其他数据类型。

1 个赞