您的当前位置:首页>全部文章>文章详情

【MySQL】MySQL数据库CPU飙升到100%解决方案

CrazyPanda发表于:2024-07-17 09:36:41浏览:253次TAG:

1、定位cpu问题所在

当cpu飙升到100%时,先用操作系统命令top命令观察是不是mysqld占用导致的,如果不是,找出占用高的进程,并进行相关处理。

2、查看慢查询日志

进入mysql命令行

mysql -h主机地址 -u用户名 -p用户密码1

查看慢查询SQL是否启用:ON是开启,OFF是关闭。
show variables like ‘log_slow_queries’;

开启慢查询日志
set global log_slow_queries = on;

3、使用show processlist查看运行线程

如果是mysqld造成的,show processlist显示用户正在运行的线程,看看里面跑的session情况,是不是有消耗资源的sql在运行【查看Time这一列最大值】。找出消耗高的sql,看看执行计划是否准确,index是否缺失,或者是数据量太大造成。

show processlist
注意state字段中如果包含大量的Sending data、Wating for tabls、或者各种Lock、大概率是SQL造成数据库拥堵。优化对应的SQL,开启慢查询日志,分析sql语句进行优化。

一般来说,肯定要kill掉这些线程(同时观察cpu使用率是否下降),等进行相应的调整(比如说加索引、改sql、改内存参数)之后,再重新跑这些SQL。

也有可能是每个sql消耗资源并不多,但是突然之间,有大量的session连进来导致cpu飙升,这种情况就需要跟应用一起来分析为何连接数会激增,再做出相应的调整,比如说限制连接数等。

阻止滥用资源的程序: 当网站受到攻击时,有可能在短时间内建立异常高的连接数量。MySQL中的PROCESSLIST可用于检测顶级用户并阻止对滥用连接的访问。

4、大量的睡眠线程导致CPU过高

运行show full processlist

【1】根据Command这一列发现大量的Sleep

【2】再根据Time这一列 查看当前Sleep线程的sql所用的耗时

【3】根据sql睡眠线程耗时时间 配置msyql

【4】打开mysql的配置文件my.cnf文件

配置如下:

vim /etc/my.cnf

[mysqld]
wait_timeout=20 ## 大于20秒自动断开 (根据实际情况设置)
配置完成后重启Mysql,不重启的话,可以设置全局的等待超时时间

mysql> set global wait_timeout=20;mysql> show global variables like '%timeout';12

5、合理优化配置项

检查一下MySQL设置,有助于确定内存使用情况,从而为MySQL分配合适的值。缓存在InnoDB存储的缓冲池中完成。缓冲池的大小对系统性能起着关键作用,并被指定为可用RAM的50%-70%之间的值。如果池大小,将导致页面过度刷新,如果太大,将由于内存竞争而导致交换。

innodb_buffer_pool_size
max_connections为了在任何时刻为MySQL分配尽可能多的连接数,并避免单个用户使服务器过载,需要使用max_connections。每个线程使用RAM的一部分进行缓冲区分配,因此它根据RAM的大小限制最大连接数。

max_connections = (Available RAM – Global Buffers) / Thread Buffers 最大连接数 = (有效内存 - 全局缓冲容量)/ 线程缓冲容量
当不经常更改且Web服务器接收许多相同查询时,查询高速缓存可能会很有用。查询缓存将SELECT语句的文本与发送到客户端的相应结果一起存储。

query_cache_size
因此,此参数仅用于此类应用程序服务器,否则将被禁用,并为其他服务器设置为零。

为了避免资源争用,尽管启用了该功能,但应将该值设置为10MB左右的最小值。

猜你喜欢

