`
天梯梦
  • 浏览: 13635153 次
  • 性别: Icon_minigender_2
  • 来自: 洛杉矶
社区版块
存档分类
最新评论

优化MySQL,还是使用缓存?

 
阅读更多

今天我想对一个Greenfield项目上可以采用的各种性能优化策略作个对比。换言之,该项目没有之前决策强加给它的各种约束限制,也还没有被优化过。

 

具体来说,我想比较的两种优化策略是优化MySQL和缓存。提前指出,这些优化是正交的,唯一让你选择其中一者而不是另一者的原因是他们都耗费了资源,即开发时间。

 

优化MySQL

优化MySQL时,一般会先查看发送给mysql的查询语句,然后运行explain命令。稍加审查后很常见的做法是增加索引或者对模式做一些调整。

 

优点

1、一个经过优化的查询对于所有使用应用的用户来说都是快速的。因为索引通过对数复杂度的速度来检索数据(又名分制,正如你搜索一个电话簿一样,逐 步缩小搜索范围),而且随着数据量的递增也能维持良好的性能。对一个未经索引化的查询的结果做缓存随着数据的增长有时候则可能会表现得更差。随着数据的增 长,那些未命中缓存的用户可能会得到很糟糕的体验,这样的应用是不可用的。

2、优化MySQL不需要担心缓存失效或者缓存数据过期的问题。

3、优化MySQL可以简化技术架构,在开发环境下复制和工作会更加容易。

 

缺点

1、有一些查询不能光通过索引得到性能上的改善,可能还需要改变模式,在某些情况下这对于一些应用可能会很麻烦。

2、有些模式的更改可能用于反规范化(数据备份)。尽管对于DBA来说,这是一项常用的技术,它需要所有权以确保所有的地方都是由应用程序更新,或需要安装触发器来保证这种变化。

3、一些优化手段可能是MySQL所特有的。也就是说,如果底层软件被移植到多个数据库上工作,那么很难确保除了增加索引外一些更复杂的优化技术可以通用。

 

使用缓存

这种优化需要人来分析应用的实际情况,然后将处理代价昂贵的部分从MySQL中剥离出来用第三方缓存替代,比如memcached或Redis。

 

优点

1、缓存对于一些MySql自身很难优化的查询来说会工作地很好,比如大规模的聚合或者分组的查询。

2、缓存对于提高系统的吞吐率来说可能是个不错的方案。比如对于多人同时访问应用时响应速度很慢的情况。

3、缓存可能更容易构建在另一个应用之上。比如:你的应用可能是另一个用MySQL存储数据的软件包的前端,而要对这个软件包做任何数据库方面的改动都非常难。

 

缺点

1、如果数据对外提供多种存取范式(例如,在不同的页面上用不同的形式展示),那么让缓存过期或者更新可能会很难,同时/或者可能需要容忍已过期的数据。一个可行的替代方案是设计一套更加精细的缓存机制,当然它也有缺点,即多次获取缓存会增加时延

2、缓存一个产生代价昂贵的对象对于那些未命中缓存的用户(见优化MySQL的优势#1)而言可能会产生潜在的性能差异。一些好的性能实践表明你应该尽量缩小用户之间的差异性,而不仅仅是平均化(缓存倾向于这么做)。

3、幼稚的缓存实现无力应对一些微妙的漏洞,比如雪崩效应。就在上周我帮助了一个人,他的数据库服务器被多个试图同时再生同样缓存内容的用户请求冲垮。正确的策略是引入一定级别的锁来将缓存再生的请求序列化。

 

总结

一般情况下,我会建议用户先对MySQL进行优化,因为这是我认为开始阶段最合适的解决方案。但长期来看,大部分应用都会有一些用例需要一定程度上同时实现以上这些方案。

 

 

关于作者: 高磊

分享到:
评论

相关推荐

    MYSQL优化-一篇很好的优化文章

    19. MYSQL缓存 20. MYSQL表高速缓存工作原理 21. MYSQL扩展/优化-提供更快的速度 22. MYSQL何时使用索引 23. MYSQL何时不使用索引 24. 学会使用EXPLAIN 25. 学会使用SHOW PROCESSLIST 26. 如何知晓MYSQL解决...

    mysql缓存优化

    mysql整体优化

    清空mysql 查询缓存的可行方法

    您可能感兴趣的文章:MySQL优化之缓存优化mysql的查询缓存说明使用Memcache缓存mysql数据库操作的原理和缓存过程浅析浅析MySQL内存的使用说明(全局缓存+线程缓存)MySQL高速缓存启动方法及参数详解(query_cache_...

    MySQL优化,启动mysql缓存机制

    不过,这样的话不能在MySQL的授权表中使用主机名了而只能用ip格式。  2,设置连接数,mysql默认的连接数是100,太少了。  [mysqld]下面添加  max_connections=512  3,开启缓存机制  skip-locking#取消...

    Mysql数据库优化详细大全

    19. MYSQL缓存 8 20. MYSQL表高速缓存工作原理 9 21. MYSQL扩展/优化-提供更快的速度 9 22. MYSQL何时使用索引 10 23. MYSQL何时不使用索引 10 24. 学会使用EXPLAIN 10 25. 学会使用SHOW PROCESSLIST 11 26. 如何...

    MySQL DBA教程:Mysql性能优化之缓存参数优化

    本文先从 MySQL 数据库IO相关参数(缓存参数)的角度来进行IO优化: 一、query_cache_size/query_cache_type (global) Query cache 作用于整个 MySQL Instance,主要用来缓存 MySQL 中的 ResultSet,也就是一条SQL...

    mysql优化/pdf

    mysql优化 # MySQL优化 MySQL是一种流行的开源关系型...可以使用MySQL自带的查询缓存或者使用外部缓存工具,如Memcached。 ## 6. 使用分区 分区可以将大型表分解成更小的、更易于管理和查询的部分。这可以提高查

    Mysql性能优化教程

    Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 优化实战范例 3 认识影响结果集 4 影响结果集的获取 4 影响结果集的解读 4 常见案例及优化思路 5 理解执行状态 7 常见...

    MySQL数据库的优化

    MySQL介绍、架构、什么优化、查询优化、索引使用、存储优化、数据库结构优化、硬件优化、MySQL缓存、MySQL服务器参数

    MySQL数据库优化

    一共48页,写的还是非常好。 MySQL数据库优化(一) 1 MySQL数据库优化(二) 5 MySQL数据库优化(三) 13...MySQL数据库优化(十):优化MySQL服务器 40 MySQL数据库优化(十一) 45 MySQL数据库优化(十二):磁盘 48

    mysql优化笔记.doc

     Mysql数据库的优化技术 对mysql优化时一个综合性的技术,主要包括 ...f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)

    mysql高级优化查询

    本书主要介绍了MYSQL的查询缓存原理,还有MYSQL的内部机制

    MySQL优化之缓存优化(续)

    MySQL 内部处处皆缓存,等什么时候看了MySQL的源码,再来详细的分析缓存的是如何利用的。这部分主要将各种显式的缓存优化: 查询缓存优化 结果集缓存 排序缓存 join 连接缓存 表缓存Cache 与表结构定义缓存...

    mysql修改最大连接数等优化mysql

    linux下mysql修改最大连接数、线程缓存数等优化mysql,减少mysql创建数

    Mysql数据库优化笔记(细节决定成败)

    对mysql优化时一个综合性的技术,主要包括 a: 表的设计合理化(符合3NF) ...f: 对mysql配置优化 [配置最大并发数my.ini, 调整缓存大小 ] g: mysql服务器硬件升级 h: 定时的去清除不需要的数据,定时进行碎片整理(MyISAM)

    MySQL数据库性能优化之缓存参数优化

    在平时被问及最多的问题就是关于MySQL数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能...本文先从MySQL数据库IO相关参数(缓存参数)的角度来看看可以通过哪些参数进行IO优化:Querycache作用于整个MySQ

    Mysql的性能优化

    Mysql 执行优化 2 认识数据索引 2 为什么使用数据索引能提高效率 2 如何理解数据索引的结构 2 如何理解影响结果集 3 理解执行状态 4 常见分析手段 4 分析流程 6 总结 7 Mysql 运维优化 9 存储引擎类型 9 内存使用...

    Mysql高级性能优化思维导图

    配置调优:优化MySQL的配置参数,包括缓存大小、连接数、并发线程等,以最大程度地利用系统资源和提高性能。 表分区和分片:对于大型数据库,考虑使用表分区和分片技术,将数据分散到多个物理存储上,提高查询和...

Global site tag (gtag.js) - Google Analytics