• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Mysql数据库优化系列(三)

mysql 搞代码 4年前 (2022-01-09) 19次浏览 已收录 0个评论

一、最好的优化 —– 不查询 ! 这不是开玩笑 . 如果一台服务器出现长时间负载过高/ 周期性负载过大 , 或偶尔卡住 ,如何来处理 ? 大的思路 ——– 是周期性的变化还是偶尔问题 ? 是服务器整体性能的问题 , 还是某单条语句的问题 ? 具体到单条语句 , 这条

一、最好的优化—–不查询!

这不是开玩笑.

如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住,如何来处理?

大的思路——–

是周期性的变化还是偶尔问题?

是服务器整体性能的问题, 还是某单条语句的问题?

具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间.

唯一的办法—–监测并观察服务器的状态.

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 = my<a style="color:transparent">本文来源gao($daima.com搞@代@#码$网</a>sql_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]之间波动.


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Mysql数据库优化系列(三)

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址