我们都知道,数据库的性能调整很重要,但也很难。只有数据库管理员仔细分析数据库运行过程中出现的各种性能问题,才能使数据库高效、稳定地运行。但是,数据库的性能调整是一个涉及多方面的系统工程,不能仅凭某个时间点的情况来判断数据库性能的好坏。DBA需要通过一个迭代的过程来做出有效的调整。这些都需要在大量实际工作中不断积累经验,才能更好的调优数据库。但是,调整也需要确定方向。今天我们就来探讨一下大家最需要了解的五大数据库性能指标。关键业务流程在我们的印象中,应用程序的关键业务可以提供真实的用户行为洞察——它们捕获实时性能数据并展示真实用户在交互时的用户体验。测量关键业务的性能涉及捕获事务的总体响应时间以及测量不同级别的响应时间。这些时间可以与满足您业务需求的基准进行比较。如果您只想衡量应用程序的一个方面,那么关键业务流程是最佳选择。虽然容器指标可以提供信息以帮助您确定何时自动缩放您的环境,但最终决定应用程序性能的是编排事务。无论你是什么规模的公司,作为一个编程猿,你最关心的应该是你的用户能否完成他们的关键业务流程。一旦定义了整个关键业务,性能就是整个应用程序生态系统的最佳衡量标准。我们需要将低于平均关键业务响应时间的事务设置为异常行为,以便我们更好地观察应用程序的性能,如下图所示。那么问题来了,重点业务的标准如何制定?这里有一个简单的方法供大家参考:假设关键业务在周三13:00-14:00是一个常见的高峰,那么选择这个时间段内的平均响应时间作为Standard,等到下周三同一时间段,然后将本周这个时间段内所有关键业务的平均响应时间与上周进行比较,得到一个平均值,以此类推。通过这种机制,应用程序可以随着时间的推移而发展,原始业务关键数据变得更有意义。关键业务测量是最能反映用户体验的测量,因此它们是要捕获的最重要指标之一。查询的性能可能要从一句比较绕口的句子说起:查询性能低下最明显的地方就是查询本身。这大概是每个程序员都会遇到的问题,它会导致SQL查询慢,返回数据的时间过长。那我们怎么解决呢?需要注意以下问题:1.选择的数据较多:如果查询返回的列过多,会导致选择行和检索数据变慢。最好的解决方案是列出所需的列而不是使用SELECT*。此外,在结果中列出所需的列可减少数据传输并提高性能。2、只通过索引访问数据:有时候,我们只访问表中的几个字段,字段内容很少。我们可以为这些字段创建一个组合索引,这样我们只需要访问索引就可以直接获取数据,一般索引占用的磁盘空间比表小很多,所以这种方式可以大大减少磁盘IO开销.3、优化SQL执行计划:SQL执行计划是关系型数据库的核心技术之一,代表了SQL执行过程中的数据访问算法。当业务需求越来越复杂,表数据量越来越大的时候,SQL也需要支持非常复杂的业务逻辑,但是SQL的性能有待提高。因此,一个优秀的关系型数据库需要支持复杂的SQL语法和更多的功能之外,还需要一个优秀的算法库来提升SQL的性能。多用户和查询之间的冲突数据库通常允许存在多个用户。多个用户同时活动难免会产生冲突。但是,这种情况在平时的工作中是无法避免的。我们如何解决这个问题?1.页/行锁定:当一个用户试图读取另一个用户正在修改的数据,或修改另一个用户正在读取的数据,或试图修改另一个事务试图修改的数据时,就会出现并发问题。这时候资源就会被锁定。可以锁定的资源在粒度上差别很大。从精细(行)到粗糙(数据库)。细粒度锁定允许更高的数据库并发性,因为用户可以在未锁定的某些行上执行查询。但是,SQLServer发出的每个锁都需要内存,因此数千个单独的行级锁也会影响SQLServer的性能。粗粒度锁降低并发性,同时消耗更少的资源。2、死锁:死锁是数据库性能的重量级杀手之一,但死锁是不同事务之间抢占数据资源造成的。死锁会消耗时间和资源。但是在大型数据库中,高并发造成的死锁是不可避免的,所以我们只能尽量少用。①以相同的顺序访问数据库资源②保持事务简短,尽量不要让一个事务过程过于复杂的读写操作。如果事务过于复杂,会占用更多的资源,增加处理时间,容易与其他事务发生冲突,增加死锁的概率。③尽量不要在事务中要求用户响应,比如在整个事务提交完成之前修改新的数据,这样会延长事务占用资源的时间,也会增加死锁的概率。④尽量减少数据库的并发量。⑤尽可能使用分区表和分区视图,将数据放在不同的磁盘和文件组中,分散对不同分区中存储的数据的访问,减少在表中放置锁导致的其他事务的长时间等待。⑥避免耗时长、关系表复杂的数据操作。⑦使用较低的隔离级别,使用较低的隔离级别比使用较高的隔离级别持有共享锁的时间更短。这减少了锁争用。3、为在线用户提供充足的资源:在读取大量数据或生成复杂的分析报告时,通常是批量操作。这些操作是资源密集型的,可能会影响在线用户的性能。解决这个问题,需要保证在线用户在低负载下运行,比如晚上;或者使用单独的数据库来处理和分析报告。硬件然而,并不是所有的数据库性能问题都来自于数据库本身。我们日常工作中还有一个常见的情况就是数据库的硬件出现了几个问题。这里我们简单介绍一下可能会出现的情况。毕竟现在已经有很多工具可以监控这些问题了。1、CPU不够或CPU速度太慢:更多的CPU可以分担服务器的负载,从而提高性能。2.慢速磁盘没有足够的IOPS:磁盘性能可以描述为每秒输入/输出操作数(IOPS),代表磁盘每秒的吞吐量。3.磁盘配置不当:数据库需要有效的磁盘访问,而磁盘配置不当会对性能产生相当大的影响。4.内存不足:物理内存有限或不好会影响数据库性能,可用内存越多,性能越好。NoSQL数据库NoSQL发展到今天,因其卓越的处理大规模数据和高并发的能力而变得极具吸引力。然而,NoSQL并不一定适用于所有情况,为什么呢?我们可以找出四个原因:1.复杂的数据库:NoSQL的支持者经常称赞它的简单、高效和速度,但所有这些特性都表现在数据库任务简单的时候。随着数据库变得越来越复杂,NoSQL开始崩溃。同时,与NoSQL的狂舞相比,SQL成熟,拥有行业标准的接口,所以每一个NoSQL都是独一无二的。2.灵活的模式设计:在以前的数据库模型中,程序员必须考虑他们需要的列来处理每行中所有潜在的可能性和数据项。使用NoSQL时,可以实现各种各样的字符串,这种灵活性使程序员可以快速提高应用程序的速度。但是,当有多个团队在同一个项目上工作,或者当一个新的开发团队接管一个项目时,这可能会成为一个问题。3.价格:NoSQL数据库通常比关系数据库更耗费资源。它们需要更多的内存和内存分配。因此,大多数托管公司不提供NoSQL,您必须使用VPS或专用服务器。另一方面,随着数据库需求的增加,硬件也必须扩展,单台大容量的服务器比小的服务器要贵得多。4、监控难:与成熟的SQL相比,NoSQL目前的监控可以说难度更大,路还长。
