注:内容摘抄自《PHP 核心技术与最佳实践》一书

MySQL 是存在瓶颈的。 当 MySQL 单表数据量达到千万级别以上时,无论如何对 MySQL 进行优化,查询如何简单,MySQL 的性能都会显著降低。 采取措施:

1)增加 MySQL 配置中的 buffer 和 Cache 的数值,增加服务器 CPU 数量和内存的大小,这样能很大程度上应对 MySQL 的性能瓶颈。
性能优化中,效果最显著、成本最低的当属硬件和服务器优化,所以这是应该首先考虑的。
2)使用第三方引擎或衍生版本。
如 Percona 在功能和性能上较 MySQL 有着显著的提升;由 MySQL 创始人开发的免费 MariaDB 在 InnoDB 引擎上的性能也比 MySQL优秀;
据官网借号,另一款改进的产品 TokuDB,性能是 MySQL 的 10 倍以上。以上这些衍生版或改进版的 MySQL 主要都是针对 MySQL 的 InnoDB
引擎。 InnoDB 每次提交事物时,为了保证数据已经持久化到磁盘(Durable),需要调用一次 fsync 告知文件系统,将可能在缓存中的数据
刷新到次哦按。而 fsync 操作本身是非常『昂贵』的(消耗较多的 I/O 资源,响应较慢),如果每次事物提交都单独做 fsync 操作,那么这里
将是系统 TPS 的一个瓶颈,所以就有了 Group Commit 的概念。 MySQL 5.0 后,处于分布式架构的考虑,为了保证 InnoDB 内部 Commit
和 MySQL 日志的顺序一致,InnoDB 被迫放弃支持 Group Commit。之后,就一直没有好的解决方案了。直到出现 MariaDB,才比较完美的解决
了这个问题。
3)迁移到其它数据库。
如开源的 Post供热SQL 和商业的 Oracle。 与 Oracle 和 PostgreSQL 相比, MySQL 属于线程模式,并且采用了插件引擎的架构。这种实现
的确有自己的优势:轻巧快速、系统资源消耗小、支持更多并发连接,但进程模式能更充分的应用 CPU 资源,在应付复杂业务查询上更有优势。比如,
在常规优化的前提下,Oracle 的但别性能瓶颈经验值在 2 亿数据量的级别,远远优于 MySQL。 不仅如此,在关联查询和内置函数等功能上,
Oracle 都是完胜 MySQL 数据库的。 再比如,PostgreSQL 数据库相比 MySQL,拥有更强大的查询优化器,不会频繁重建索引,支持物化视图等
优势。当然,迁移到其他数据库还要看应用的类型,比如是偏向 OLTP( On-Line Transaction Processing,联机事物处理)的应用还是偏向
OLAP(On-Line Analytical Processing,联机分析处理)应用。
4)对数据库进行分区、分表,减少单表体积。
5)使用NoSQL 等辅助解决方案,如 Memcached、Redis。
6)使用中间件做数据拆分和分布式部署,这方面的典型案例有阿里巴巴对外开源的数据库中间件 Cobar。
7)使用数据库连接池技术。
在第 3 点,我们讲过,MySQL 是线程模式,可以支持更多的并发连接数。MySQL 能支持远比 Oracle 和 PostgreSQL 更多的连接。所以 Oracle
和 PostgreSQL 应用中通常用数据库连接池技术来复用连接。那么 MySQL 为什么还需要用这些数据库应用中常见的数据库连接池技术呢? 原因在于
MySQL 的所机制还不够完善,同时程序中的一些问题都有可能导致 MySQL 数据库连接阻塞,在并发大的情况下,就会浪费很多连接资源和反复连接
的消耗。使用数据库连接池,让连接进行排队和复用,一定程度上可以缓解高并发下的连接压力。

MySQL 瓶颈是真实存在的,但是不少大型互联网公司仍然在使用 MySQL,并且能使用的很好,这一方面是因为这些公司的技术实力足以对 MySQL 进行二次开发和改进,另一方面则得益于其成熟的架构。所以,一个工具能不能用好,人的因素占很大的比重。

