MySQL数据库性能优化

MySQL数据库性能取决于几个因素,例如表,查询和配置设置。这些软件构造导致在硬件级别执行CPU和I / O操作,必须将这些操作最小化并使其尽可能高效。在研究数据库性能时,首先要学习软件方面的高级规则和准则,并使用时间来衡量性能。成为专家后,您将了解有关内部情况的更多信息,并开始测量诸如CPU周期和I / O操作之类的东西。

常规用户旨在从其现有的软件和硬件配置中获得最佳的数据库性能。高级用户寻找机会改进MySQL软件本身,或者开发自己的存储引擎和硬件设备以扩展MySQL生态系统。

在数据库级别进行优化

在数据库级别进行优化,使数据库应用程序快速运行的最重要因素:

数据表的结构是否正确?特别是,这些列是否具有正确的数据类型?执行频繁更新的数据表具有很少的列,而分析大量数据的应用程序通常具有很少的表和很多列。

数据表列是否使用了正确的索引以提高查询效率?

每个表是否使用了适当的存储引擎,并利用了每个存储引擎的优势和功能?

每个表是否使用适当的行格式吗?该选择取决于表使用的存储引擎。压缩表使用较少的磁盘空间,因此需要较少的磁盘I / O来读取和写入数据。压缩表适用于带有InnoDB表的所有工作负载以及只读 MyISAM表。

应用程序是否使用合适的锁策略?例如通过在可能的情况下允许共享访问,以便数据库操作可以同时运行,并在适当的时候请求独占访问,以使关键操作获得最高优先级。

用于缓存的内存大小是否正确?足够大的内存以容纳经常访问的数据,但又不能太大以至于它们会使物理内存过载。要配置的主要内存区域是InnoDB缓冲池,MyISAM键高速缓存和MySQL查询高速缓存。

在硬件级别进行优化

随着数据库变得越来越繁忙,任何数据库应用程序最终都会达到硬件极限。DBA必须评估是否有可能调整应用程序或重新配置服务器以避免这些瓶颈,或者是否需要更多的硬件资源。

系统瓶颈通常来自以下项:

磁盘搜寻。磁盘查找数据需要花费时间。对于磁盘操作的平均时间通常小于10毫秒,因此理论上我们可以执行100次搜索。这段时间随着新磁盘的使用而缓慢改善,并且很难为单个表进行优化。优化查询时间的方法是将数据分发到多个磁盘上。

磁盘读写。当磁盘位于正确的位置时,我们需要读取或写入数据。一个磁盘至少可提供10–20MB / s的吞吐量。与查找相比,优化起来更容易,因为您可以从多个磁盘并行读取。

CPU周期。当数据位于主存储器中时,我们必须对其进行处理以获得结果。与内存量相比,拥有较大的表是最常见的限制因素。

内存带宽。当CPU需要的数据超出CPU缓存的容量时,主内存带宽将成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但是要意识到这一点。