分类归档: Database

TOP 第一章 之 如何解决性能问题

贴出Troubleshooting Oracle Performance 一书第一章《性能问题》的翻译稿的部分节录(初稿)。排版有点差。请多提意见。翻译的过程得到了很多朋友的大力协助,最后我会单独一一致谢!

TOP.jpg
(此书中文名字还未敲定)


如何解决性能问题?

简单而言,一个应用的目标是为使用它的业务提供便利。所以,优化一个应用性能的理由就是要最大化这种便利。这并不意味着性能的最大化,而是找到成本与性能之间的最佳平衡点。实际上,优化任务包括的努力总要从你期望获得的好处得到补偿。这意味着从商业的角度看,性能优化不总是有意义的。

业务视角 vs. 系统视角

优化一个应用的性能是为了给一个业务提供好处。所以当你着手接近(approaching)性能问题的时候,必须先理解业务问题和需求。然后才跳入应用的细节。图1-2演示了一个具有业务视角的人(一个用户)和一个具有系统视角的人(一个工程师)之间的典型不同。

TOP_CH01_01.png
图 1-2. 不同的观察者有不同的角度

认识到两种视角之间的因果关系是重要的,虽然结果必须从业务视角来识别,其原因必须从系统视角来确定。所以,如果你不想去诊断不存在或不相干的问题(强迫调优失调症),理解从业务视角看问题就变得更重要 — 即使这需要更多精细的工作。

把问题分类

对付性能问题的第一步是要从业务视角确定它们并为每个问题设定一个优先级和目标。如图1-3所示。

从业务视角来确定问题 > 设定每个问题的优先级 > 设定每个问题的优化目标

业务问题不能通过观察系统统计发现,而必须从业务视角来确定。如果代之以监控服务等级协议,很明显,可以从没有满足期望的操作来确定性能问题。否则,除了询问用户或者负责的人之外没有其他可能性。这种讨论将涉及一系列操作。例如:注册一个新用户,运行一个报告或加载一批可能很慢的数据。

你知道哪些是有问题的操作,就该给他们排个优先级了。考虑类似这样的问题:如果我们只能处理5个问题,应该如何做呢?当然,最好是全部解决它们。但有时候时间或预算是有限的。此外,缺乏必要措施的情况下,不可能解决不同问题的相互冲突。要强调的是在设定优先级时,当前的性能可能是不相干的。例如,如果你处理一整套报告,不一定最慢的那个具有最高的优先级。可能最快的那个也是执行最频繁的那个,因此有可能具有最高优先级并需要首先优化。再说一次,是业务需求在驱动你。

对每项操作,你应当为优化设定一个可量度的目标。诸如”当创建用户按钮按下以后,处理时间最多2秒”。如果性能需求甚至服务等级协议可以得到,可能目标已经知道了。否则,再强调一次,必须考虑业务需求去确定目标。注意,没有目标就不知道何时停止研究一个更好的解决方案。换言之,优化可以是无止境的。记住,努力永远要和获利取得平衡。

解决问题

诊断整个系统比诊断一个单独的组件要复杂得多。因此,任何可能的时候,你应当一次只解决一个问题,简单地从问题列表按照优先级从高到低的顺序解决。

对每个问题,如图1-4所示,必须回答3个问题:

  • 时间花在哪里了?首先,你必须确定时间花在哪里了。例如,如果一个特定操作用时10秒,你必须找到这10秒里绝大部分花在哪个模块或组件。

  • 时间是如何耗费的?一旦你知道时间花在哪里了,你必须找到时间是如何耗费的。例如,你发现应用用了4.2秒在CPU上,0.4秒做I/O操作,5.1秒等待另一个组件发出队列出队消息。
  • 如何减少时间耗费?最后,才是找出怎样使操作更快的时候。要做到这个,重要的是聚焦到处理中最大时间消费的部分。例如,如果I/O操作占整个处理时间的4%,那么即使它很慢也没必要对他进行调整。
时间花在哪里了? > 时间是如何耗费的? > 如何减少时间耗费? 

要注意由于副作用的益处,有时候修复一个特定问题的同时也会修复另一个问题。当然,相反的情况也会发生。采取的措施可能引入新的问题。所以,很有必要认真考虑修复过程中可能引起的所有副作用。显然,所有改变在应用到生产环境前都要经过仔细测试。

EOF

此文作者:, 位于 Database 分类 标签: on .
转载须以超链接形式标明文章原始出处和作者信息及版权声明.

SQL 标准

前段时间因为写稿的缘故回顾了一下过去几年来的 SQL 标准的事儿。如果不考虑太久远的 SQL/92(SQL2) 的话,那么自从 SQL:99 之后,SQL 标准一共发布了三版。

SQL:2003

这个版本针对 SQL:99 的一些问题进行了改进,支持 XML,支持 Window 函数、Merge 语句等。对于 Merge 语句,很多从事数据仓库的朋友耳熟能详了。这个东西也是先有了事实标准然后纳入规范的。且说 SQL:99 发布后,各大数据库厂商纷纷宣布新的版本中对该标准的支持,这是他们一贯的姿态。

SQL:2006

继续增强 XML方面的特性。这个版本发布后,几乎没什么动静。增强 XML 对数据处理的能力。实际上,至少在现在应用中发现 XML 多少让大家都高估了它,也或许背后有商业力量驱动吧。有几家公司不是要凭借 XML DB 超越对手来着?

SQL:2008

去年发布的。几乎没看到有技术圈子的人讨论这个事情。这个版本其实还是和 XML 较劲。从SQL:99 到 SQL:2008,可以看到标准修订的周期越来越短,多少也反映了对技术的需求变化之快。

EOF

Troubleshooting Oracle Performance 一书翻译进展

近期在和几位同事一起翻译这本 Troubleshooting Oracle Performance (TOP),这是2008 年国外 Oracle 相关书籍中唯一一本值得期待的作品。

本来撺掇同事童家旺写书,不过他谦虚到底,说宁愿翻译,而且一般的图书看不上,只对这本 TOP 感兴趣,家旺慧眼识珠,我也只得勉为其难,助他完成这事儿(其实我对这书也非常感兴趣)。翻译图书是吃力不讨好的活,考虑到各自工作也比较繁重,又拉来同事胡怡文,三个人乐观估计可以拿下这本厚达 600 页的大作。没想到几个月过去,还是耽误了进度不少–出版社估计已经准备扣稿费了 :)

TOP.jpg

这本书的作者Christian Antognini,对 Oracle 数据库的理解精深,凭借此书已经奠定 Oracle Guru 地位。其人也是 OakTable 的成员,说起 Oak Table ,这是一群 Oracle “科学家(Scientist)” 的圈子,没有几手绝活只凭忽悠那是不能位列其中的。

目前这本书已经倒了后期校稿阶段,近期准备放点样章上来供大家参考。翻译得是否得体,亦或佶屈聱牙,还请各位别吝惜手里的板砖,尽管拍来。

EOF

此文作者:, 位于 Database 分类 标签: , on .
转载须以超链接形式标明文章原始出处和作者信息及版权声明.

Greenplum 短板

初接触 Greenplum 的确让人挺惊艳的,计算能力给习惯于 RDBMS 传统处理能力的 DBA 会留下很深刻的印象。有点一招鲜吃遍天的感觉。

Greenplum 还可以结合 Solaris 进行虚拟化 — Sun 任何时候都能搭配上自己的东西。

GreenPlum Solaris.jpg

看上去都很美,问题就是海量数据每天怎么导入到 Greenplum 中来? 借助传统的 ETL 工具(Informatica / DataStage …) 或者自己写 ETL 功能脚本来做。这就是个麻烦事。海量数据的载入与导出,对于 Greenplum 来说,似乎只能用传统的老办法。如果 Greenplum 带一个 ETL 工具就真的强了。

在大哥大电话刚流行的年代,有个笑话说,发明家发明了一款超小超轻的手机,向另外一个人推销,价格还贼便宜。顾客买下刚要走,被发明家叫住:这里还有个大箱子是送给你的。这是什么? 这是这个手机的电池……

EOF

Greenplum 支持的这个 Bizgres 最近两年倒是好像停滞了。免费的午餐不是没有,但不会长久倒是真的。