MySQL™ 参考手册(优化概述)

优化概述

数据库性能取决于数据库级别的几个因素,好比表、查询和配置设置,这些软件构造致使了硬件级别的CPU和I/O操做,你必须将其最小化并尽量提升效率。在研究数据库性能时,首先要学习软件方面的高级规则和指导原则,并使用壁钟时间测量性能。数据库

典型用户的目标是从现有的软件和硬件配置中得到最佳的数据库性能,高级用户寻找机会来改进MySQL软件自己,或者开发本身的存储引擎和硬件设备来扩展MySQL生态系统。缓存

在数据库级进行优化

使数据库应用程序快速运行的最重要因素是它的基本设计:服务器

  • 表的结构是否正确?特别是,列是否具备正确的数据类型,每一个表是否具备适合工做类型的列?例如,执行频繁更新的应用程序经常有不少表只有不多的列,而分析大量数据的应用程序一般只有不多的表有不少列。
  • 是否有适当的索引使查询高效?
  • 你是否为每一个表使用了适当的存储引擎,并利用了所使用的每一个存储引擎的优势和特性?特别是,选择事务性存储引擎(如InnoDB)或非事务性存储引擎(如MyISAM)对性能和可伸缩性很是重要。并发

    InnoDB是建立新表的默认存储引擎,在实践中,先进的 InnoDB性能特性意味着 InnoDB表一般比简单的 MyISAM表表现得更好,特别是对于繁忙的数据库。
  • 每一个表都使用适当的行格式吗?这种选择还取决于表使用的存储引擎,特别是,压缩表使用更少的磁盘空间,所以读写数据所需的磁盘I/O更少,压缩适用于全部使用InnoDB表的工做负载,也适用于只读MyISAM表。
  • 应用程序是否使用适当的锁定策略?例如,在可能的状况下容许共享访问,以便数据库操做能够并发运行;在适当的状况下请求独占访问,以便关键操做得到高优先级,一样,存储引擎的选择也很重要。InnoDB存储引擎能够在不须要你参与的状况下处理大多数锁定问题,从而提升数据库的并发性,减小代码的实验和调优量。
  • 全部用于缓存大小的内存区域都正确吗?也就是说,大到足以容纳频繁访问的数据,但又不会大到使物理内存过载并致使分页,要配置的主要内存区域是InnoDB缓冲池和MyISAM键缓存。

在硬件级别进行优化

随着数据库变得愈来愈忙,任何数据库应用程序最终都会遇到硬件限制,DBA必须评估是否能够调优应用程序或从新配置服务器以免这些瓶颈,或者是否须要更多的硬件资源,系统瓶颈一般来自如下来源:性能

  • 磁盘查找,磁盘须要时间才能找到一段数据,对于现代磁盘,这一过程的平均时间一般低于10ms,因此理论上咱们能够每秒进行100次搜索。对于新磁盘,这个时间提升缓慢,而且很难对单个表进行优化,优化查找时间的方法是将数据分布到多个磁盘上。
  • 磁盘读写,当磁盘处于正确的位置时,咱们须要读取或写入数据。对于现代磁盘,一个磁盘至少能够提供10-20MB/s的吞吐量,这比查找更容易优化,由于你能够从多个磁盘并行读取。
  • CPU周期,当数据在主存时,咱们必须处理它以获得咱们的结果,与内存量相比,拥有较大的表是最多见的限制因素,可是对于小表,速度一般不是问题。
  • 内存带宽,当CPU须要超过CPU缓存容量的数据时,主内存带宽就会成为瓶颈,对于大多数系统来讲,这是一个不常见的瓶颈,可是须要注意。

平衡可移植性和性能

要在可移植MySQL程序中使用面向性能的SQL扩展,能够在/*! */注释分隔符内的语句中封装特定于MySQL的关键字,其余SQL服务器忽略已注释的关键字。学习

相关文章
相关标签/搜索