服务器为Centos5.6,内存2G,CPU双核
网站日均IP2000。数据库100个表,约100万条数据。
最近网站程序做过修改。其他中网站有许多crontab定时执行的动态脚本(大部分都是对MYSQL进行处理的)
通过top命令,发现mysql进程占CPU160%,网站网页已经卡死。无法访问。
首先,分析了下。最近所做的修改。
然后再看了一下mysql的进程列表(频繁的执行)
mysql>show processlist;
发现,没有过多的SQL信息。
然后我去查看了下mysql的配置文件:
>more /opt/conf/my.cnf
查看 tmp_table_size 的值为50M;
然后我将其修改为200M;
重启mysql之后,发现mysql的进程还是过高。
增加 tmp_table_size 值。mysql 的配置文件中,tmp_table_size 的默认大小是 32M。如果一张临时表超出该大小,MySQL产生一个 The table tbl_name is full 形式的错误,如果你做很多高级 GROUP BY 查询,增加 tmp_table_size 值。 这是 mysql 官方关于此选项的解释:
tmp_table_size
This variable determines the maximum size for a temporary table in memory. If the table becomes too large, a MYISAM table is created on disk. Try to avoid temporary tables by optimizing the queries where possible, but where this is not possible, try to ensure temporary tables are always stored in memory. Watching the processlist for queries with temporary tables that take too long to resolve can give you an early warning that tmp_table_size needs to be upped. Be aware that memory is also allocated per-thread. An example where upping this worked for more was a server where I upped this from 32MB (the default) to 64MB with immediate effect. The quicker resolution of queries resulted in less threads being active at any one time, with all-round benefits for the server, and available memory.
对 WHERE, JOIN, MAX(), MIN(), ORDER BY 等子句中的条件判断中用到的字段,应该根据其建立索引 INDEX。索引被用来快速找出在一个列上用一特定值的行。没有索引,MySQL不得不首先以第一条记录开始并然后读完整个表直到它找出相关的行。表越大,花费时间越多。如果表对于查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要考虑所有数据。如果一个表有1000行,这比顺序读取至少快100倍。所有的MySQL索引(PRIMARY、UNIQUE和INDEX)在B树中存储。
根据 mysql 的开发文档:
索引 index 用于:
快速找出匹配一个WHERE子句的行
当执行联结(JOIN)时,从其他表检索行。
对特定的索引列找出MAX()或MIN()值
如果排序或分组在一个可用键的最左面前缀上进行(例如,ORDER BY key_part_1,key_part_2),排序或分组一个表。如果所有键值部分跟随DESC,键以倒序被读取。
在一些情况中,一个查询能被优化来检索值,不用咨询数据文件。如果对某些表的所有使用的列是数字型的并且构成某些键的最左面前缀,为了更快,值可以从索引树被检索出来。
假定你发出下列SELECT语句:
mysql> SELECT * FROM tbl_name WHERE col1=val1 AND col2=val2;
如果一个多列索引存在于col1和col2上,适当的行可以直接被取出。如果分开的单行列索引存在于col1和col2上,优化器试图通过决定哪个索引将找到更少的行并来找出更具限制性的索引并且使用该索引取行。
分享到:
相关推荐
MySQL占用CPU过高的解决方案 在这篇文章中,我们讨论了MySQL占用CPU过高的问题及其解决方案。该问题可能会导致服务器性能下降,影响用户体验。通过实践案例,我们将展示如何诊断和解决该问题。 一、问题描述 ...
在某个新服务器上,新建了一个MySQL的实例,该服务器上面只有MySQL这一个进程,但是CPU的负载却居高不下,使用top命令查询的结果如下: [dba_mysql@dba-mysql ~]$ top top - 17:12:44 up 104 days, 20 min, 2 ...
朋友主机(Windows 2003 + IIS + PHP + MYSQL )近来 ... MYSQL CPU 占用 100% 的解决过程 今天早上仔细检查了一下。目前此网站的七日平均日 IP 为2000,PageView 为 3万左右。网站A 用的 database 目前有39个表,记录数
### 解决 MySQL 服务器进程 CPU 占用 100% 的技术笔记 #### 现象描述 ...通过以上步骤和技术方案的应用,成功地解决了 MySQL 服务器进程 CPU 占用率过高的问题,提高了服务器的整体响应速度和服务质量。
- **监控MySQL性能**:使用系统自带的工具如`top`或`htop`来实时监控MySQL进程的CPU占用率。 ### 3. 分析SQL执行情况 - **使用`SHOW PROCESSLIST`命令**:以MySQL管理员身份登录MySQL,执行`SHOW PROCESSLIST`命令...
本文将深入探讨“MySQL数据库CPU飙升及烂sql记录”这一主题,旨在帮助读者理解问题出现的原因,以及如何诊断和解决这类问题。 首先,CPU飙升可能是由于多种原因造成的,包括但不限于以下几点: 1. **SQL查询优化...
#适用于实时查询mysql占用CPU高的语句,循环监控mysql进程情况,当CPU大于一定的前执行中的SQL情况. #执行前,修改ENV认证部分 #编写:Chaoren #2022年3月4日18:38:53 # #对于执行时间非常短的SQL可能监控到的语句...
LNH_MySQL 04-linux进程占用cpu高的解决方案案例.mp4
mysql 批量杀cpu 高耗进程脚本 ,注意里面注释
### 服务器大量php-cgi.exe进程导致CPU占用100%的问题分析及解决方案 ...通过上述方法,不仅可以有效解决由大量`php-cgi.exe`进程导致的CPU占用率过高问题,还能进一步提升服务器的整体性能和稳定性。
### MySql 1067错误解决方法 在日常使用MySQL数据库的过程中,我们经常会遇到各种各样的问题,其中“1067错误”是较为常见的一种系统级别的错误提示。本篇文章将详细阐述MySQL 1067错误的具体含义、常见的触发场景...
如果出现“PID file could not be found”的错误,可能需要通过`kill`命令找到并终止MySQL进程。 5. **检查配置文件**: 检查MySQL的配置文件`my.cnf`,确保`pid-file`选项指向正确的PID文件位置。例如: ``` ...
当MySQL数据库占用过高CPU资源时,这通常意味着数据库性能出现了问题,可能会影响到系统的整体响应速度。以下是一些针对这种情况的优化策略: 1. **优化SQL语句**:首先要找到CPU消耗最大的SQL语句,可以使用`SHOW ...
### php-fpm 占用CPU过高,100%的解决方法 #### 一、问题背景与概述 在日常运维工作中,我们可能会遇到服务器资源占用过高的情况,尤其是在使用PHP和Nginx构建Web应用时。本文将详细介绍当php-fpm进程占用CPU达到...
本文将深入探讨标题和描述中涉及的几个关键知识点:进程管理、系统服务管理、获取内存信息、CPU使用率监控以及MySQL数据库的访问源码。 首先,**进程管理**是操作系统的核心功能之一。在Windows中,进程是执行中的...
"使用LoadRunner监控MySQL在Apache下占用CPU资源情况的方法"这个主题旨在教你如何使用LoadRunner这一强大的性能测试工具来监控MySQL数据库和Apache HTTP服务器在运行时的CPU利用率。这有助于识别潜在的性能瓶颈,并...
### MySQL 服务无法启动 1067 的解决办法 在使用MySQL数据库的过程中,可能会遇到一个常见的问题:MySQL服务无法启动,并提示错误代码1067。错误代码1067通常表示“进程意外终止”,这可能是由于多种原因引起的。...