首页 >

mysql每秒并发查询,mysql数据库cpu飙升800 – 数据库 – 前端,mysql 日期相差年数

连接不上mysql数据库,linux上备份mysql,mysql主键从100开始,mysql获取范围内,mysql的proxy,mysql 日期相差年数mysql每秒并发查询,mysql数据库cpu飙升800 - 数据库 - 前端,mysql 日期相差年数

mpstat -P ALL 1,查看cpu使用情况,主要消耗在sys即os系统调用上

perf top,cpu主要消耗在_spin_lock

生成perf report查看详细情况

CPU主要消耗在mutex争用上,说明有锁热点。

采用pt-pmp跟踪mysqld执行情况,热点主要集中在mem_heap_alloc和mem_heap_free上。

Pstack提供更详细的API调用栈

#0 0x0000003e0caf80cf in __lll_unlock_wake_private () from /lib64/libc.so.6#1 0x0000003e0ca7cf6a in _L_unlock_5936 () from /lib64/libc.so.6#2 0x0000003e0ca78bbc in _int_free () from /lib64/libc.so.6#3 0x000000000097dcb3 in mem_area_free(void*, mem_pool_t*) ()#4 0x000000000097d2d2 in mem_heap_block_free(mem_block_info_t*, mem_block_info_t*) ()#5 0x00000000009e6474 in row_vers_build_for_consistent_read(unsigned char const*, mtr_t*, dict_index_t*, unsigned long**, read_view_t*, mem_block_info_t**, mem_block_info_t*, unsigned char**) ()#6 0x00000000009dce75 in row_search_for_mysql(unsigned char*, unsigned long, row_prebuilt_t*, unsigned long, unsigned long) ()#7 0x0000000000939c95 in ha_innobase::index_read(unsigned char*, unsigned char const*, unsigned int, ha_rkey_function) ()

Innodb在读取数据记录时的API路径为

row_search_for_mysql –》row_vers_build_for_consistent_read –》mem_heap_create_block_func –》mem_area_alloc –》malloc –》_L_unlock_10151 –》__lll_unlock_wait_private

row_vers_build_for_consistent_read会陷入一个死循环,跳出条件是该条记录不需要快照读或者已经从undo中找出对应的快照版本,每次循环都会调用mem_heap_alloc/free。

而该表的记录更改很频繁,导致其undo history list比较长,搜索快照版本的代价更大,就会频繁的申请和释放堆内存。

Linux原生的内存库函数为ptmalloc,malloc/free调用过多时很容易产生锁热点。

当多条 SQL 并发执行时,会最终触发os层面的spinlock,导致上述情形。

解决方案

将mysqld的内存库函数替换成tcmalloc,相比ptmalloc,tcmalloc可以更好的支持高并发调用。

修改my.cnf,添加如下参数并重启

[mysqld_safe]malloc-lib=tcmalloc

上周五早上7点执行的操作,到现在超过72小时,期间该实例没有再出现cpu长期飙高的情形。

以下是修改前后cpu使用率对比

连接不上mysql数据库,linux上备份mysql,mysql主键从100开始,mysql获取范围内,mysql的proxy,mysql 日期相差年数mysql每秒并发查询,mysql数据库cpu飙升800 - 数据库 - 前端,mysql 日期相差年数


mysql每秒并发查询,mysql数据库cpu飙升800 - 数据库 - 前端,mysql 日期相差年数
  • mysql链接数据库,操作mysql事务是不是要在一个数据库连接 - 数据库 - 前端,mysql 中文备注乱码
  • mysql链接数据库,操作mysql事务是不是要在一个数据库连接 - 数据库 - 前端,mysql 中文备注乱码 | mysql链接数据库,操作mysql事务是不是要在一个数据库连接 - 数据库 - 前端,mysql 中文备注乱码 ...

    mysql每秒并发查询,mysql数据库cpu飙升800 - 数据库 - 前端,mysql 日期相差年数
  • mysql提高查询速度,mysql数据库cpu飙升800 - 数据库 - 前端,mysql查看某表字段
  • mysql提高查询速度,mysql数据库cpu飙升800 - 数据库 - 前端,mysql查看某表字段 | mysql提高查询速度,mysql数据库cpu飙升800 - 数据库 - 前端,mysql查看某表字段 ...

    mysql每秒并发查询,mysql数据库cpu飙升800 - 数据库 - 前端,mysql 日期相差年数
  • ipad能下载live2d么 - 数据库 - 前端|
  • ipad能下载live2d么 - 数据库 - 前端| | ipad能下载live2d么 - 数据库 - 前端| ...