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

简介: OceanBase是由蚂蚁金服和阿里巴巴自主研发的分布式关系型数据库。具有数据“零”丢失、可扩展、高性能、持续可用等特点,已广泛应用在阿里巴巴集团和蚂蚁金服集团。---源于OceanBase公众号。

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


机器配置:

2c8g

应用端报错信息:

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

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


排错过程:

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

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

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

6283e7f708a7668fd29f5400ea780a2ba7d639a1

b4f4fe4fc2793257eee65202f7f619926133c44f

96b39ee42e501318f8a6abfb721fda18cf4856e5

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

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

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;
查看发生故障时间段是否发生过合并状态。

e5585160d3090a2e95725df2838cf78cd0be18ed

发现在故障时间点确实是存在合并操作的。通过之前的操作可以看到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;

5390cd0008a86dfcb70c893cd16a18f51f894eb9

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


目录
相关文章
|
7月前
|
Oracle 关系型数据库 MySQL
第四章:OceanBase集群技术架构(分布式事务、MVCC、事务隔离级别)
第四章:OceanBase集群技术架构(分布式事务、MVCC、事务隔离级别)
265 0
|
4月前
|
存储 数据库 OceanBase
OceanBase数据库的磁盘配置包括数据盘和事务日志盘的大小
OceanBase数据库的磁盘配置包括数据盘和事务日志盘的大小
42 1
|
4月前
|
数据库 OceanBase
在OceanBase数据库中,clog和slog文件夹的内容包含了事务日志和系统日志
在OceanBase数据库中,clog和slog文件夹的内容包含了事务日志和系统日志
79 7
|
7月前
|
存储 调度 数据库
OceanBase存储引擎高级技术——内存数据落盘策略-合并和转储
OceanBase存储引擎高级技术——内存数据落盘策略-合并和转储
564 0
|
SQL 存储 数据库
OceanBase 源码解读(四):事务的一生
源码是 OceanBase 的“方向盘”,本系列主要围绕“源码解读”,通过文章阐述,帮助大家理清数据库的内在本质。此前,带你读源码第三篇《戳这里回顾:OceanBase 源码解读(三)分区的一生》为大家介绍了OceanBase 的存储层的相关内容。在第一节讲通信协议 obmp_query 时,跳过了事务控制的细节,本文为 OceanBase 数据库源码解读系列文章的第四篇,将主要为大家介绍事务的外部接口相关知识。
314 0
OceanBase 源码解读(四):事务的一生
|
存储 SQL 容灾
深入剖析数据库内核之事务的本质 | 附下一代分布式数据库 OceanBase 解决方案
在近日 OceanBase 开源技术直播上,OceanBase 分布式数据库事务研发负责人颜然以数据库事务的本质为主题,深入分享了事务的前世今生一季 OceanBase 在分布式事务上的解决方案。本文将从以下三方面进行阐述数据库事务:一、事务的前世,二、事务的挑战,三、分布式事务
深入剖析数据库内核之事务的本质 | 附下一代分布式数据库 OceanBase 解决方案
|
存储 分布式数据库 数据库
【直播预约】OceanBase 事务组研发负责人颜然邀你聊透事务特性
什么是数据库?“数据库”和“事务”又有什么关系呢?
【直播预约】OceanBase 事务组研发负责人颜然邀你聊透事务特性
|
OceanBase 数据库 存储
|
存储 SQL 缓存
初探OceanBase的定期合并&数据分发
定期合并和数据分发都是将UpdateServer中的增量更新分发到ChunkServer中的手段,二者的整体流程比较类似:UpdateServer冻结当前的活跃内存表(Active MemTable),生成冻结内存表,并开启新的活跃内存表,后续的更新操作都写入新的活跃内存表。
13006 0

热门文章

最新文章