生产系统DRDS建表报sequence已经存在问题

本文涉及的产品
云原生数据库 PolarDB 分布式版,标准版 2核8GB
简介:

1、 问题描述

客户反馈生产环境系统drds创建表报错sequence已经存在,具体报错如下:

1
但是虽然执行create已经报错,但是表已经有了,并且可以正常的插入数据;

2、 问题排查

排查drds的docker节点tddl log日志发现如下的相关sequence的报错
2
3
报错主要显示还是因为sequence已经存在导致的;
但是经过check table 报错的表状态是ok的,证明表实际上不存在什么问题,可以正常使用;
经过排查后台tddl log日志,由于数据格式的问题插入数据频繁报错,发现端倪,经过咨询客户以及观察sql log日志 ,生产数据录入报错的表数据的频繁插入的;
后台有程序在不断的向amc_match_log 这张表插数据

同客户沟通的结果分析如下:
如果有程序写数据库频率很高 出现这样的报错 就可以解释的通了;
创建表之后,创建序列之前的空档,程序向表中插入数据,drds发现auto_increment字段存在,所以会自动创建序列,此时ddl的创建序列再去创建 就会出错(序列已经存在);
如果是这种场景 在建表的时候指定 if not exist就可以了

然后在测试环境使用如下的命令来模拟频繁插入数据的场景;

for i in {1..1000000};do mysql –h192.168.1.1 –uroot –ppasswd –e”insert into test(name) values(rand());”; done

测试表是test,表结构如下:

create table test(id varchar(100) not null auto_increment,name varchar(100),primary key(id)) engine=InnoDB dbpartition by hash(id) tbpartition by hash(id) tbpartitions 3;

开启两个窗口测试如下:
5
频繁的执行create和drop表的测试操作,来回执行几次就可以复现生产的报错问题;
然后根据研发提供的添加if not exists的create操作进行建表测试,不会复现报错问题;
create TABLE IF NOT EXISTS amc_match_log
6
原因:因为 if not exist会检查sequence是否存在 如果存在 不会再去创建了;

3、问题解决

使用create table if not exists tablename进行建表或者直接忽略报错也可以;

相关实践学习
Polardb-x 弹性伸缩实验
本实验主要介绍如何对PolarDB-X进行手动收缩扩容,了解PolarDB-X 中各个节点的含义,以及如何对不同配置的PolarDB-x 进行压测。
目录
相关文章
|
存储 SQL 索引
PolarDB-X 1.0-SQL 手册-Sequence-显式用法
本文主要介绍了Sequence的显式用法。
175 0
|
SQL 索引
PolarDB-X 1.0-SQL 手册-Sequence-隐式用法
本文介绍了Sequence的隐式用法。
118 0
|
缓存 算法 关系型数据库
阿里云DRDS 的sequence序列深入理解
DRDS的隐式sequence的一些测试,以及在DRDS迁移的过程中踩到的坑--
4844 0
|
7月前
|
SQL Oracle 关系型数据库
Polar DB-O (兼容 Oracle 语法版本)和Polar DB PostgreSQL 版本概述(二)
Polar DB-O (兼容 Oracle 语法版本)和Polar DB PostgreSQL 版本概述(二)
689 0
|
存储 SQL 安全
PolarDB-X内核新版本:将MySQL进行到底
在PolarDB-X最新的内核版本5.4.15中,提供诸多新功能:存储过程,读写分离优化,表级分区管理,密码、审计优化等。
355 0
PolarDB-X内核新版本:将MySQL进行到底
|
存储 SQL Cloud Native
PolarDB-X内核新版本:更精细的数据管理
非常高兴为大家带来PolarDB-X内核5.4.14版本。在最新版本中提供了冷热数据存储分离、数据Locality、数据热点诊断、并行DML优化、Flashback Query和AUTO_INCREMENT兼容性,大幅提升了数据的可管理性、SQL处理能力和兼容性,并针对数据热点问题为用户提供了更多运维手段。
|
存储 Cloud Native 关系型数据库
PolarDB-X迎来开源后首个重大版本升级,2.1版本新增5大特色功能
2022 年 5 月25日,阿里云开源 PolarDB-X 升级发布新版本!PolarDB-X 从 2009 年开始服务于阿里巴巴电商核心系统, 2015 年开始对外提供商业化服务,并于 2021 年10月正式开源。本次发布是开源后首个重大版本升级,重磅推出在稳定性、生态融合以及易用性上有了长足进步的 2.1 版本,该版本在内核能力上首次对齐商业版,新增 X-Paxos、自动分区、OSS 冷热数据分离等诸多重要特性,并在 MySQL 生态融合、K8S 生态融合方向持续迭代。
PolarDB-X迎来开源后首个重大版本升级,2.1版本新增5大特色功能
|
存储 SQL Kubernetes
PolarDB-X 发布 2.1.0 版本,Paxos 重磅开源
2022年4月1号,PolarDB-X 正式开源X-Paxos,基于原生MySQL存储节点,提供Paxos三副本共识协议,可以做到金融级数据库的高可用和容灾能力,做到RPO=0的生产级别可用性,可以满足同城三机房、两地三中心等容灾架构。
PolarDB-X 发布 2.1.0 版本,Paxos 重磅开源
|
存储 关系型数据库 分布式数据库
每周问答精选:PolarDB-X 存储资源包是抵扣哪个版本的按量付费?
为了方便各位小伙伴能够方便、快速的了解到 PolarDB 开源数据库的相关的使用问题,社区每周将精选群内高质量的问题通过该栏目予以统一答复,希望能够对大家有所帮助。
每周问答精选:PolarDB-X 存储资源包是抵扣哪个版本的按量付费?
|
SQL Cloud Native 分布式数据库
PolarDB-X 1.0-用户指南-实例管理-升级版本
您可以升级更新PolarDB-X 1.0实例到最新版本,快速体验实例新特性,本文将介绍如何在控制台上升级PolarDB-X 1.0实例版本。
538 0
PolarDB-X 1.0-用户指南-实例管理-升级版本