简单说说数据库优化

Posted 白鳝的洞穴

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了简单说说数据库优化相关的知识,希望对你有一定的参考价值。

在平常生活中,通常我们访问的百度,新浪,淘宝等超大型网站系统,为什么感觉如此的流畅,如此的愉悦,反过来我们企业内部的系统为什么在使用过程中那么痛苦?以前曾经听人抱怨,在公司系统做一项操作,出去抽一个烟回来,结果才可能出来。虽然听起来觉得像个笑话,不过这样的事情在我们企业里确确实实是存在的,这种系统被称为“抽烟系统”。还有一些系统被称为“削苹果系统”、“上茅房系统“等等,不一而足。正是这样的缓慢的系统在蚕食我们企业的效率,由此造成的企业资源浪费是十分巨大的。性能优化的主要作用就是来解决类似这样的问题。

那么什么是优化?打个比喻,如果一个人生病了,或者处于亚健康状态,这个时候需要专业的医护人员及专有设备进行诊断,出具诊断报告,然后对出现问题的病症进行治疗。医生是利用其专业知识对我们的人体进行优化,消除人体中的潜在隐患,让人这个复杂系统变得更为健康。同样的数据库优化是专业的技术人员结合专业的工具,对数据库系统进行全面的数据采集、诊断分析、找出问题所在,最后结合问题来进行调整实施,从而提升数据库系统的安全性、可靠性、并发处理能力、响应速度等。似乎这个定义与我们的以往的认知有所不同,因为在以往我们考虑优化仅仅考虑的是响应速度。实际上数据库优化的更深层次的工作是让数据库系统运行的更为流畅,不会因为某种瓶颈存在而引起负载无法争取下发到下层组件上,从而引起运行不稳定、处理能力不足、响应速度过慢或者可用性不足等问题。

从广义上说,数据库优化的目的是为了更稳定,更高效的运行RDBMS系统,为达到这个目标的一切工作,都属于数据库优化;从狭义上讲,数据库优化是调整吞吐量、响应时间和资源使用率之间的关系,使之达到一种适当的平衡。广义和狭义的定义并不矛盾,广义上的数据库优化是战略层面的工作,而狭义的数据库优化是战术层面的工作;广义上的优化重在关注优化的目标,而狭义上的定义主要侧重于实现目标的方法。

按照这种定义,一切有数据库系统建设、升级、运行的工作,都存在优化的工作需求,数据库优化工作基本上覆盖了数据库的生命周期,因此数据库优化应该面向“全生命周期优化”和“常态化优化”。在进行数据库优化工作的时候,我们也需要关注几个问题。

首先,优化的目的是让数据库系统运行的更为稳定、高效,因此优化的首要要点就是“稳”,绝对不能为了让系统运行的更高效而降低其稳定性、可靠性。优化工作应该提升系统的健壮性,提高运维的自动化程度,降低运维的难度,减少运维的成本。

其次,数据库优化需要改善用户的使用体验,让用户更好的使用信息系统,因此在优化过程中,就需要多考虑改善用户体验,而不是一味的从技术手段去做优化。把一个响应时间200毫秒的SQL优化到20毫秒,虽然提升了十倍的性能,但是对于最终用户体验来说,提升的感知度可能为0。而把一个需要一个小时跑完的报表优化到20分钟,对用户体验提升来说也一样是极低的,如果能进一步提升到5分钟,甚至1分钟,才能够产生真正的用户体验改善。另外一方面,我们一味的考虑如何提升数据库的效率,考虑提升响应时间的问题,而不去考虑优化措施对于数据库运行可靠性带来的负面影响,那么一个性能不错但是三天两头宕机的数据库肯定也不是客户所需要的。如果我们不能够很好的了解用户体验提升的本质问题,那么我们的优化工作可能就会事倍功半,从技术角度上看,我们获得了十分好的效果,但是从用户体验上看,我们的工作很难被用户认可。

第三,企业很需要通过数据库优化来降低企业信息化的建设投资,真正的帮助企业省钱。这个“省钱”二字的含义太过宽泛,因此怎样的省钱才是真正的省钱呢?这里有一个例子,大家可以一起来算算帐。如果我们要建一个系统,需要配置一台4路服务器,有三种方案,一种是配置较高的配置,使系统在未来的5年内不会存在任何运行瓶颈;第二种方案是先配置较低的配置,满足未来3年的需求,3年后再去逐步升级硬件,满足客户的需要;第三种方案是CPU配置较高的配置,支持未来5年的业务负载,内存可以少配置一点,等以后扩容。如果你是企业的IT主管,该如何来选择方案呢?传统的土豪大企业一般会选择第一种方案,而比较节约的人会选择第二种,精打细算的人会选择第三种。那种最优呢?有可能大多数读者会选择第三种,既考虑了未来的支撑能力,又充分考虑了性价比。但是在传统企业的传统架构模式下,可能第一种才是最优的选择。可能有读者想不通了,第三种明明可以先不采购那么多内存,等几年后再扩容内存,那么内存价格可能都减半了。实际上,系统建设成本是综合性的,某些人可能看到来了内存晚买几年可能能便宜一两万块钱,这种考虑在一个企业MIS系统上是有效的,但是如果系统是一个7*24运行的关键生产管理系统,每次停机都会带来生产暂停的成本开销。那么这种情况下,就需要考虑已经上线运行的系统停机检修,系统升级的成本和可能存在的运维风险,甚至包括未来购买的内存条与老内存条的兼容性问题。其实在现在的社会里,人力资源成本的因素是不能被忽略的。当然这个案例如果放到互联网企业去看,可能就会有截然相反的结论。互联网企业采用原生云架构的系统,建设之初并不需要考虑过多的资源冗余,往往采用云平台,横向扩展的模式来扩展系统,这样情况下,单机的能力往往会选择最佳性价比的模式。

从上面我们讨论的问题来看,数据库优化要解决的问题确实十分的宽泛,从企业的信息化规划、建设、运行、运营的角度来看数据库优化,需要解决的问题十分的广泛和庞杂。数据库优化概念的外围触角所涉及的地方我们都需要去做一番分析,同时我们还必须结合我们自己的企业信息化建设的特点来考虑优化的方案是否合理,不能一味的照搬照抄。

今天我们简单探讨了数据库优化的一些概念性的东西,下一节我们将讨论数据库性能优化的核心问题。


以上是关于简单说说数据库优化的主要内容,如果未能解决你的问题,请参考以下文章

面试官:给我说说你平时是如何优化MySQL的?

面试题 _ 说说你是怎么数据库优化的

Expert 诊断优化系列------------------给TempDB 降温

说说 CDN缓存插件速度优化那些事儿

说说 HeapSort 堆排序思想,以及个人优化方案。(老物)

Expert 诊断优化系列------------------给TempDB 降温