MySQL官方优化文档

MySQL官方优化文档:https://dev.mysql.com/doc/refman/5.7/en/optimization.html

数据库优化概述:

数据库性能取决于数据库级别的多个因素,例如表,查询和配置设置。这些软件构造导致硬件级别的CPU和I / O操作,您必须尽可能地最小化并尽可能高效。在处理数据库性能时,首先要学习软件方面的高级规则和指南,并使用挂钟时间来衡量性能。当您成为专家时,您将了解内部发生的更多信息,并开始测量诸如CPU周期和I / O操作之类的事情。

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

  • 在数据库级别进行优化

  • 在硬件级别进行优化

  • 平衡可移植性和性能

在数据库级别进行优化

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

  • 表格结构合理吗?特别是,列是否具有正确的数据类型,并且每个表是否具有适合工作类型的列?例如,执行频繁更新的应用程序通常具有许多具有少量列的表,而分析大量数据的应用程序通常具有很少列的表。

  • 是否有适当的 索引来提高查询效率?

  • 您是否为每个表使用适当的存储引擎,并利用您使用的每个存储引擎的优势和功能?特别是,事务性存储引擎(例如InnoDB 非 事务性存储引擎)的选择 MyISAM 对于性能和可伸缩性来说非常重要。

    注意

    InnoDB是新表的默认存储引擎。实际上,高级 InnoDB性能特征意味着 InnoDB表通常优于更简单的MyISAM表,尤其是对于繁忙的数据库。

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

  • 应用程序是否使用适当的 锁定策略?例如,通过允许可能的共享访问,以便数据库操作可以并发运行,并在适当时请求独占访问,以便关键操作成为最高优先级。同样,存储引擎的选择也很重要。该InnoDB存储引擎处理大部分锁定的问题,而不需要您的参与,允许在数据库更好的并发,减少试验和调整的金额,让您的代码。

  • 是否正确使用了用于缓存的所有内存区域?也就是说,足够大以容纳频繁访问的数据,但不能太大以至于它们会超载物理内存并导致分页。要配置的主要内存区域是InnoDB缓冲池,MyISAM密钥缓存和MySQL查询缓存。

在硬件级别进行优化

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

  • 磁盘寻求。磁盘需要一段时间才能找到一块数据。对于现代磁盘,平均时间通常低于10毫秒,因此我们理论上可以做到大约100次寻找。这个时间用新磁盘慢慢改善,并且很难针对单个表进行优化。优化寻道时间的方法是将数据分配到多个磁盘上。

  • 磁盘读写。当磁盘位于正确位置时,我们需要读取或写入数据。使用现代磁盘,一个磁盘可提供至少10-20MB / s的吞吐量。这比搜索更容易优化,因为您可以从多个磁盘并行读取。

  • CPU周期。当数据在主存储器中时,我们必须处理它以获得我们的结果。与内存量相比具有大表是最常见的限制因素。但是对于小桌子,速度通常不是问题。

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

平衡可移植性和性能

要在可移植的MySQL程序中使用面向性能的SQL扩展,您可以在/*! */注释分隔符的语句中包含特定于MySQL的关键字。其他SQL服务器忽略注释的关键字。有关编写注释的信息,请参见第9.6节“注释语法”。

你可能感兴趣的:(关系型数据库)