Mysql 优化概述

       优化涉及多个级别的配置,调整和评估性能。根据您的工作角色(开发人员,DBA或两者的组合),您可以在单个SQL语句,整个应用程序,单个数据库服务器或多个网络数据库服务器的级别进行优化。有时,您可以主动并提前计划性能,而有时,您可能会在问题发生后对配置或代码问题进行故障排除。优化CPU和内存使用率也可以提高可伸缩性,从而使数据库能够处理更多负载而不会降低速度。

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

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

  • 在数据库级别进行优化

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

  1. 表的结构是否正确?特别是,这些列是否具有正确的数据类型,并且每个表是否都具有适用于工作类型的列?例如,执行频繁更新的应用程序通常具有许多表而具有很少的列,而分析大量数据的应用程序通常具有较少的表而具有很多列。
  2. 是否有正确的索引以提高查询效率?
  3. 您是否为每个表使用了适当的存储引擎,并利用了所使用的每个存储引擎的优势和功能?特别是,对于性能和可伸缩性而言,选择事务存储引擎(例如InnoDB)或非事务存储引擎(例如MyISAM)可能非常重要。                                               注意:InnoDB是新表的默认存储引擎。实际上,先进的InnoDB性能功能意味着InnoDB表通常优于简单的MyISAM表,尤其是对于繁忙的数据库。
  4. 每个表都使用适当的行格式吗?该选择还取决于表使用的存储引擎。特别是,压缩表使用较少的磁盘空间,因此需要较少的磁盘I / O来读写数据。压缩可用于具有InnoDB表的所有类型的工作负载以及只读的MyISAM表。
  5. 应用程序是否使用适当的锁定策略?例如,通过在可能的情况下允许共享访问,以便数据库操作可以同时运行,并在适当的时候请求独占访问,以使关键操作获得最高优先级。同样,存储引擎的选择很重要。 InnoDB存储引擎无需您的参与即可处理大多数锁定问题,从而提高了数据库的并发性,并减少了代码的试验和调整量。
  6. 所有用于缓存的内存区域大小都正确吗?也就是说,大到足以容纳频繁访问的数据,但又不会大到使物理内存过载而导致分页。要配置的主要内存区域是InnoDB缓冲池、MyISAM键缓存和MySQL查询缓存。
  • 在硬件级别进行优化

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

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

       要在可移植的MySQL程序中使用面向性能的SQL扩展,可以在/ *!中的语句中包装特定于MySQL的关键字。 * /注释分隔符。其他SQL Server忽略注释的关键字。

发布了50 篇原创文章 · 获赞 64 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/panjin72/article/details/100837625
今日推荐