数据库性能简介

时间:2022-09-12 07:34:05

下文翻译自:https://dev.mysql.com/doc/refman/5.7/en/optimize-overview.html

  数据库的性能取决于数据库级别的几个因素:如表,查询,配置设置。这种软件构造导致在硬件级的CPU和I/O操作必须最小话并且高效。在处理数据库性能时,首先需要学习软件端的高级规则和指南,然后使用wall-clock 来衡量性能。

  Tipical 用户指在通过现有的软件和硬件配置获取最佳的性能,Advanced 用户则寻找改进Mysql软件本身的机会,或者自己开发存储引擎和硬件设备来扩展MYSQL的生态体系
数据库级别的优化

  使数据库查询快的最重要的因素在于其开始设计阶段:

  1、表的结构是否合理?特别需要指出的是,列在表中是否使用正确的类型?例如:经常需要进行更新的表需要设计成多表少列,而需要大量分析的表需要设计成少表多列。

  2、是否使用索引来让查询更加高效?

  3、是否为每个表选择适当的存储引擎,并利用存储引用的优势和功能?需要强调的是:事务存储引擎(innodb,myisam:非事务)的选择对于性能和扩展性是非常重要的

  4、每张表是否使用正确的行格式,这个行格式还和存储引擎有关。强调的是压缩表使用较少的磁盘空间,因此使用较少的磁盘I/O来读取和写入数据,压缩可用于innodb的表和只读的myisam表

  5、应用程序是否使用了正确的锁策略?比如,在可能的情况下,通过允许数据共享的方式,以便数据库可以并发运行,并在适当的情况下独立请求,以便关键操作获得最高的优先级。同样,存储引擎的选择是很重要的,Innodb存储引擎可以处理大多的锁问题,无需要调用程序的参与,在数据库中实现更好的并发性,并减少参与测试和代码调试。

  6、用于缓存的所有内存区域是否使用正确?也就是说,需要足够大的内存来容纳经常访问的数据,但这个内存也不能超过物理内存并导致分页。要配置的内存区域主要有:InnoDB缓存池,myisam密钥缓存和mysql查询缓存。

硬件级别的优化

  随着数据库变得越来越繁忙,任何数据库应用最终都会遇到硬件瓶颈。DBA必须评估是否可以重新配置来避免这种瓶颈,或是否需要更多的硬件资源。系统的硬件瓶颈通常来自如下几方面:

  1、磁盘搜索,磁盘找到一条数据需要花费时间。对于现代的磁盘,平均时间通常低于10ms,因此理论上一秒钟可以寻找100次。使用磁盘来进行优化会很缓慢并且很难针对单个表进行优化,优化寻道时间的方法是将数据分布到多个磁盘上。

  2、磁盘读写,当磁盘在正确的位置时,我们需要读写数据。对于现代的磁盘,一个磁盘通常可以提供20M/s的吞吐量,这比查找更容易去优化,可以通过多个磁盘并行来读取

  3、CPU周期,当数据存储在内存中,我们需要去处理并且获取结果。内存大小相比大表的数据量,是最常见的限制因素,使用小表,速度通常不是问题。

  4、内存带宽,当cpu可以缓存更多的数据的时候,内存带宽就会成为瓶颈,这个对于大多数系统来说并不常见,但需要考虑。