DBA在系统设计、开发中的重要性

许多应用系统的性能或稳定性并不理想,这在系统上线后不久就逐渐变为棘手的问题,造成这些问题的原因,往往体现了一点:开发设计这些系统的人,对数据库本身不是很了解!而DBA又不了解业务!这就导致了很多本来可以避免的问题产生;另一方面,随着数据库自我调整、管理的能力不断加强,而应用又往往是系统性能最大的杀手,所以,DBA的工作范畴,从只负责数据库服务器维护,逐步走向管理应用系统的设计、开发,是必然的趋势!

一、 现阶段DBA对系统性能及稳定性所做的调整工作

目前DBA对系统性能的调整工作大致是这么几个方面:

1、 在硬件层面进行调优,这通常就是直接花钱,买设备、扩容。

2、 在DB层面进行调优,比如调整初始化参数,调整数据库物理结构。

3、 对应用的SQL进行优化,比如在数据库分析statspack,调整Top SQL。

4、 只有非常少数的,通常是对系统稳定要求较高的一些公司的应用,才会在新的应用上线前,让DBA对sql进行充分的审核与评估。

问题:在应用系统的分析、设计、开发阶段,就目前情况看,很少有DBA参与,而应用系统上线或者开发工作基本结束后,DBA所能做的调优工作其实是很有限的。

二、 许多应用系统的性能或稳定性仍不理想

许多应用系统的性能并不理想,或者系统数据会出现一些难以重现的奇怪的错误,这些问题(尤其是性能问题)有时并不是在系统初期就会体现出来,但是随着系统的运行、数据的增多而逐步变得难以解决,给系统后期的功能扩展和用户使用上带来了不少麻烦,造成这些问题的原因,往往体现了一点:开发、设计这些系统的人不了解数据库!以基于Oracle的应用为例,简要举例说明:

 底层数据结构不合理

由于缺少专业DBA的协助,很多系统设计出来的底层数据库表结构问题重重。而做过系统的人都知道,底层数据库结构不合理,带来的改造代价之大几乎等于一次重构!我见过一个OLTP系统,其核心表竟有100个字段,平均一条记录超过8K,如果按Oracle默认的8K一个Block,一半以上的行必须产生行链接!

而最糟糕的是,设计这样表结构的人还认为自己充分利用了冗余来降低表之间的连接,事实上,其人根本不晓得什么是范式、什么是更新异常,按照范式,这个表应该拆分为两个表的,但如果要改几乎所有的程序都要改!虽然范式不是越高越好,但绝对是设计的人必须吃透的一个东西。在冗余上,相信大多数DBA都认为,级联更新的代价是非常高的,因此冗余应当避免发生级联更新的情况,对于关系型数据库设计中冗余的使用,绝不是门很容易掌握的技巧。

不合理的底层数据库结构设计,给系统的性能埋下了重磅的定时炸弹,这个系统在客户那里跑不到一年,数据量稍微上去些,性能、稳定性就直线下降,而重构的成本又极高,买新服务器肯定是只能治标。而假如底层数据表结构是资深DBA设计的又会如何?当然,如果完全让DBA去做数据库表结构的设计,DBA就必须非常清楚地了解整个系统的业务细节信息,这在DBA来说,人力资源上是有一定困难的,毕竟维护好线上服务器就已经占用了DBA很多的资源,并且领导们通常更看重这点。

很少有领导能认识到DBA在系统开发设计中所起到的作用,和维护线上系统、处理DB故障相比,对整个系统的稳定性和性能,是同样重要的!

SQL性能问题

系统的开发,通常和DBA是没有什么关系的,但是,如果DBA对系统有足够的了解,这时候也是可以做不少贡献的。比如,检查系统业务的数据流是否正确,这个需要通过一些手段,比如sqltrace、10046等,详细对系统的逻辑实现进行检查,一方面查出系统中过于消耗资源的或编写不规范的SQL及时进行调整优化,另一方面,查出系统中不合理的数据库访问,不要到了线上才发现问题,那时可能已经宕机了。简单举个例子,当一个页面需要多处显示商品的类目列表时,程序往往容易犯一个错误,就是多次以同样的SQL读取出同样的数据,并应用于每一个列表显示上,如果你只读取一次,或者干脆在Web层进行cache(要有适当的刷新策略),就可以大大减少单次访问该页面在DB上的I/O消耗。有时甚至会检查出根本不需要被执行的SQL,也在这些和自己毫不相干的功能中频繁地执行着……同时,对数据流的检查还能够查出一些隐藏得较深的系统Bug,这个更需要基于DBA对业务细节的了解。

谁说DBA只会花钱?如果一个服务器I/O负载达到极限,大多数人只能选择扩容,最多重构部分功能来作些优化,而从statspack往往可以看出,系统的I/O资源多数是被一些并不该如此频繁执行的SQL给占用了,它们单次执行并不慢,但占用系统资源比例却异常高,这些问题,细化在每一个业务中,对这些问题的检查和数据流优化,就是对系统资源的最大节省,就是省钱!这个工作,或许只有DBA才能称职。

时间: 2024-09-22 23:37:20

DBA在系统设计、开发中的重要性的相关文章

