mysql count 大量数据_mysql大量count(*)操作导致CPU打满

异常现象

大量的count(*),每秒40个左右,导致2核CPU全部打满,当前CPU如图

8741009561de

image.png

实例基础信息:

数据库版本:MariaDB10.0.27

硬件信息:2核cpu+4G内存+100GSSD

数据库中数据量> innodb buffer pool配置

表结构及数据量

CREATE TABLE `xxxxxx` (

`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键id',

`ctime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '创建时间',

`utime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00' COMMENT '更新时间',

`friend_status` int(11) NOT NULL DEFAULT '1' COMMENT '好友关系状态;0:无关联;1:单向好友;2:双向好友;',

`from_user_address` varchar(128) NOT NULL DEFAULT '' COMMENT 'xxxxxx',

`to_user_address` varchar(128) NOT NULL DEFAULT '' COMMENT 'xxxxxxx',

`from_user_id` char(36) NOT NULL COMMENT 'xxxxx',

`to_user_id` char(36) NOT NULL COMMENT 'xxxxx',

PRIMARY KEY (`id`),

UNIQUE KEY `uk_multi` (`from_user_id`,`to_user_id`),

KEY `idx_to_user_id` (`to_user_id`)

) ENGINE=InnoDB AUTO_INCREMENT=1968705 DEFAULT CHARSET=utf8 COMMENT='xxxx'

MariaDB [turin]> select count(*) from friends;

+----------+

| count(*) |

+----------+

| 1969434 |

+----------+

1 row in set (1.41 sec)

异常排查

查看是否有慢查询

tail -f slow.log #观察1分钟,无慢sql打入

查看server audit日志

20180327 10:21:52,rmb-db-01,fengchao_rw,192.168.80.41,92603,292637843,QUERY,turin,'select count(*) from friends WHERE ( friend_status = 2

and from_user_id = \'0d6e93691ff145488fb8054d12422654\' )',0

#发现有count(*) sql出现

查看count(*) 每秒执行次数

root@rmb-db-01:/data/log/mysql3306# grep "count(\*)" server_audit.log

8741009561de

image.png

结论:每秒执行count(*)计算次数太多

解决:与开发沟通将该类SQL用redis实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值