Skip to main content

1.优化概述

概述

数据库性能取决于数据库级别的多个因素,例如表、查询和配置设置。 这些软件构造会导致硬件级别的 CPU 和 I/O 操作,必须最大限度地减少这些操作并使其尽可能高效。

当研究数据库性能时,首先要学习软件方面的高级规则和指南,并通过时间来测量性能。

当成为专家时,会更多地了解内部发生的情况,并开始测量 CPU 周期和 I/O 操作等内容。

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

数据库级别优化

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

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

  • 是否使用了正确的索引来提高查询效率?

  • 您是否为每个表使用了适当的存储引擎,并利用了您使用的每个存储引擎的优势和特性?特别是,选择诸如事务性存储引擎 InnoDB或诸如此类的非事务性存储引擎 MyISAM 对于性能和可扩展性可能非常重要。

    提示: InnoDB是新表的默认存储引擎。在实践中,高级 InnoDB性能特性意味着 InnoDB表通常优于更简单的 MyISAM表,特别是对于繁忙的数据库。

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

  • 应用程序是否使用了适当的 锁定策略?例如,在可能的情况下允许共享访问,以便数据库操作可以并发运行,并在适当的时候请求独占访问,以便关键操作获得最高优先级。同样,存储引擎的选择也很重要。存储 InnoDB引擎无需参与即可处理大多数锁定问题,从而实现数据库中更好的并发性并减少代码的实验和调整量。

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

硬件层面的优化

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

  • 磁盘寻道。磁盘找到一条数据需要时间。对于现代磁盘,平均时间通常低于 10 毫秒,因此理论上每秒可以执行大约 100 次搜索。使用新磁盘时,时间改善缓慢,并且很难针对单个表进行优化。优化寻道时间的方法是将数据分布到多个磁盘上。
  • 磁盘读写。当磁盘处于正确的位置时,就需要读取或写入数据。对于现代磁盘,一个磁盘至少可提供 10–20MB/s 的吞吐量。这比查找更容易优化,因为可以从多个磁盘并行读取。
  • CPU 周期。当数据在主存中时,必须对其进行处理才能得到结果。与内存量相比,拥有较大的表是最常见的限制因素。但对于小表,速度通常不是问题。
  • 内存带宽。当 CPU 需要的数据量超出了 CPU 缓存的容量时,主存带宽就会成为瓶颈。对于大多数系统来说,这是一个不常见的瓶颈,但需要注意。