OceanBase由于合并操作导致事务被杀死的情况。

       OceanBase是一台内存数据库,兼容MySQL协议以及SQL协议,拥有跟内存数据库一样的属性:所有的数据都需要先写入到内存里面,但是并不会立刻落盘写入到存储里面,需要等一次合并操作,将内存里面所有的改动落盘到存储里面。所以发生这种合并操作的时候,伴随着资源的使用,也会出现问题。我们来看其中一种由于合并操作导致数据库杀死事务的情况如何排查。

机器配置:

2c8g

应用端报错信息:

系统未知错误,请联系管理员: transaction error,need to rollback。

第一次遇到这种问题也是比较懵的,因为平常测试库的压力不大,而且合并时间都在凌晨,一般不会出现这种问题。所以排查也是冲头到尾一步一步梳理的。

排错过程:

首先确认一下所有的observe是否都正常。

可以直接使用observe机器所在的IP直接连接,或者是查看端口是否通等等的。确认无误。

然后查看相关监控信息如下:

监控信息里面能反应出一些事情来,确实那个时间段相对的系统负载要比平时高。

然后,看一下是否由于压力的问题,导致了系统发生了合并操作。

OceanBase (root@oceanbase)> show tables like '%rootservice%';
+-------------------------------------+
| Tables_in_oceanbase (%rootservice%) |
+-------------------------------------+
| __all_rootservice_event_history     |
| __all_rootservice_job               |
+-------------------------------------+
2 rows in set (0.02 sec)

合并操作记录在__all_rootservice_event_history表中。

select * from __all_rootservice_event_history where gmt_create between '2017-09-25 16:00:00' and '2017-09-25 17:00:00' order by gmt_create;

查看发生故障时间段是否发生过合并状态。

发现在故障时间点确实是存在合并操作的。通过之前的操作可以看到75是这次合并操作的序号

select count(*)
from __all_rootservice_event_history
where gmt_create between '2017-09-25 16:00:00' and '2017-09-25 17:00:00' and
      value1 = 75
order by gmt_create;

show parameters like '%turn%';

发现enable_merge_by_turn打开,表示轮转合并是打开的,也就是3个zone不是同时合并,是依次合并。每个zone合并前,会把当前zone的所有leader切到别的不合并的zone,结束后再切回来
这是一次非计划的合并,说明性能测试写操作太猛,租户的memstore增长太快,达到一定阈值后就自动触发了合并操作。

时间: 2024-09-12 03:20:13

OceanBase由于合并操作导致事务被杀死的情况。的相关文章

PostgreSQL、Greenplum DML合并操作 最佳实践

标签 PostgreSQL , Greenplum , 合并删除 , 合并更新 , 合并DML 背景 在很多场景中会涉及到数据的合并,比如 1. 某业务系统的总用户有1亿,每天的活跃用户有100万,新增用户10万,每天需要将新增.活跃用户的数据(比如他们的余额变化.等等)合并到数据仓库的用户信息表. 2. 物化视图,某个表被用户不断的增.删.改.需要将这个表(基表)的某些字段或者某部分数据提取到一个物化视图中.这个物化视图不需要对每一笔基表的DML都实施操作,比如对单条记录的操作,合并成一次操作

SQLServer数据库中开启CDC导致事务日志空间被占满的原因

SQLServer中开启CDC之后,在某些情况下会导致事务日志空间被占满的现象为: 在执行增删改语句(产生事务日志)的过程中提示,The transaction log for database '***' is full due to 'REPLICATION'(数据库"***"的事务日志已满,原因为"REPLICATION"). CDC以及复制的基本原理粗略地讲,对于日志的使用步骤如下: 1,每当基础表(开启了CDC或者replication的表)产生事务性操作

在三个层次对Asp.Net的数据操作进行事务

