首页 网络安全 安全学院 查看内容

一次mysql瘫痪解救

2015-12-20 01:07 2311 0

摘要: 最近项目访问流量逐步的增加,特别是在一次新的业务消息推送后,极光推送给手机接受到的客户端达到19万个,此时app立马开始访问速度变慢了,用户体验相当差客服接到的问题电话开始一个接一个,我一看心想完了,肯定 ...
关键词: innodb mysql mysqld 要么 进程 然后 速度 调整 数据库 size

最近项目访问流量逐步的增加,特别是在一次新的业务消息推送后,极光推送给手机接受到的客户端达到19万个,此时app立马开始访问速度变慢了,用户体验相当差

客服接到的问题电话开始一个接一个,我一看心想完了,肯定是流量起来了,要么是数据库要么是nginx,要么是带宽不够了,只有这三种可能

赶紧解决问题

打开数据库服务监控:进程连接数达到1200个,每个进程都有sql在处理中。。如下图:

很明显问题出来了, mysql数据库顶不住了,  我这里用的是mysql的分支 percona,抗高并发能力强于官方版本https://www.percona.com/docs/wiki/benchmark:mysql:554-tpcc:start

于是调整参数,然后重启,中间重启出现了一次错误,把我给吓坏了,然后赶紧还原my。cnf,还好每次改的时候会备份一下,不然只有哭了

还原了配置,mysql可以启动了,但是已启动就马上1200个连接全部被塞满了,app操作依旧慢,我的天,不带这么玩我的,

于是调整参数,然后不重启 用 service mysqld reload 命令来操作

[mysqld]
basedir=/usr/local/mysql
user=mysql
socket=/var/run/mysqld/mysqld.sock

server_id=1

local_infile=1
tmpdir=/mnt/fio

datadir=/mnt/fio320
skip-grant-table

innodb_buffer_pool_size=4G[实际内存8G]

innodb_data_file_path=ibdata1:10M:autoextend
innodb_file_per_table=1
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=16M
innodb_log_files_in_group=2
innodb_log_file_size=900M
innodb_thread_concurrency=0
innodb_flush_method             = O_DIRECT

innodb_write_io_threads=9
innodb_read_io_threads=9
innodb_io_capacity=500
innodb_max_dirty_pages_pct=90
max_connections=12000
query_cache_size=0
skip-name-resolve
table_cache=400

调整后reload,瞬间 排队的sql慢慢在减少,进程也开始逐步减少,到130稳定下
再次打开app,速度跟平常速度一样了,用mysqlworkbench 监控,命中率 和buffer使用率达到100%


声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除
1

路过

雷人

握手

鲜花

鸡蛋

刚表态过的朋友 (1 人)

  • 路过

    匿名

最新评论

返回顶部