DDL超时时间问题

DDL的超时时间是多少哪?是 _ob_ddl_timeout这个参数控制吗?
DDL一般都是后台执行吧,如果单个DDL时间超过这个参数设置的大小的时候,会出现什么问题哪?

1 个赞

没有ddl 超时 参数控制的

1 个赞

那 _ob_ddl_timeout这个参数有什么用哪?

1 个赞

请问这个参数您是从哪里看到的

哪里看到的,官网文档里面没有这个参数的

_ob_ddl_timeout-OceanBase 数据库 -OceanBase文档中心-分布式数据库使用文档

3.2的官方文档上

请问您使用的是什么版本?

只是官方文档中看到了这个,突然想到了DDL超时的问题,想要知道DDL语句是否有超时,没有在生产上使用。

DDL是_ob_ddl_timeout这个隐藏参数影响的,默认1000s,ddl不属于事务,使用了这个参数作为超时,因为是隐藏参数不建议调整。

那一个DDL语句超过1000秒 会出现什么问题哪?

错误提示ddl task executes too much time可能会出现,这是因为DDL任务执行时间过长。

请问下 DDL 不属于事务是啥意思呀?不是每个 DDL 都会开启一个事务吗?

哈哈,没想到居然会有人关注到这个隐藏配置项,ddl 执行超过 1000s 就会报错 timeout 呀。

当初加这个配置项的原因是因为 ob 的查询和 dml 都是可以并行的,例如一个 session 里执行 select xxx from t1 不会影响另一个 session 里执行的 select xxx from t2;但是很多年前 ob 的 ddl 是串行的,甚至多个不同租户之间的 ddl 当时都是串行的,所以 ddl 经常遇到排队的情况,执行时间比较不可控(现在租户间早就已经是并行的了,甚至租户内的很多 ddl 多可以并行了)。

所以除了 ddl 以外的 SQL 的超时时间都是受 ob_query_timeout 的控制,默认好像是 10s,而 ddl 的超时时间设置成了受 _ob_ddl_timeout 的控制,默认是 1000s。

by the way:和数据量相关的 ddl 的超时时间可以理解成无穷大(实际被设成了 102 年),不受 _ob_ddl_timeout 的控制。例如在建表之后,再在这张表上创建一个索引,因为创建索引的时间会和表上的数据量正相关,数据量特别大时,1000s 往往也不够,所以像这类追加索引、追加外键、追加 check 约束这类比较特殊的 ddl,超时时间也不受 _ob_ddl_timeout 的控制~

您好, 请问如果在OB中使用 creat table as select 去创建表,会受这个参数影响吗?

翻了眼代码 ObCreateTableExecutor::execute_ctas,查询建表 ctas 目前还是受 _ob_ddl_timeout 的控制的,默认是 1000 秒。

这里可能不太合理,我这边提个需求让产品同学讨论下,默认 ctas 应该也是让超时时间变成 OB_MAX_USER_SPECIFIED_TIMEOUT = 102L * 365L * 24L * 60L * 60L * 1000L * 1000L; 这个。

create table as 呢

你这个问题楼上的帖子就回答了你的问题~
create table as 就是上面说的查询建表 ctas

好的 受教了~ 感谢~~