asp.net|数据 很多数据库操作需要进行事务,Asp.net下面进行事务大致有3个层次:(1)存储过程层次的事务(2)Ado.Net层次的事务(3)Asp.Net页面层次的事务下面分别举例:首先建立trantest表,字段id(int),test(char)为id设置主键(利用主键是不允许重复的特性进行事务测试) (1)CREATE PROCEDURE Tran1asbegin tranInsert Into trantest (id,test)values(1,'test')Insert

XP系统因不当操作导致无法自动关机怎么解决

XP系统因不当操作导致无法自动关机怎么解决   解决方法: 1.电脑硬件的原因造成的.主板BIOS不能很好支持ACPI,建议升级主板的BIOS,一般就可以解决.电脑的电源质量不好导致了无法正常关机.建议换一个质量好的电源. 2. 电脑软件的原因造成的.检查Bootlog.txt文件.下面所列出的记录都可能造成电脑关机失败,可以根据自己电脑中启动盘根目录下的Bootlog.txt中所显示的情况,找出原因: Terminate=Query Drivers 驱动程序有问题 Terminate=Unlo

Word2010中多个文档的比较与合并操作

  ①启动Word2010,单击菜单栏--审阅--比较--比较. 文档的比较与合并操作-word2010合并文档"> ②弹出比较文档对话框,打开原文档和修订的文档,单击确定按钮. ③这时会另外开启一个Word界面,最左侧详细的显示了删除的内容和插入的内容,中间的是显示两份文档的不同,最右侧分为上下两部分,显示的是两份文档. ④修改好了,单击接受--接受对文档的所有修订即可保存文档了.

c++-关于vector的insert 、 erase、resize操作导致迭代器无效化

问题描述 关于vector的insert . erase.resize操作导致迭代器无效化 typedef vectorint_vec; int_vec v(2,0); int_vec::iterator iter_b = v.begin(); v.insert(v.begin(),1); cout<<*iter_b<<endl; //这种操作会导致iter_b无效,输出随机值 但是: int_vec v1(2,0); int_vec::iterator iter_b = v.be

通过SSIS的“查找”组件进行不同数据源之间数据的合并操作

原文:通过SSIS的"查找"组件进行不同数据源之间数据的合并操作   为了协助开发还原生产环境中的某些bug,需要将将生产环境的某些特定表数据导入到测试环境做测试,之前一直都是暴力地truncate测试环境的表,然后用SSIS将生产环境对应的整张表数据导入测试环境,简便快捷后来开发提出来,保留测试环境已有的数据,只同步差异的数据(根据主键),于是就尝试使用SSIS中的"查找"组件进行不同服务器之间的"存在则更新,不存在则插入"数据合并操作,实际操

又见断网!网宿科技违规操作 导致去哪等大量网站“躺着中枪”

最近互联网好容易风平浪静了一阵,不成想还是爆出了个"大新闻".一直发展顺风顺水的去哪网(www.quna.com)居然被人给"黑"了.连续多日无法访问.要知道对于去哪这样量级的网站而言,损失绝对是天文数字. 百度了一下原因,居然无新闻稿发出来,只在微博上找到了事实的真相(不得不佩服去哪的冤家实在够厉害). 原来去哪网的服务器5-6年前就托管在了网宿科技,结果网宿科技这家上市公司租用佛山电信的机房,但没有跟佛山联通签使用协议,而是从第三方手里租借联通的线路.结果这一违

[MySQL Bug]DDL操作导致备库复制中断

----------------- 在MySQL5.1及之前的版本中,如果有未提交的事务trx,当执行DROP/RENAME/ALTER TABLE RENAME操作时,不会被其他事务阻塞住.这会导致如下问题(MySQL bug#989) master: 未提交的事务,但SQL已经完成(binlog也准备好了),表schema发生更改,在commit的时候不会被察觉到. slave: 在binlog里是以事务提交顺序记录的,DDL隐式提交,因此在备库先执行DDL,后执行事务trx,由于trx作用