当前位置: 首页 > 后端技术 > Java

如何优化数据库性能?

时间:2023-04-01 15:42:19 Java

数据库性能优化的目标是充分利用系统资源,最大限度地减少查询的响应时间。这些资源的最佳利用包括最小化网络流量、磁盘I/O和CPU时间。只有了解数据的逻辑和物理结构、系统上使用的应用程序以及数据库的冲突使用如何影响性能,才能实现此目标。事实上,数据库性能优化是一个系统工程,需要运用系统的分析方法,从硬件、软件、应用场景等多个相关维度进行深入的分析、评估和优化。在开发阶段、部署阶段、运行阶段寻找性能问题的瓶颈和解决方案。本文精选了HeapDump性能社区中与数据库性能优化相关的8篇文章。这些文章不仅包括影响数据库性能的因素、数据库性能评价标准和优化方法,还介绍了一些数据库设计原则和编程技巧。还记录了一些或大或小的实战案例,帮助您快速了解数据库性能优化,掌握一些实用技巧。1.TiDBTPS提升1000倍带你踏上性能优化之旅作者:TiDB_Robot作者介绍:TiDB是一个开源的NewSQL数据库,支持混合事务和分析处理(HTAP)工作负载。兼容MySQL,可提供水平扩展性、强一致性和高可用性。它主要由PingCAP公司开发和支持,并在Apache2.0下获得许可。TiDB正式入驻HeapDump性能社区,后续会分享更多数据库性能优化相关的优质文章。文章链接:https://heapdump.cn/article/3021827精彩介绍:性能优化的核心就一句话,用户响应时间在哪里?之所以性能优化难,是因为为了定位用户响应时间在各个模块的分布,需要对系统的各个组成部分进行测量和分析,从底层硬件、CPU、IO、网络到上层应用体系结构,需要涉及应用程序代码和数据库方法之间的交互。本文第一部分介绍性能优化的一般方法,第二部分讲一个实际案例。用户响应时间性能优化中的第一个概念是用户响应时间。用户响应时间是用户在使用业务系统时发起一个请求,这个请求到返回所消耗的总时间就是用户响应时间。典型的用户响应时间分布如下:从时序图来看,一个用户响应时间可能包括:1.用户请求到达应用服务器的网络时间2.应用服务器自身的业务逻辑处理时间3.应用服务器和数据库服务器两者交互消耗的网络时间4.数据库多次处理SQL的时间5.应用服务器返回用户数据的网络时间纵观整个链路,会涉及到网络、应用服务器、数据库等几个重要的组成部分。只要知道用户响应时间在各个模块的分布情况,就可以定位瓶颈,进行有针对性的优化。现实中很难定位性能瓶颈。因为绝大多数应用并没有部署APM等工具,所以可以在整个链路上跟踪一个应用请求的耗时。大多数场景的性能优化工作都是在没有全局时间分布的情况下进行的。我们推荐一种靠谱的性能优化方法:基于数据库时间的性能优化。数据库时间数据库时间是数据库在单位时间内提供的服务时间。将数据库时间与应用程序的总用户响应时间进行比较,可以确定应用系统的瓶颈是否在数据库中。对于一个应用系统,在ΔT时间内提供的总服务时间可以用平均服务TPS乘以平均响应时间来计算。数据库时间在ΔT时间内有很多算法:1、平均TPSX平均事务延迟XΔT2。平均QPSX平均延迟XΔT3。平均活跃连接数XΔT,下图中数据库活跃连接图的面积为数据库时间是基于数据库时间和用户响应时间的比较。首先从全局的角度判断瓶颈是在数据库内部还是数据库外部,然后进行有针对性的排查和优化。数据库时间除以用户总响应时间:接近于0,数据库时间占总服务时间的比例很小,说明瓶颈不在数据库。趋近于1,说明整个应用系统的瓶颈在数据库。工程师通过减少数据库时间来优化性能,例如优化SQL执行计划和解决数据库中的热点争用。2.5G时代,如何彻底搞定海量数据库的设计与实践作者:孙轩|奈学教育作者简介:孙轩,现任奈学教育科技创始人兼CEO,毕业于浙江大学,曾任百度高级研发工程师,原58集团技术委员会主席/高级系统架构师转任公司技术委员会主席/首席架构师/大中后台技术负责人。江湖人称“萱姐”,出过《百万年薪架构师修炼之路》本书。文章链接:https://heapdump.cn/article/761671精彩导读:5G时代,业务数据越来越丰富。业务使用MySQL数据库作为后台存储,存储引擎使用InnoDB。会带来哪些挑战?如何结合公司业务特点和MySQL数据库特点,制定出多项数据库使用规范,供一线RD设计服务时参考和执行。本文介绍了MySQL相关的关键基础设施,结合实际案例介绍了表和索引的设计技巧,并对规范中的关键内容进行了详细解读。总结:1、自增主键性能不一定高,需要结合实际业务场景分析;2.大部分场景数据类型尽量使用简单类型;3、索引越多越好,索引太多会导致索引文件过大;4.如果在索引文件中可以找到要查询的数据,则存储引擎不会搜索主键索引来访问实际记录。3.Mysql的sql优化方法作者:一只虚构的猫文章链接:https://heapdump.cn/article/2994366精彩介绍:本文总结了一些对mysql性能有利的编程技巧。1.选择最合适的字段属性2.尽量将字段设置为NOTNULL3.使用连接(JOIN)代替子查询(Sub-Queries)4.使用联合(UNION)代替手动创建的临时表5.事务6、锁表7、使用外键8、使用索引9、优化查询语句4.一些比较好的Redis性能优化思路总结作者:刘思宁文章链接:https://heapdump.cn/article/2871512某网服务系统,Redis的性能可能比MySQL等硬盘数据库的性能更重要。例如,微博将热门微博和最新的用户关系存储在Redis中,大量查询命中Redis而不是MySQL。那么,我们可以为Redis服务做哪些性能优化呢?换句话说,应该避免哪些性能浪费?那么,我们可以为Redis服务做哪些性能优化呢?换句话说,应该避免哪些性能浪费?在讨论优化之前,我们需要知道Redis服务本身有一些特点,比如单线程运行。除非修改Redis的源代码,否则这些特性是我们思考性能优化的基础。首先,Redis使用操作系统提供的虚拟内存来存储数据。其次,Redis支持持久化,可以将数据保存在硬盘上。第三,Redis以key-value的方式读写,value可以包含很多不同类型的数据;此外,数据类型的底层存储为不同的结构。最后,上面介绍中没有提到的是,Redis大部分时间是单线程运行的(single-threaded),即同时只占用一个CPU,只运行一条指令,并行读取和写作不存在。的。针对这些特点,归纳出Redis性能优化的几个切入点:优化网络延迟;警惕执行时间长的操作;优化数据结构并使用正确的算法;考虑操作系统和硬件是否影响性能;考虑持久化带来的开销;采用分布式架构——读写分离,数据分片。5、千万级数据表索引选择错误导致的线上慢查询事故由此造成的数据库故障,将影响线上业务。经过排查,确定原因是“执行SQL时,MySQL优化器选择了错误的索引(不应该说是‘错误’,而是实际执行时间更长的索引)”。调研过程中查阅了很多资料,也学习了MySQL优化器选择索引的基本原理,分享本文的解题思路。我对MySQL的了解是有限的。如有错误,欢迎理性讨论和指正。在这次事故中,我们也充分看出了深入理解MySQL运行原理的重要性,这是遇到问题时能够独立解决问题的关键。6.MySQL全崩盘21(番外):深夜优化亿级数据分页的奇葩体验查询数据的接口被疯狂无理调用。这个操作直接导致线上的MySql集群变慢。通过分析慢查询日志,我们发现,其实对于我们的MySQL查询语句来说,整体效率还是不错的。有一些联表查询优化,简单的查询内容也有,关键条件字段和排序字段要有索引。都有了,问题是他一页一页的找。页码越靠后,扫描的数据越多,速度越慢。这个查询的慢其实是因为limit后面的offset比较大造成的。比如像上面的limit2000000,25,这相当于从数据库中扫描出2000025条数据,然后丢弃之前的20000000条数据,将剩下的25条数据返回给用户,这显然是不合理的.《高性能MySQL》Chapter6:Queryperformanceoptimization,已经解释了这个问题:分页操作通常使用limit加offset,以及合适的orderby子句来实现。但这有一个通病:当偏移量很大时,会导致MySQL扫描很多不需要的行,然后丢弃。7、高负载下Redis中断优化作者:小熊春林作者介绍:小熊,2014年加入美团点评,主要从事MySQL、Redis数据库运维、高可用及相关运维平台建设。春林于2017年加入美团点评,毕业后一直深耕运维线。从网络工程师到OracleDBA再到MySQLDBA。现在美达主要负责Redis运维开发和优化。文章链接:https://heapdump.cn/article/2842148精彩攻略:从2017年开始,随着Redis产品的用户越来越多,接入服务越来越多,加上美团点评Memcache和Redis两套缓存集成,Redis服务器整体请求量从年初的每天数百亿次访问量增长到高峰期的万亿次访问量,无论是对运维还是架构都带来了极大的挑战团队。由于请求量的增加,原本稳定的环境也带来了很多不稳定的因素。其中,网卡的丢包问题一直困扰着我们。起初,线上的部分Redis节点还在使用千兆网卡的旧服务器,缓存服务往往需要承载极高的查询量,需要毫秒级的响应速度。于是,千兆网卡很快就成了瓶颈。整改后,我们将千兆网卡服务器更换为10G网卡服务器。本以为可以高枕无忧了,没想到在业务高峰期,机器也出现了丢包问题,网卡的带宽使用率远远达不到。瓶颈。8.记一次慢SQL优化作者:艾小贤作者简介:艾小贤,前阿里P7技术专家。他在开发、产品和运营方面工作了11年。行业横跨互联网安全、电子商务、支付、金融、酒店、O2O等,热衷于分享各大厂商的面试经验、架构设计、中间件、算法、数据库等技术。微信公众号【艾小仙】拥有10万+粉丝,被各大技术社区转载推荐。文章链接:https://heapdump.cn/article/3058836精彩介绍:这是一道线上题。来自日志平台的SQL查询执行时间为11.146s,属于慢查询。在整体情况下,缓冲区大小、排序字段的数据长度、查询数据的条数等都会影响查询性能。分析了整个排序过程,指导的优化思路是尽量不要使用usingfilesort,尤其是排序的数据量比较大的时候,那么优化的方式就是尽量让查询到的数据已经排序好,这是合理的使用组合索引和覆盖索引。如果你有性能问题,找HeapDump性能社区