Mysql数据库优化系列(三)------Mysql性能调优的思路
来源:互联网 发布:java 执行外部命令 编辑:程序博客网 时间:2024/06/05 02:02
一、最好的优化-----不查询!
这不是开玩笑.
如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住,如何来处理?
大的思路--------
是周期性的变化还是偶尔问题?
是服务器整体性能的问题, 还是某单条语句的问题?
具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间.
唯一的办法-----监测并观察服务器的状态.
1:观察服务器状态, 一般用如下2个命令
Show status; Show processlist;
例: mysql> show status;
#mysqladmin ext (功能相同)
二、那我们来做一个实验:MySQL周期性波动试验
(一)、实验目的: 模拟数据库高低峰时的压力波动,并会观察绘制波动曲线
(二)、实验思路: 反复查询数据库并缓存入memcached, 缓存定期失效,
(三)、观察记录服务器参数,并作图表.
(四)、实验准备: nginx+php+memcached+awk+ab
1: index.php (随机访问3W条热数据,并储存在memcached中
2: memcached (储存查询结果)
3: ab 压力测试工具
4: awk脚本
三、实验步骤:
总数据1300W以上,热数据3W,50个并发,每秒请求500-1000次
请求结果缓存在memcache,生命周期为60秒,
(生命周期要结合请求周期来制定,比如3万条数据随机,每秒1000条,30秒能走一遍,生命周期可设为60秒)
观察mysql连接数,每秒请求数的周期变化.
再打开一个窗口
50个并发,200000个总请求
缓存热数据脚本
<?php// 30K hot news$rangeid = rand(1,30000)+13000000;$mconn = memcache_connect('localhost',11211);if( ($com = memcache_get($mconn,$rangeid)) === false) { $conn = mysql_connect('localhost','root'); $sql = 'use bigdata'; mysql_query($sql,$conn); $sql = 'set names utf8'; mysql_query($sql,$conn); $sql = 'select id,name,brief from lx_com where id=' . $rangeid; $rs = mysql_query($sql,$conn); $com = mysql_fetch_assoc($rs); memcache_add($mconn , $rangeid , $com , false, mt_rand(40,120));} else { echo 'from cache';}print_r($com);
统计脚本status.sh
#!/bin/bashwhile truedomysqladmin -uroot ext|awk '/Queries/{q=$4}/Threads_connected/{c=$4}/Threads_running/{r=$4}END{printf("%d %d %d\n",q,c,r)}' >> status.txtsleep 1done
让memcached后台运行
ab压力测试
在Excel画出图表
解决办法:
1: 减少无关请求(业务逻辑层面,暂不讨论,但其实是最有效的手段)
2: 如果请求数是一定的,不可减少的. 我们要尽量让请求数平稳,不要有剧烈波动.
很多时候,不是服务器撑不住总的查询量,而是在某个时间段撑不住高峰请求.
----夜间负载低时,集中失效.
短时间内会有波峰,但夜间访问量少,因此波峰并不剧烈,当到上午10点左右人多时,缓存已经建立了一部分. 白天时,波峰也不剧烈.
或者让缓存的生命周期在一定范围内随机,也可以减缓波峰剧烈的情况
我们把实验中的生命周期由80秒,改为[40-120秒],其他实验条件不变.
得到如下曲线
可以看出,稳定运行后,请求在[1000-1500]之间波动,
而固定缓存周期是,请求在[500-1700]之间波动.
- Mysql数据库优化系列(三)------Mysql性能调优的思路
- Mysql数据库优化系列(一)------Mysql服务器优化思路
- Mysql数据库优化系列(一)------Mysql服务器优化思路
- MySQL 数据库性能优化之SQL优化(这是 MySQL数据库性能优化专题 系列的第四篇文章)
- MySQL 数据库性能优化之索引优化(这是 MySQL数据库性能优化专题 系列的第三篇文章)
- MySQL 数据库性能优化之表结构优化(这是 MySQL数据库性能优化专题 系列的第二篇文章)
- MySQL 数据库性能优化之缓存参数优化(这是 MySQL数据库性能优化专题 系列的第一篇文章)
- mysql 优化系列(一) Mysql数据库引擎性能测试
- MySQL 数据库性能优化之(三)索引优化
- 【Day61】MySQL数据库性能优化之三(索引优化)
- 提高MySQL 数据库性能的思路
- MySQL性能优化(三)
- Mysql数据库调优和性能优化
- mysql 性能优化系列
- MySQL性能调优与架构设计--第九章MySQL数据库Schema设计的性能优化
- MySQL数据库优化(五)-性能调优
- Mysql数据库调优和性能优化(一)
- Mysql数据库调优和性能优化(二)
- Sae mysql 数据源配置示例
- bat-教育考试视频下载后自动复制到移动硬盘并重命名
- c++学习笔记在(03)
- 汉字转拼音
- 8 个必备的PHP功能开发
- Mysql数据库优化系列(三)------Mysql性能调优的思路
- 关于C、java、php的函数参数传递特点的分析
- 微软CRM 2011 安装图文教程
- SecureCRT下的串口不能输入
- C 语言访问MySQL数据库的简单实验
- Triple Data Encryption Standard(TDES) - 基本介绍
- 在Windows7本机上安装IIS
- ObjectOutputStream 多次写同一个文件后,读取出错解决办法
- 第十七周项目三:胖子伤不起