【MySql】MySql给数据库表添加新字段
要在MySQL中添加新字段,您可以使用ALTER TABLE语句。以下是添加新字段的基本语法:ALTER TABLE table_name ADD column_name datatype;其中:table_name 是您要在其中添加新字段的表的名称。column_name 是新字段的名称。datatype 是新字段的数据类型。例如,VARCHAR、INT或DOUBLE等。以下是一个示例ALTER TABLE语句,演示如何向名为user的表添加一
发表于:2024-09-03 浏览:247 TAG: #mysql
【MySql】where和having的异同?
文章目录面试常考:where与having有什么不同?一个实际查询需求wherehaving怎么正确的使用where和having?面试常考:where与having有什么不同?我们在进行查询的时候,经常需要按照条件对查询结果进行筛选,这就要用到条件语句where和having了。where是直接对表中的字段进行限定来筛选结果,having则需要跟分组关键字group by一起使用,通过对分组字段或分组计算函数进行限定来筛选结果。虽然它们都是对查询进行限定,却有着各自的特点和适用场景。很多时候,
发表于:2023-12-08 浏览:402 TAG:
【MySql】索引怎么提高查询的速度?
文章目录索引:怎么提高查询的速度?如何创建组合索引?组合索引的原理如何创建单字段索引?单字段索引的作用如何选择索引字段?索引是什么?单字段索引组合索引总结索引索引相关面试题MySQL索引的底层实现索引创建原则索引优缺点索引失效场景索引:怎么提高查询的速度?在超市信息系统刚刚开始运营的时候,因为数据量很少,每一次的查询都能很快拿到结果。但是,系统运转时间长了以后,数据量不断地累积,变得越来越庞大,很多查询的速度就变得特别慢。这个时候,我们就采用了 MySQL 提供的高效访问数据的方法—— 索引,有
发表于:2023-12-07 浏览:383 TAG:
【MySql】Centos7 安装 MySQL5.7 步骤
Centos7 安装 MySQL5.7 步骤(一)、使用yum源方式安装4.1 开启mysql的远程访问权限4.2 为firewalld添加开放端口33064.3 远程连接测试3.1 启动mysql并查看状态3.2 获取临时密码3.3 登录mysql3.4 修改登录密码2.1 下载mysql的yum源配置2.2 安装mysql的yum源2.3 使用yum方式安装mysql2.3.1 安装过程中报错解决1、卸载系统自带 mariadb2、下载并安装MySQL官方的 Yum3、使用并设置mysql4
发表于:2023-11-30 浏览:2115 TAG:
【MySQL】用时间戳按时间(年月日)分组统计
时间戳格式与时间格式的转化 (转为时间戳格式时,单位默认为秒,若需转为以毫秒单位,则结果*1000)SELECT UNIX_TIMESTAMP('2022-09-01 00:00:00'); SELECT FROM_UNIXTIME('1661961600','%Y-%m-%d %H:%i:%s');12精确时间范围的搜索SELECT * FROM table_name
发表于:2024-03-18 浏览:305 TAG:
【MSQL】MATCH() AGAINST()全文搜索
这个问题是关于MySQL的全文搜索查询。MATCH() AGAINST() 是MySQL全文搜索的一部分。问题中的代码是在查询中使用MATCH() AGAINST(),但是使用方式有一些问题。首先,MATCH() 函数的参数应该是一个字段名,而不是一个字段值。其次,AGAINST 子句后面应该是要搜索的字符串,并且这个字符串需要被单引号包围。在布尔全文搜索模式下,你需要使用一些特殊的操作符来表示搜索的重要性或条件。例如,+表示一个词必须存在,而 - 表示一个词必须不存在。SELECT 
发表于:2024-07-26 浏览:241 TAG:
【MySQL】MYSQL数据库设计规范
     1、数据库命名规范        采用26个英文字母(区分大小写)和0-9的自然数(经常不需要)加上下划线'_'组成;        命名简洁明确(长度不能超过30个字符);        例如:user, stat, log, 也可以wifi_user, wifi_stat, wifi_log给数据库加个
发表于:2024-07-17 浏览:251 TAG:
【MySql】MySQL表的内外连接和视图
内外连接一、表的内外连接(1)左外连接(2)右外连接1. 内连接2. 外连接3. 练习二、视图1. 视图的使用2. 视图规则和限制一、表的内外连接表的连接分为内连和外连。1. 内连接内连接实际上就是利用 where 子句对两种表形成的笛卡尔积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。语法: select 字段 from 表1 inner join 表2 on 连接条件&nbs
发表于:2024-01-30 浏览:378 TAG:
【MySql】怎么利用聚合函数实现高效地分组统计?
文章目录聚合函数:怎么高效地进行分组统计?sum( )avg( ) & max( ) & min( )count( )聚合函数:怎么高效地进行分组统计?MySQL中有5种聚合函数较为常用,分别是求和函数sum(), 求平均函数avg(), 最大值函数max(), 最小值函数min()和计数函数count()。在超市项目中有一个需求是这样的:经营者提出,他们需要统计一个门店,每天、每个单品的销售情况,包括销售数量和销售金额等。这里涉及3个数据表,具体信息如下所示:销售明细表demo
发表于:2023-12-08 浏览:392 TAG:
【MySQL】MySQL索引原理与慢查询优化
浏览目录# 一、索引介绍二、索引方法三、索引类型四、聚合索引和辅助索引五、测试索引六、正确使用索引七、组合索引八、注意事项九、查询计划十、慢日志查询十一、大数据量分页优化一、索引介绍#  一般的应用系统,读写的比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,在生产环境中,我们遇到最多的,也是最容易出现问题的,还是一些复杂的查询操作,因此对查询语句的优化显然是重中之重。什么是索引:简单来说,相当于图书的目录,可以帮助用户快速找到需要的内容。   在mysql中
发表于:2024-06-21 浏览:385 TAG: