作者文章: Fenng

Oracle CBO 的 _sort_elimination_cost_ratio 参数

连续看到几个和 Oracle 优化器隐含参数 _sort_elimination_cost_ratio 相关的优化案例(Refer Refer )。

如果用 _SORT_ELIMINATION_COST_RATIO 作为关键字在 Metalink 上查询,会发现很多和该参数有关的 Bug ,执行计划的出错特征是也走了索引,但是走了索引全扫描(INDEX FULL SCAN),如果做 10053 Trace ,会发现有个烦人的 Recost for ORDER BY 步骤,然后就会引到错误的执行计划上。

在 9i 升级到 10g 最容易遇到这个问题(原来好好的,到了 10g 发现执行计划有问题了). 出问题的 SQL 一般是走 INDEX RANGE SCAN 然后有个 ORDER BY 会触发,更多的时候优化器模式是 FIRST ROWS — 这样 Oracle 会尽量消除排序,默认认为排序是开销昂贵的操作。通过控制 _SORT_ELIMINATION_COST_RATIO 隐含参数的值 (默认是0) 能够解决这个问题:

ALTER SESSION SET "_SORT_ELIMINATION_COST_RATIO"=5 

其它可能的解决办法:对索引里面的排序保持和 SQL 里的 ORDER by 一致。

其实说白了,很多 Oracle 隐含参数就是为了解决 Oracle 特定情况下的 Bug 的,因为不具备普遍性,所以在某些版本中作为隐含参数出现。在生产数据库上,个别的时候启用隐含参数倒也不是不行的,只要明白了相应的隐含参数到底是干啥的就成了。

题外话:_SORT_ELIMINATION_COST_RATIO 相关的 Bug 频繁出现,倒是感觉和 Oracle 内部代码管理有关,本来应该消除掉的,怎么后面的版本又跑了出来?

目前关于 CBO 最好的书籍应该是Jonathan Lewis 的 Cost-Based Oracle Fundamentals ,有中文译本:《基于成本的Oracle优化法则》。是 DBA 不可错过的一本书。

EOF

说说大量列表项的排序展示问题

广而告之: 7月26日QClub杭州站-- 支付宝首席架构师程立与您分享"当SOA遭遇现实"的心得

上周五去了一趟淘宝,在淘宝二楼实时展示交易信息的大屏幕前看了一会儿。发现关于商品显示的排序列表是两排,左右排列的。

1 商品名一 2 商品名二
3 商品名三 4 商品名四
5 商品名五 6 商品名六
......
N-1 商品名N-1  N 商品名 N
......

尽管符合从左到右的阅读习惯,看起来感觉怪怪的。前一段时间有不少关于电梯楼层按钮排列问题的帖子(),针对电梯的按钮应该说已经讨论的很好了,但我感觉如果针对 Web 页面上大量列表项的排列显示来说,很有值得商榷的地方。

我再抛一个另外的反面例子,关于百度 Mp3 歌曲 Top 500 的列表展示:

baidu_mp3_top500.png(点击图片看大图或者到 Baidu 站点上体验)

假设 M 行 x N 列的展示,如果 M 很大,而 N 很小,在前面几行过去之后(一般是 N行*N列后),会发现非常难以定位你要找的歌曲。尤其是越到后面效果越差。如果 M 和 N 都很小,那么相差是不大的(不知道这是什么心智模型? 尤其是对该项的描述也符合 M:N 值很小,比如 Flickr 的图片展示)。

这个其实和电梯楼层按钮排列的问题不太一样:电梯上面只有一个按钮(楼层号),而 MP3 列表排列项后面还有该项的名字或描述(MP3 名字, 艺术家名字)。需要展示的内容性质和信息量已经变化了。

Flickr_items_arrange.png

这只是 UE 门外汉的个人看法。供参考。

EOF

BTW, 注意到火车站和机场的公示牌显示倒是挺符合阅读习惯的。

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

关于 Nginx 的几个误解

在 IBM developerworks 网站看到一篇不错的介绍 Nginx 的文档:使用 Nginx 提升网站访问速度。针对其中的几个描述,我个人感觉不是很清晰:

# 目前官方 Nginx 并不支持 Windows,您只能在包括 Linux、UNIX、BSD 系统下安装和使用;

虽然 Nginx 官方并不提供 Windows 平台的下载,但还是有热心的开发者维护 Windows 平台上编译好的版本,而且,从邮件列表中观察了一段时间,和官方发布的版本基本上是同步的。

当然,我相信不太会有人在 Windows 上跑 Nginx 吧?

还有一句话我觉得也不太妥当:

# Nginx 本身只是一个 HTTP 和反向代理服务器,它无法像 Apache 一样通过安装各种模块来支持不同的页面脚本,例如 PHPCGI 等;

其实针对 Nginx 的内建的 Perl 模块现在就是支持的(当然,更准确的说是在实验阶段)。

EOF

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

InfoQ 专访支付宝首席架构师程立

一直以来,支付宝的技术人员都比较低调,这次总算利用网络侠客行大会的机会,促成了对支付宝首席架构师程立的采访。如果你对支付宝的架构和开发实践感兴趣,请不要错过 InfoQ 中文站 的这次专访:《程立谈架构、敏捷和SOA实践》

InfoQ 编辑在 介绍页面中引用程立的这段话我很欣赏:

老子说"道生一、一生二、二生三、三生万物"。在业务愿景的技术实现过程中,
假设"道"为愿景、一为方向、二为战略的话,三就应该是架构了,架构既出,万物化生可矣。

因为支付宝一直以为用户提供良好支付体验为目标,以致于有技术人员误认为简单的支付环节背后的支付宝后台技术也是非常简单的。其实想想看为将近 1 亿用户提供服务,每日交易额几个亿人民币,技术上没有独到之处怎么能做到?

和程立一起共事也有三年多了。我工作这么多年,很少遇到这么功力深厚、勤奋、敬业的技术人,感觉他就像一台自我修正的计算机,能一直朝着既定的目标前进,这一点值得很多技术人员学习。

如果觉得这次采访不过瘾,请关注接下来的 7月26日QClub杭州站– 支付宝首席架构师程立与您分享”当SOA遭遇现实”的心得

EOF