searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Mysql 5.7 cpu100%和大JSON写入

2023-10-23 03:07:04
7
0

1、问题表现

Mysql 5.7 数据库实例CPU 100%的问题。

 

2、问题分析

通过perf可以查看当前Mysql进程的函数CPU占用,主要是在JSON数据的写入上。

 

3、问题原因

1、JSON数据的高并发写入;

2、5.7版本的bug,没有考虑到memcpy的len为0的情况,高并发时导致CPU 100%;

 

源码相关:

5.7:

bool String::mem_realloc(size_t alloc_length, bool force_on_heap)
.....
      memcpy(new_ptr, m_ptr, m_length);
 

8.0:

bool String::mem_realloc(size_t alloc_length, bool force_on_heap) {
......
      if (m_length > 0) memcpy(new_ptr, m_ptr, m_length);

 

4、相关参考

Mysql 5.7 的JSON实现:kancloud.cn/taobaomysql/monthly/117958

5.7之前使用blob实现json对象的存储,5.7在server层提供了一堆便于操作 JSON 的函数,存储就是简单地将 JSON 编码成 BLOB,然后交由存储引擎层进行处理。

 

5、解决办法

数据库实例从Mysql 5.7升级到8.0版本,本文内8.0版本具体为8.0.18。

0条评论
作者已关闭评论
zhangchy
4文章数
0粉丝数
zhangchy
4 文章 | 0 粉丝
原创

Mysql 5.7 cpu100%和大JSON写入

2023-10-23 03:07:04
7
0

1、问题表现

Mysql 5.7 数据库实例CPU 100%的问题。

 

2、问题分析

通过perf可以查看当前Mysql进程的函数CPU占用,主要是在JSON数据的写入上。

 

3、问题原因

1、JSON数据的高并发写入;

2、5.7版本的bug,没有考虑到memcpy的len为0的情况,高并发时导致CPU 100%;

 

源码相关:

5.7:

bool String::mem_realloc(size_t alloc_length, bool force_on_heap)
.....
      memcpy(new_ptr, m_ptr, m_length);
 

8.0:

bool String::mem_realloc(size_t alloc_length, bool force_on_heap) {
......
      if (m_length > 0) memcpy(new_ptr, m_ptr, m_length);

 

4、相关参考

Mysql 5.7 的JSON实现:kancloud.cn/taobaomysql/monthly/117958

5.7之前使用blob实现json对象的存储,5.7在server层提供了一堆便于操作 JSON 的函数,存储就是简单地将 JSON 编码成 BLOB,然后交由存储引擎层进行处理。

 

5、解决办法

数据库实例从Mysql 5.7升级到8.0版本,本文内8.0版本具体为8.0.18。

文章来自个人专栏
Mysql内核
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0