MySQL 瓶颈及应对措施的更多相关文章

  1. 大并发大数量中的MYSQL瓶颈与NOSQL介绍

    NoSQL在2010年风生水起,大大小小的Web站点在追求高性能高可靠性方面,不由自主都选择了NoSQL技术作为优先考虑的方面.今年伊始,InfoQ中文站有幸邀请到凤凰网的孙立先生,为大家分享他之于N ...

  2. MYSQL瓶颈

    一般来说, 在使用的时候 性能从某个数值开始.突然大大下降,说明就到了瓶颈期. mysql 瓶颈有2种,一种是 cpu瓶颈  一种是 io瓶颈.cpu瓶颈多是由io引起. 而io可以通过  show ...

  3. 手机浏览网页或打开App时莫名弹出支付宝领红包界面的原因及应对措施

    自从支付宝推出扫码领红包活动后,这种模式独特的赏金机制,短时间内吸引了大量的关注,但是随之也产生了很多的问题,比由于如在赏金的驱动下,微信群里铺天盖地的红包口令,朋友圈里各式各样的领红包二维码图片, ...

  4. Android手机上Audio DSP频率低 memory小的应对措施

    我在前面的文章(Android智能手机上的音频浅析)中说过Android手机上有一块专门用于音频处理的DSP,它的特点是频率低(一般几百MHZ).内部memory小(通常不超过100k word).要 ...

  5. Linux安全之SYN攻击原理及其应对措施

    TCP自从1974年被发明出来之后,历经30多年发展,目前成为最重要的互联网基础协议,但TCP协议中也存在一些缺陷. SYN攻击就是利用TCP协议的缺陷,来导致系统服务停止正常的响应. SYN攻击原理 ...

  6. K8s爆严重安全漏洞?有何应对措施与建议

    Kubernetes最近爆出严重安全漏洞,影响几乎目前所有的版本.实际影响究竟多大?老版本用户是否必须升级?以下是华为云容器服务团队对该漏洞的分析解读. Kubernetes爆出的严重安全漏洞: 攻击 ...

  7. XSS (跨站脚本攻击) 的原理分析,测试 && 应对措施

    1 1 1 XSS (跨站脚本攻击) 的原理分析,测试 1 demo: <!DOCTYPE html> <html lang="en"> <head& ...

  8. 全球性WannaCry蠕虫勒索病毒感染前后应对措施

    前言:针对WannaCrypt勒索病毒的讨论和技术文章是铺天盖地,大量的技术流派,安全厂家等纷纷献计献策,有安全厂家开发各种安全工具,对安全生态来说是一个好事,但对个人未必就是好事,我们国家很多用户是 ...

  9. Linux中OBS在Wayland环境下黑屏只显示鼠标的应对措施

    本文写于2018-02-10.截至到此文完成时,没有已知的方法可以让OBS在Wayland环境下正常工作. 解决方法 放弃使用Wayland,改用X Window 在Wanyland上录制屏幕,可以使 ...

随机推荐

  1. python独角兽 Flask + Gunicorn

    1.构建程序运行所需的虚拟环境 安装Miniconda 创建虚拟环境 添加程序运行依赖包 添加Gunicorn依赖 方式一:最简单的使用 easy_install 安装或者更新 方式二:下载源码安装 ...

  2. Win10取消密码

       

  3. kmp算法中的nextval实例解释

    求nextval数组值有两种方法,一种是不依赖next数组值直接用观察法求得,一种方法是根据next数组值进行推理,两种方法均可使用,视更喜欢哪种方法而定. 本文主要分析nextval数组值的第二种方 ...

  4. mysql数据库索引相关

    一 介绍 什么是索引? 索引在MySQL中也叫做“键”,是存储引擎用于快速找到记录的一种数据结构.索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对于性能的影响愈发重要.索引优化应该是 ...

  5. jQuery的noConflict以及插件扩展

    一.noConflict函数 JavaScript有很多插件,如果jQuery对象的$与其他插件冲突,我们可以使用noConflict()方法去掉$或者使用其他的符号代替 注:noConflict() ...

  6. jQuery trigger()以及注意事项

    trigger() 方法触发被选元素的指定事件类型.例如: $('#pcId').trigger("change") ;//触发id为“pcId”的select的 change事件 ...

  7. phpstorm 常用指令

    先选中移动内容 块向右移动:Tab键 块向左移动:Shift + Tab键 ctrl+/行注释ctrl+shift+/块注释 ctrl+g跳转行 alt + 上/下 键实现在类中的方法切换ctrl + ...

  8. [NLP] TextCNN模型原理和实现

    1. 模型原理 1.1 论文 Yoon Kim在论文(2014 EMNLP) Convolutional Neural Networks for Sentence Classification提出Te ...

  9. MAC中安卓开发环境的下载

    今天终于为我的Macbook Pro Retina搭建好了Android开发环境,几经折磨,差点放弃了: 总结如下:1.最好选择ADT Bundle,这里面已经集成好了Eclipse.ADT.Andr ...

  10. magento首页点击任何产品都出现404错误的问题方法

    很简单,只要在其他项目上的根目录上复制一个.htaccess文件到项目跟目录下就可以 了,其实就是是设置伪静态: