良多应用系统的机能或不变性并不理想,这在系统上线后不久就逐渐变为棘手的问题,造成这些问题的原因,往往浮现了一点:开发设计这些系统的人,对数据库自己不是很体味!而DBA又不体味营业!这就导致了良多原本可以避免的问题发生;另一方面,跟着数据库自我调整、打点的能力不竭增强,而应用又往往是系统机能最大的杀手,所以,DBA的工作规模,从只负责数据库处事器维护,慢慢走向打点应用系统的设计、开发,是必然的趋向! 一、 现阶段DBA对系统机能及不变性所做的调整工作
' u5 |9 }3 F, m P0 N 今朝DBA对系统机能的调整工作大致是这么几个方面:
: y1 F: Z! }, n; x) e1 F! W' s0 _ 1、 在硬件层面进行调优,这凡是就是直接花钱,买设备、扩容。0 b/ s' X1 p4 f6 d* {
2、 在DB层面进行调优,好比调整初始化参数,调整数据库物理结构。
& Q& {5 [8 a& ? 3、 对应用的SQL进行优化,好比在数据库剖析statspack,调整Top SQL。
0 \1 [" h% [0 p$ }9 d! A 4、 只有很是少数的,凡是是对系统不变要求较高的一些公司的应用,才会在新的应用上线前,让DBA对sql进行充实的审核与评估。, J; m1 U, j5 V# `& b
问题:在应用系统的剖析、设计、开发阶段,就今朝情形看,很少有DBA介入,而应用系统上线或者开发工作根基竣事后,DBA所能做的调优工作其实是很有限的。0 F1 \8 {$ N) A' K) @4 U7 t
二、 良多应用系统的机能或不变性仍不理想
2 C9 L8 f; j7 e$ z 良多应用系统的机能并不理想,或者系统数据会呈现一些难以重现的奇异的错误,这些问题(尤其是机能问题)有时并不是在系统初期就会浮现出来,可是跟着系统的运行、数据的增多而慢慢变得难以解决,给系统后期的功能扩展和用户使用上带来了不少麻烦,造成这些问题的原因,往往浮现了一点:开发、设计这些系统的人不体味数据库!以基于Oracle的应用为例,简要举例声名:3 ]0 ^, X- D8 q& O v7 P
底层数据结构不合理
C; m7 P$ p8 D8 K: N5 s0 h% O" R 因为贫窭专业DBA的协助,良多系统设计出来的底层数据库表结构问题重重。而做过系统的人都知道,底层数据库结构不合理,带来的刷新价钱之大几乎等于一次重构!我见过一个OLTP系统,其焦点表竟有100个字段,平均一标识表记标帜录跨越8K,如不美观按Oracle默认的8K一个Block,一半以上的行必需发生行链接! R) S, v; ]7 v5 ~* T
而最糟糕的是,设计这样表结构的人还认为自己段实操作了冗余来降低表之间的毗连,事实上,其人根柢不晓得什么是范式、什么是更新异常,按照范式,这个表应该拆分为两个表的,但如不美观要改几乎所有的轨范都要改!虽然范式不是越高越好,但绝对是设计的人必需吃透的一个工具。在冗余上,相信大大都DBA都认为,级联更新的价钱长短常高的,是以冗余理当避免发生级联更新的情形,对于关系型数据库设计中冗余的使用,毫不是门很轻易把握的技巧。$ Y1 z C+ `. a6 O1 Y ~
不合理的底层数据库结构设计,给系统的机能埋下了重磅的按时炸弹,这个系统在客户那儿那里跑不到一年,数据量稍微上去些,机能、不变性就直线下降,而重构的成本又极高,买新处事器必定是只能治标。而假如底层数据表结构是资深DBA设计的又会若何?当然,如不美观完全让DBA去做数据库表结构的设计,DBA就必需很是清嚣张地体味整个系统的营业细节信息,这在DBA来说,人力资本上是有必然坚苦的,事实下场维护好线上处事器就已经占用了DBA良多的资本,而且率领们凡是更垂青这点。6 R) h+ r! I2 R( R2 \$ k7 e
很少有率领能熟悉到DBA在系统开发设计中所起到的浸染,和维护线上系统、措置DB故障对比,对折个系统的不变性和机能,是同样主要的! Y4 o. v8 l1 `
SQL机能问题' q& w6 F' {, ~
系统的开发,凡是和DBA是没有什么关系的,可是,如不美观DBA对系统有足够的体味,这时辰也是可以做不少进献的。好比,搜检系统营业的数据流是否正确,这个需要经由过程一些手段,好比sqltrace、10046等,具体对系统的逻辑实现进行搜检,一方面查出系统中过于耗损资本的或编写不规范的SQL实时进行调整优化,另一方面,查出系统中不合理的数据库访谒,不要到了线上才发现问题,那时可能已经宕机了。简单举个例子,当一个页面需要多处显示商品的揽潭拘表时,轨范往往轻易犯一个错误,就是多次以同样的SQL篡夺出同样的数据,并应用于每一个列表显示上,如不美观你只篡夺一次,或者爽性在Web层进行cache(要有恰当的刷新策略),就可以大大削减单次访谒该页面在DB上的I/O耗损。有时甚至会搜检出根柢不需要被执行的SQL,也在这些和自己毫不相关的功能中频仍地执行着……同时,对数据流的搜检还能够查出一些潜匿得较深的系统Bug,这个更需要基于DBA对营业细节的体味。/ z5 k+ L. | a5 s5 V
谁说DBA只会花钱?如不美观一个处事器I/O负载达到极限,大大都人只能选择扩容,最多重构部门功能来作些优化,而从statspack往往可以看出,系统的I/O资本大都是被一些并不应如斯频仍执行的SQL给占用了,它们单次执行并不慢,但占用系统资本比例却异常高,这些问题,细化在每一个营业中,对这些问题的搜检和数据流优化,就是对系统资本的最大节约,就是省钱!这个工作,或许只有DBA才能称职。
e* `" L9 p' S) s 并发问题4 u3 G! _3 z+ v- Y- ?* M- W
4 \( _" R) V; q7 H: F" ~9 `. q 谁都知道系统有并发存在,可是我们在设计系统的时辰,又往往是按照单一营业的思维模式来设计、编码,很少考虑统一营业、分歧营业之间并发运作可能发生的问题。凡是,系统无纪律地呈现一些“奇异的”、“不成能的”错误,极有可能就是并发惹的祸,而背后的问题,往往浮现了设计人员不体味数据库的锁机制,无法和营业很好地连系。设计的人不体味数据库,而DBA又不体味营业,这就导致了良多原本可以避免的问题发生。 |