Winform系统设计开发中的一些经验总结

  界面应统一风格菜单.工具条.状态条   控件的图片.图片透明颜色   控件的命名统一   菜单项目 menu_   工具条按钮 tsb_   文本txt_ .下拉列表cmb_等   控件布局   基类BaseForm实现统一出现位置   窗体的大小尽量一样   Tab顺序.控件长度高度.控件停靠.自动伸缩   菜单.按钮快捷键    注重你代码及知识的储备   每做一个项目储备几个辅助类   看到好的控件或代码收集   利用一切可以使用的轮子   到codeproject网站中找相关内容  

讨论四种关键的质量保证实践在软件开发中的重要性

软件开发和工程被视为非常年轻的职业:但是,它们得到了广泛应用,并且正以比以往更快的速度增长.在许多国家,软件行业目前通常被视为经济增长的主要支柱之一.软件公司常常面临着提供高质量软件的许多困难挑战,而他们也在竭尽所能地让客户满意. 软件质量不可或缺 随着软件变成日常生活中不可或缺的一部分,对软件的需求也明显增长.相应地,高软件质量目前被视为是 "必须具备的" 而不是 "应该具备的".让质量保证团队从一开始就参与到项目规划和执行中,这一点至关重要.然而,仍然有一些公司

软件开发中的数据库测试技术

摘要:根据以往软件测试经验,对数据库测试的内容和方法,进行了详细的分析,阐明了数据库测试在软件开发中的重要性. 关键词:数据库测试:性能测试:DataFactory 1.引言 数据库系统的开发在应用软件开发中所占的比重越来越大,随之而来的问题也越来越突出.比如:数据冗余,功能和性能方面存在的问题已经严重影响应用软件的使用.软件测试人员往往重视对软件功能和编码的测试,而忽略对软件性能,特别是数据库访问并发测试.因为,他们固有的思想中认为数据库设计存在问题对系统性能影响不大,或从根本上忽略了数据库在

Android开发中include控件用法分析_Android

本文实例讲述了Android开发中include控件用法.分享给大家供大家参考,具体如下: 我们知道,基于Android系统的应用程序的开发,界面设计是非常重要的,它关系着用户体验的好坏.一个好的界面设计,不是用一个xml布局就可以搞定的.当一个activity中的控件非常多的时候,所有的布局文件都放在一个xml文件中,很容易想象那是多么糟糕的事情!笔者通过自身的经历,用include控件来解决这个问题,下面是一个小例子,仅仅实现的是布局,没有响应代码的设计. user.xml文件内容如下: <

SQL点滴17—使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识

原文:SQL点滴17-使用数据库引擎存储过程,系统视图查询,DBA,BI开发人员必备基础知识 在开发过程中会遇到需要弄清楚这个数据库什么时候建的,这个数据库中有多少表,这个存储过程长的什么样子等等信息,今天把自己工作过程中经常用到的一些数据库引擎存储过程,系统视图等等总结一下以备不时之用.下面的知识多是自己总结,有一些参考了MSDN. sp_help 有时候想尽快查出数据库对象的相关信息,这个存储过程就很有用了.使用它可以查询出整个数据库中所有对象的相关信息.直接运行sp_help结果如下图1,

产品经理在软件开发中起到了十分重要的作用

提到产品经理的职责,我们首先想到的就是其要对整个产品周期负责,从市场调查.产品规划.设计.项目管理.产品上线.上线推广.产品改版升级等产品的全过程管理,可以说产品经理在软件开发中起到了十分重要的作用. 近日,专为企业挖掘潜在销售的大数据分析公司Infer的CEO兼创始人Vik Singh根据自身所闻和经历,就公司喜欢招募的产品经理.如何招到优秀的产品经理以及怎样成为优秀的产品经理撰文.Infer公司用户包括Tableau.SurveyMonkey.Zendesk.New Relic.AdRoll

Web开发中的响应式图片处理

目前手机等移动设备网站开发已经有比较好的解决方案,一种是响应式网站,像笔者博客一样,PC网站就是移动网站,一种是把移动网站和PC网站分开,类似淘宝那样.从网站SEO的角度来说,两者并无差别,也各有利弊,不论采取那种方式也都能解决移动设备浏览问题.随着移动设备和类型越来越多,我们几乎不太可能针对某一类设备建设单独的网站,不论PC网站和移动网是否分开建设,那都意味着我们的移动网站将会面临越来越多各不相同设备进行访问,也就是说即使是建设单独的移动网站,我们也必须要考虑网站符合用户的设备特性. 一般来说

软件开发中最顶级的 17 个平台和工具

当你在决定使用哪些软件或平台来完成日常工作时,会存在很多选择.所以,我决定写一个我们在开发部门常用的软件开发工具列表,希望能对其他所有人都有所帮助. 新的软件需要一些时间来适应,习惯和理解.我们都经历过一种情况--我们不是真的满意,但不得不重新开始使用另一个工具.承认吧:这真的不是什么棒棒哒的感觉! 如果你打算继续阅读这篇文章,很可能是因为你知道软件开发工具的重要性,以及它们将如何提高团队的效率和生产力.在这个列表中,你会发现我们在Apiumtech使用的伟大的编程工具.而且它们不光是编程工具,

Coverity谈“开发中测试”与程序员最常犯的编码错误

Coverity公司位于美国加州旧金山,他们的产品包括Coverity Integrity Control.Coverity Static Analysis等一系列代码分析工具与解决方案.日前,Coverity公司产品副总Ezi Boteach先生就"开发中测试".代码复查和开发人员最常犯的编码错误接受了采访. 问题:能否介绍下Coverity的"开发中测试"理念和你们的Development Testing Platform? Ezi:"开发中测试&qu