---
title: 弱读从/只读副本遇到长事务切主场景下导致 CPU 使用率 100% 的原因-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 弱读从/只读副本遇到长事务切主场景下导致 CPU 使用率 100% 的原因相关的常见问题和使用技巧，帮助您快速解决 弱读从/只读副本遇到长事务切主场景下导致 CPU 使用率 100% 的原因的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 弱读从/只读副本遇到长事务切主场景下导致 CPU 使用率 100% 的原因

更新时间：2024-01-22 01:56

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题描述

OceanBase 数据库弱读从/只读副本遇到长事务场景导致 CPU 使用率 100% 的情况。

对大表 t1 开启一个长事务， 比如 update 更新全表，耗时足够长， 此时使用弱读在从副本/只读副本查询大表 t1 出现查询超时，日志报错-6004， 当弱读查询并发量较高时， 会造成 SQL 堆积， CPU 使用率 100%。

## 适用版本

OceanBase 数据库 V3.x 版本。

## 问题原因

OceanBase 数据库 V3.x 版本存在即时写日志机制：事务在内存中剩余需要同步的数据量超过某一定值时，会将内存中需要同步的数据量立即同步到备机，能够保证在主动切主时，需要搬迁的数据量小于定值，从而保证切主时需要同步的数据量可控， 能达到平滑切主不杀事务的目的。所以在长事务执行过程中，日志会不断同步到从/只读副本。大事务触发及时写日志；长事务、大事务切主触发写日志；上面两个场景下是问题触发的诱因，都是会存在的。导致当前弱读无法判断是否需要读取该事务的数据，会一直等在这里报错-6004（读请求等待事务结束），直到 SQL 超时。

#### 注意

主副本不会存在上述情况，因为执行中的事务会在主副本上加锁，因此读请求看到锁后会跳过读取这个事务的数据。

## 解决方法

- 升级至问题已修复版本。目前已修复的版本为 OceanBase 数据库企业版 V3.2.4 BP5（oceanbase-3.2.4.5-105000012023081513）及之后版本。
 - 在存在弱读场景下，需要将长事务拆成多个粒度更小的短事务。

上一篇

[如何配置集群的 CPU 并发数](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000010172)

下一篇

[如何判断 OBServer 是否存在 IO 限流?](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000207648) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
