快速提高MySQL可扩展性的五大绝招

在可扩展性方面,客户的要求变得愈来愈多,功能列表上常常会出现20条、50条甚至多达100多条要求,但总的来讲,咱们能够把它们缩短为五个大 类,经过五条途径来解决可扩展性问题:html

1. 调整查询操做数据库

对查询进行优化可以让你付出最少的精力就获得最多的成果。将查询功能完善的发挥出来,达到业务需求,不会被过多的流量和太重的载荷压倒。这就是为什 么咱们常常看见客户碰到的麻烦愈来愈多,随着他们网站的访问量愈来愈大,可扩展性的挑战也变得愈来愈严重,这就是问题的所在。对网站角落里那些不经常使用的页 面作查询优化是并没必要要的,那些页面并不会收到真实世界的流量。根据反映对网络应用作必定的调整是很广泛的作法,并且效果很好。缓存

查询优化须要启用缓慢查询日志而且不断观察。使用mk-query-digest这个Maatkit套件中的强大工具来分析日志,并且要肯定设置了 log_queries_not_using_indexes标签。一旦你发现某个查询严重占用资源,那就要优化它。使用EXPLAIN解释机制,使用 profiler,观察索引的使用状况,建立失踪的索引,理解它是怎么进行添加和排序的。服务器

2.使用Master-Master复制网络

Master-Master的active-passive复制模式,或者称为循环复制,不只能带来高可用性,也可以带来高度的可扩展性。这是由于 你可以即刻给你的应用分配到一块只读的从属盘。许多网络应用都按照80/20的规律来分割,80%的活动用来进行读取或SELECT,剩下的分配给 INSERT和UPDATE。配置你的应用或者进行从新架构,把读取须要的流量发送到从盘,这样作是可行的,这种类型的横向可扩展能力能够进一步延伸,在 必要时可以附加更多块只读从盘。架构

3. 使用存储工具

这听起来是很基础的东西,也很直接,可是常常会被忽视,你至少应该确认设置了这些:性能

  • innodb_buffer_pool_size
  • key_buffer_size (MyISAM索引缓存)
  • query_cache_size – 使用大型SMP时须要当心
  • thread_cache & table_cache
  • innodb_log_file_size & innodb_log_buffer_size
  • sort_buffer_size, join_buffer_size, read_buffer_size, read_rnd_buffer_size
  • tmp_table_size & max_heap_table_size

4. 磁盘读取的RAID优化

你的数据库下面是什么?不知道吗,请找出来。你是在用RAID 5吗?这对于性能来讲但是一个巨大的阻碍。RAID5的插入和更新操做速度很慢,并且若是你丢失了一块硬盘,RAID 5在重建时几乎无能为力。RAID 5实在是太慢了,那么应该用什么代替它呢?用RAID 10作镜像和分段,这就能够充分利用你的服务器或机箱里的全部硬盘了。即便你的内存可以容纳下整个数据库,依然须要对硬盘进行许多读取操做。为何呢?由于好比排序操做须要 从新安排行列,群组和联接等等也同样,还有添加交易日志等等这些都是磁盘I/O操做。网站

5. 调整Key参数

另外,有些附加的参数也能够用来提升性能:

innodb_flush_log_at_trx_commit=2

它能够极大的提高insert和update的速度,只是在清除innodb日志缓冲区时有点偷懒。你能够对它多作些研究,但大多数状况下是很是值 得推荐的。

innodb_file_per_table

innodb开发就像Oracle,存储方面使用的是tablespace模式。显然内核开发者们作的并不完善,由于使用单独tablespace 的默认设置就会出现性能瓶颈。这个参数设置能够帮助innodb为每一个表建立tablespace和数据文件,就像MyISAM所作的同样。

相关文章
相关标签/搜索