设为首页收藏本站

LinuxTone | 运维专家网论坛 - 最棒的Linux运维与开源架构技术交流社区!

 找回密码
 注册

QQ登录

只需一步,快速开始

#公告#抱歉,网站将关闭,不再开放。由于PC时代已远逝 。在这个后移动互联网时代,我们继续携手前行,保持对技术的热情。共同构建linuxtone知识星球欢迎加入,一起讨论技术、招聘人才、分享资源。请新老linuxtone人 扫码移步到 知识星球:linuxtone

学习是一种信仰!分享是一种快乐!能力= 心态 * 沟通 * 知识 (你的每一天需要正能量!)

 网站的发展需要你贡献一份力量!希望你能每天坚持看贴1小时,并回答网友的问题!祝你在浏览论坛的过程中取得进步!谢谢!linuxtone加油!大家加油! 友情提示: 你今天学习了吗?你今天进步了吗?少一点抱怨!多一点进步!Life is short ! Why not linuxtone ?  

网站的发展、感谢每位坛友的努力!

查看: 4147|回复: 6

[MySQL性能调优] select分区表导致mysql负载很高 [复制链接]

Rank: 8Rank: 8

签到
156
注册时间
2011-12-1
最后登录
2014-1-16
在线时间
61 小时
阅读权限
90
积分
16530
帖子
71
主题
28
精华
0
UID
16212
发表于 2014-1-11 08:28:28 |显示全部楼层
本帖最后由 星云 于 2014-1-11 08:36 编辑

有个分区表,每个月做了分区,独立表空间,每个分区数据2G左右,该表还做了索引。
最近搞活动页面要查这个表的数据,发现人多的时候,网站打开很慢,包括首页和查一些非常小的表(100M)的页面打开非常慢,只发现数据库cpu负载比平常高出好几倍,在这段时间是峰值
查看processlist , 就是 select 分区表 where 时间条件 的sql较多,几乎全部处于 sending data 状态.
其次,发现分区表的查询页面对 mysql cpu负载影响非常明显, 低峰期的时候,mysql cpu 负载在70%左右,只要我使用那个分区表查询页面,负载就马上升到100多,查询完了又降下来。
看了查询sql使用了索引,而且该sql在高峰期时写进慢日志有6s左右,但低峰期我查只要 2s左右.
最大问题是查询分区表的这些sql怎么会影响登陆功能的sql,和一些小表查询的sql,导致首页,登陆,几乎静态的页面打开都很慢,实在不明白.
服务器总共16G内存,innodb pool 分配了10G
内存最大绝对空闲4g,一天下来会缓存光,所以每天要手动释放下内存.有1.8G左右缓存到了swap,没看到释放.

跪求指导意见!

Rank: 8Rank: 8

注册时间
2011-9-16
最后登录
2020-4-4
在线时间
960 小时
阅读权限
90
积分
269961
帖子
2158
主题
2
精华
0
UID
15647
发表于 2014-1-11 09:33:36 |显示全部楼层
路过了解一下

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-2-5
最后登录
2018-4-13
在线时间
23 小时
阅读权限
70
积分
6522
帖子
8
主题
1
精华
0
UID
1287
发表于 2014-1-11 12:06:47 |显示全部楼层
说了这么长  没有把语句   没有把过程展现出来

使用道具 举报

LT资深版主

犯强汉者,虽远必诛!

Rank: 8Rank: 8

注册时间
2009-2-1
最后登录
2016-2-19
在线时间
548 小时
阅读权限
150
积分
7434
帖子
824
主题
88
精华
3
UID
1215

LT同学

发表于 2014-1-11 22:05:32 |显示全部楼层
贴出慢查询语句
<-sina_sign,1836665025,1->

使用道具 举报

Rank: 8Rank: 8

注册时间
2011-12-1
最后登录
2014-1-16
在线时间
61 小时
阅读权限
90
积分
16530
帖子
71
主题
28
精华
0
UID
16212
发表于 2014-1-13 06:41:03 |显示全部楼层
本帖最后由 星云 于 2014-1-13 06:47 编辑

负载高的时候很容易发现这些
SELECT COUNT(*) FROM `big_log` AS `main_table` WHERE (main_table.user_id = '23491') AND (main_table.room_id = '15') AND (main_table.create_tim
e >= '2014-01-10 00:00:00' AND main_table.create_time <= '2014-01-10 23:59:59');
big_log 是个大表,做了分区,每个月分区数据2G左右,上面这条sql使用了索引
SELECT `main_table`.* FROM `big2_log` AS `main_table` WHERE (main_table.transaction_type != 4) AND (main_table.user_id = '72609') AND (main_table.crea
te_time >= '2014-01-05 00:00:00' AND main_table.create_time <= '2014-01-11 23:59:59') ORDER BY main_table.last_mod_time DESC, id DESC LIMIT 20;
上面sql一运行,mysql cpu负载马上升上去
关键是这条 sql状态 copying tmp table
insert into snapshot.share_today_snapshot
(user_id,level,child_id,child_name,child_true_name,share_rate,fee,share)
select p.parent_id,1,p.id , p.login_name, pe.true_name ,a.share_rate, sum(b.fee) as sumfee , floor(sum(b.fee) * a.share_rate)
from (sanguozhi.user_share a, sanguozhi.big_log b ,sanguozhi.user p)
left join sanguozhi.user_extra pe on (p.id = pe.user_id)
where p.parent_id =  NAME_CONST('p_user_id',21822) and a.user_id = p.parent_id and b.user_id = p.id  and b.create_time between CURDATE() + INTERVAL 0 SECOND and NOW()
  group by p.id
然后 user x,s锁n多条记录
user表总共才65000多记录
QQ截图20140112230630_chuli.png (53.97 KB, 下载次数: 0)

使用道具 举报

Rank: 6Rank: 6

注册时间
2009-2-5
最后登录
2018-4-13
在线时间
23 小时
阅读权限
70
积分
6522
帖子
8
主题
1
精华
0
UID
1287
发表于 2014-1-13 17:55:08 |显示全部楼层
不知道你的做了哪些索引   还有重复率高不  要是不高的话  我觉得可以做个联合索引  然后再看下性能  但是前导列用哪个 这个还需要看数据分布的情况。

使用道具 举报

Rank: 6Rank: 6

注册时间
2012-12-27
最后登录
2014-3-15
在线时间
21 小时
阅读权限
70
积分
4605
帖子
1
主题
0
精华
0
UID
36692
发表于 2014-1-13 23:23:00 |显示全部楼层
请给出:
show index from big_log 的结果 是否使用联合索引

另外:
main_table.create_time >= '2014-01-05 00:00:00' AND main_table.create_time <= '2014-01-11 23:59:59'

用 between and 代替,main_table.create_time  between '2014-01-05 00:00:00' and '2014-01-11 23:59:59'

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

IT运维专家网感谢您的支持

合作联系: QQ:67888954/MSN:cnseek@msn.com/mail:netseek@linuxtone.org

Archiver|手机版|感谢所有关心和支持过LinuxTone的朋友们 转载本站内容请注明原作者名及出处 ( 京ICP备08103151 )   |

GMT+8, 2020-4-5 10:02 , Processed in 0.023167 second(s), 16 queries , Apc On.

Powered by Discuz! X2 Licensed

© 2001-2011 Comsenz Inc.

回顶部