MySql单表最大8000W+ 之数据库遇瓶颈记
前言
昨晚救火到两三点,早上七点多醒来,朦胧中醒来发现电脑还开着,赶紧爬起来看昨晚执行的SQL命令结果。由于昨晚升级了阿里云的RDS,等了将近两个小时 还在 升降级中,早上阿里云那边回复升级过程中出现异常,正在加紧处理。。。有点蛋疼
项目介绍
这个项目主要分为WEB、WEB-Manager、WEB-API、APP(ANDROID、IOS) 。
开发语言主要是ASP.NET
数据库MySql
架构采用了ASP.NET +EF+ORM Unity依赖注入 采用了DDD的部分实践
ORM使用的是AutoMapper
使用了Redis缓存
Log4net记录文件日志,刚开始使用Mongodb记录日志,用了一段时候后取消了。
WEB端使用了angularjs
API层通过JSON数据与APP进行交互,用户状态通过access_token进行传递
数据库层目前是基于仓储(Repositor)模式实现的
刚开始项目急于上线多数采用Linq +lambda 的查询方式,在实践过程中发现变态的业务调整和快速的请求响应,将其复杂的查询改成了原生SQL,通过Context.DataBase.SqlQuery 执行
其他的技术就不一一介绍了
目前访问量较大的是APP端, 最大并发 1300+
主要是API的压力比较大,日均 100W+ 请求,API 目前 部署在Windwos server 2012上, 接口在50个以上
数据库使用的是阿里云的单机MySql RDS 5.6 版本,10盒12G,连接数2000,iops 6000
目前 单表最大是8000W+数据。物理文件300G,APIlog日均100W+,API与业务系统完全独立,除了DBLog日志还有Log4g.net生成的文件日志。
目前采用的是阿里云的负载,一主一从 购买的阿里云负载 两台应用均为 8盒16G ,10M带宽 ,资源文件上了CDN。
主的上面部署了WEB端和WEB管理后台,从的上面只有API。
数据库遇瓶颈
最近用户量突破10+以上,最大并发1300+ 从前天晚上开始数据库CPU居高不下,一时达到100%临界点,导致很多SQL命令执行发生错误,链接拒绝。阿里云的报警短信也随之而来,随即我停掉了IIS应用,因为不停止应用MySql数据库很难复苏,大概过了5分钟之后数据库恢复正常,然后再开启IIS应用。蛋疼的是阿里云的负载健康检查也提示异常,但有点不解的是健康状态显示异常,请求仍然在继续分发,很是不解。立马我将IIS 应用程序池资源回收,停止然后再重启,这里给个提示 重启IIS应用程序池的时候最好先停止掉IIS应用,然后再重启IIS应用程序池,不然访问量大的情况下很难起起来。过了几分钟之后负载上的健康检查显示正常。
上阿里云后来看了下各个监控指标,显示流量从前一个小时开始 突然猛增,我以为是有攻击,但跟踪了几个连接发现是正常请求,但360的防御助手显示确实有几个攻击,但那几个请求根本不足以拉跨数据库,大概也就几十个请求, 几个简单的 XSS攻击 这里贴下:攻击的数量不是太多,但主要攻击的内容和参数就这个几种类型
url/'%22/%3E%3C/script%3E%3Cscript%3Ealert()%3C/script%3E
url/'%22+onmouseover=alert()+d='%22
url/matrix_callback.php
url/index.php?option=com_fields&view=fields&layout=modal&list%5Bfullordering%5D=updatexml(0x3a,concat(1,md5(233)),1)
后来发现是数据库遇到危机了,CPU几度达到了100%,活跃连接数和非活跃连接数都比平时都要高很多。目前数据库中有一张最大的表超8000W条数据,超300W以上的也有十几张,是查询拖垮了数据库,平时开发的时候我们都是要求查询类的SQL要求0.03秒之内完成。但涉及到这几张大表的查询我们设定到0.5秒之内返回。今天肯定是查过0.5秒了,
我查了下阿里云控制台的慢SQL日志,眼下系统运行还稍微正常,就拿那些慢SQL 一个一个的优化,不能立马发版,也就是不能改写SQL代码,只能从索引上进行优化了。就这样把慢SQL逐一过了一遍,大约有20多个 超2秒执行的,最慢的达到了10秒,最大的解析行数达到了10W行以上,哎 应该是下面的兄弟写sql不严谨,否则不会出现解析行数超10W+的,但兄弟挖的坑 我哭着也要去填。就这样用explain 调整索引的方式逐一过了一遍,之前通过表空间已经做过一次优化了。
到昨晚又到了高并发的时候,数据库又报警了,还好只是报警没有给我crash掉。与客户那边沟通下来,决定进行数据库扩容。现在扩容到了16盒64G 连接数14000 iops16000。
增加了一个应用几点,现在是一主两从
应该能撑一段时间了
接下来需要着手上读写分离, 针对比较大的表进行拆分,代码和数据库继续优化。尽量做到最优。
再下来着手上分布式 因为架构的演变是根据市场营销情况而定,不能走太前更不能走到市场的后面
周末比较累 写的比较剪短,有时间再续
MySql单表最大8000W+ 之数据库遇瓶颈记的更多相关文章
- MySQL单表最大限制
想把一个项目的数据库导出来,然后倒入到自己熟悉的MySQL数据库中进行运行和调试.导出来后,发现sql文件整整有12G多大,忽然想起来,MySQL好像有个叫做容量限制的神奇特性,但是忘了上限是多少了, ...
- mysql单表大小的限制
mysql单表大小的限制一.MySQL数据库的MyISAM存储 引擎单表大小限制已经不是有MySQL数据库本身来决定(限制扩大到64pb),而是由所在主机的OS上面的文件系统来决定了.在mysql5. ...
- MYSQL单表可以存储多少条数据???
MYSQL单表可以存储多少条数据??? 单表存储四千万条数据,说MySQL不行的自己打脸吧. 多说一句话,对于爬虫来说,任何数据库,仅仅是存储数据的地方,最关心的是 能否存储数据和存储多少数据以及存储 ...
- python 3 mysql 单表查询
python 3 mysql 单表查询 1.准备表 company.employee 员工id id int 姓名 emp_name varchar 性别 sex enum 年龄 age int 入职 ...
- MySQL单表数据不超过500万:是经验数值,还是黄金铁律?
今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢? 曾经在中国互联网技术圈广为流传着这么一个 ...
- MySQL单表最大记录数不能超过多少?
MySQL单表最大记录数不能超过多少? 很多人困惑这个问题.其实,MySQL本身并没有对单表最大记录数进行限制,这个数值取决于你的操作系统对单个文件的限制本身. 从性能角度来讲,MySQL单表数据不要 ...
- MySQL单表数据不要超过500万行:是经验数值,还是黄金铁律?
本文阅读时间大约3分钟. 梁桂钊 | 作者 今天,探讨一个有趣的话题:MySQL 单表数据达到多少时才需要考虑分库分表?有人说 2000 万行,也有人说 500 万行.那么,你觉得这个数值多少才合适呢 ...
- Mysql 单表查询-排序-分页-group by初识
Mysql 单表查询-排序-分页-group by初识 对于select 来说, 分组聚合(((group by; aggregation), 排序 (order by** ), 分页查询 (limi ...
- mySQL单表限制大小
MySQL单表大小的限制在目前的技术环境中,由所在主机的OS上面的文件系统来界定而不是由MySQL数据库本身来决定了. 在老版本的MySQL 3.22中,MySQL单表大小为4GB,当时的MySQL的 ...
随机推荐
- VOD, TVOD, SVOD FVOD的区别(转)
VOD: Video On Demand 视频点播 TVOD: True Video On Demand 即点即播 按次付费点播,付费后,观众一般有48小时的时间可以观看该片,48小时后需要再次付费才 ...
- #417 Div2 B
#417 Div2 B 题意 给定一个01矩阵表示一幢楼,左右两侧是楼梯,中间是房间,1代表那个房间开灯,0代表关灯,现在某人从1层左端楼梯开始关掉所有灯,当移动某一层时,必须关掉当前层所有灯才能移动 ...
- MySql俩种分页区别(注意)
注意俩个分页的区别哦~ SELECT * FROM city LIMIT 2 OFFSET 1; 从第二条记录开始 取二条记录 如下: SELECT * FROM city LIMIT 3,2; 从第 ...
- postgresql 多表联查
使用语句的先后顺序并不是优先级的排序: 连接分为:内连接和外连接,外连接分为左外连接,右外连接,全连接 概念上解释,表之间联合后数据如何整合. 返回的数据条数,可以通过集合求算.假如A集合有10条数据 ...
- c++ const char *[] or char [][]
]={"hello","world"}; ]={"hello"};char (*ch3)[6]= ch1; std::cout<< ...
- Linux上的防病毒软件ClamAV
Clam AntiVirus(ClamAV)是免费而且开放源代码的防毒软件,软件与病毒码的更新皆由社群免费发布.目前ClamAV主要是使用在由Linux.FreeBSD等Unix-like系统架设的邮 ...
- 如何将mysql数据导入Hadoop之Sqoop安装
Sqoop是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql.postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle , ...
- iOS 转场动画探究(二)
这篇文章是接着第一篇写的,要是有同行刚看到的话建议从前面第一篇看,这是第一篇的地址:iOS 转场动画探究(一) 接着上一篇写的内容: 上一篇iOS 转场动画探究(一)我们说到了转场要素的第四点,把那个 ...
- jrebel配置热部署参数
jrebel配置热部署参数: -noverify -agentpath:D:/jrebel/lib/jrebel64.dll -Drebel.dirs=E:/workspace/item/src/ma ...
- [命令行] curl查询公网出口IP
转载:http://blog.csdn.net/orangleliu/article/details/51994513 不管是在家里还是办公室,或者是公司的主机,很多时候都是在内网中,也就是说很多都是 ...