mysql数据库cpu飙升800%,如何故障定位及优化

mysql数据库cpu飙升800%,如何故障定位及优化,第1张

mysql数据cpu飙升800%,基本上就两种原因:

访问量大,大到你8核cpu都承受不了;

慢查询,数据库执行sql语句 *** 作(查询数据、修改数据)会产生大量的逻辑读,将读出来的数据维护到临时表中(内存),系统需要消耗较多的cpu来维持内存与磁盘数据的一致性。

大多数情况下都是开发人员对sql的把握质量不够,导致慢sql查询的产生,进而影响数据库的整体运行状况。

大量行锁冲突、行锁等待或后台任务也有可能会导致实例的CPU使用率过高,但这些情况出现的概率非常低。

当我们的数据库性能下降的厉害或者cpu飙升时候,可以进行如下 *** 作定位问题:

查询mysql进程列表

showfullprocesslist;

获取到mysql当前使用的进程:

如果进程很多,说明请求量很大,需要区分是否正常业务流量,还是代码问题导致的。

查询慢查询日志

showvariableslike'%slow_query_log%';

找到慢查询日志文件/home/mysql/data3085/mysql/

slow_querylog

,即可找到慢查询日志信息,解决这些慢sql,你的cpu一定会降下来。

避免数据库cpu飙升

实际开发过程中,我们对数据库的使用一定要小心,不能等问题发生了再去排查问题解决问题,而是要预防问题的发生,并且在问题可能发生的情况下,提前介入,避免问题扩大化。平时开发过程中需要做好一些准备工作:

增加CPU使用率告警机制,比如使用率超过80%就短信告警;

所有的sql语句必须走索引,有DBA则由DBA统一调控,没有的话开发人员先执行explain看sql执行计划,必须走索引,属于强制规则;

新功能上线必须进行压测;

日常mysql运行监控,慢查日志查看,将隐患扼杀在摇篮之中。

以上就是一些mysql稳定运行的个人看法,大家还有什么好的建议,欢迎评论去交流讨论,批评指正~

什么是数据库?

数据库是一个以某种有组织的方式存储的数据集合,它是一个按数据结构来存储和管理数据的计算机软件系统。理解数据库的一种最简单的办法是将其想象为一个文件柜,这个文件柜只是一个存储数据的空间,而数据库就是这么一个空间。

数据库管理系统(DatabaseManagementSystem,DBMS)是用于创建、管理、和维护数据库时所使用的软件,用以管理数据库,一定程度上,用户都是在 *** 作DBMS,所以日常的数据库概念一般就是指DBMS。

常见的数据库软件DBMS有甲骨文的Oracle、微软的Aess、MongoDB等,还有我们教程要介绍的MySQL。

什么是MySQL?

MySQL是一种DBMS,而且是一种一个小型的开源的关系型数据库管理系统。2008年1月16日MySQLAB被Sun公司收购。而2009年,SUN又被Oracle收购。就这样如同一个轮回,MySQL成为了Oracle公司的另一个数据库项目。

MySQL它在世界范围内得到了广泛的安装和使用,应该是使用人数最多的数据库软件了,因为它有着这样的特性:

成本——MySQL是开源软件,可以免费使用和修改。

性能——MySQL性能很好处理速度很快。

简单——MySQL很容易安装和使用,对新手友好。

MySQL数据库软件也是使用最常用的数据库管理语言:结构化查询语言(SQL)进行数据库管理和 *** 作。

body{

line-height:200%;

}

如何优化MySQL数据库

当MySQL数据库邂逅优化,它有好几个意思,今天我们所指的是性能优化。

我们究竟该如何对MySQL数据库进行优化呢?下面我就从MySQL对硬件的选择、Mysql的安装、myf的优化、MySQL如何进行架构设计及数据切分等方面来说明这个问题。

1服务器物理硬件的优化

1)磁盘(I/O),MySQL每一秒钟都在进行大量、复杂的查询 *** 作,对磁盘的读写量可想而知,所以推荐使用RAID10磁盘阵列,如果资金允许,可以选择固态硬盘做RAID10;

2)cpu对Mysql的影响也是不容忽视的,建议选择运算能力强悍的CPU。

2MySQL应该采用编译安装的方式

MySQL数据库的线上环境安装,我建议采取编译安装,这样性能会较大的提升。

3MySQL配置文件的优化

1)skip

-name

-resolve,禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间;

2)back_log

=

384,back_log指出在MySQL暂时停止响应新请求之前,短时间内的多少个请求可以被存在堆栈中,对于Linux系统而言,推荐设置小于512的整数。

3)如果key_reads太大,则应该把myf中key_buffer_size变大,保持key_reads/key_read_requests至少在1/100以上,越小越好。

4MySQL上线后根据status状态进行适当优化

1)打开慢查询日志可能会对系统性能有一点点影响,如果你的MySQL是主-从结构,可以考虑打开其中一台从服务器的慢查询日志,这样既可以监控慢查询,对系统性能影响也会很小。

2)MySQL服务器过去的最大连接数是245,没有达到服务器连接数的上限256,应该不会出现1040错误。比较理想的设置是:Max_used_connections/max_connections

100%

=85%

5MySQL数据库的可扩展架构方案

1)MySQL

cluster,其特点为可用性非常高,性能非常好,但它的维护非常复杂,存在部分Bug;

2)DRBD磁盘网络镜像方案,其特点为软件功能强大,数据可在底层块设备级别跨物理主机镜像,且可根据性能和可靠性要求配置不同级别的同步。

在使用MySQL数据库的时候,都碰到过因断电造成数据库损坏的情况,大家都知道,断电或非正常关机是导致MySQL数据库出现错误最常见的原因,如何恢复MySQL数据库是大家都非常头痛的问题。目前有方法可以帮助大家恢复损坏的MySQL数据库吗?

当用户出现断电造成的MySQL数据库丢失损坏时,如果能进入MySQL软件,但是提示错误信息,用户可以通过“系统维护”—“数据库压缩修复”,压缩下数据库(有些软件在“系统设置”—“系统维护”—“数据库备份\恢复”中),这种方法只适合一小部分的数据库故障修复,功能性并不高。

现在网络上有两种比较推荐使用的MySQL数据库恢复方法,一种方法使用MySQL(和PHP搭配之最佳组合)的check table和repair table 的sql语句,另一种方法是使用MySQL(和PHP搭配之最佳组合)提供的多个myisamchk, isamchk数据检测恢复工具。在很多用户看来,这两个方法都比较复杂,并不适合大多数的用户使用。另外,这两种方法并不能有效的恢复MySQL数据库,可能还会造成数据库被进一步损坏,造成大家无法挽回的损失。根据以上几个原因,这两种MySQL数据库恢复方法并不建议大家使用。

数据库被损坏分以下几种情况:

1、严重损坏

2、轻度损坏

3、有些表被损坏或有些表的部分记录被损坏

以上就是关于mysql数据库cpu飙升800%,如何故障定位及优化全部的内容,包括:mysql数据库cpu飙升800%,如何故障定位及优化、MySQL数据库的简介(数据库的介绍)、数据库如何优化等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/9498273.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存