Tag Archives: Database

NUMA 架构与数据库性能

在这次的 Oracle Open World 上,Hammerora 的作者 Steve Shaw 做了一个关于 Linux 平台 Oracle 调优的演讲,其中重点提到了 NUMA 架构对于 Intel Nehalem CPU 上跑 Oracle 的性能影响。

对于传统 SMP 来说,CPU 增多未必系统性能就好,因为共享系统总线的限制了 CPU 数量,CPU 越多内部通信量越大共享总线越容易达到瓶颈。而 NUMA 架构则多少缓解了这个扩展问题,其大致机理是通过给每个核提供单独的本地内存,进而提高可扩展性。而每个核访问本地内存和其它核上的内存时间是不一样的,所以,应用程度对于内存的访问是有比较大的讲究的。从硬件到操作系统再到应用程序,都要支持 NUMA 才会发挥真正的处理能力。

在这里倒是可以插入介绍一下阿姆达尔定律(Amdahl’s Law),这个定律指出并行处理器环境中的速度受制于程序串行的部分,也即暗示说多核未必性能就那么好。

Intel Nehalem microarchitecture

Image via Wikipedia

对一个 DBA 来说,Intel 的 Nehalem CPU (右图为结构示意图)最值得关注的特性当属 NUMA (Non-Uniform Memory Access) 架构方面的改进。

从 Oracle 数据库 8i 开始支持 NUMA 特性,NUMA 在10.2.0.4 与 11.1 上是默认启用的,不过在之前的版本以及 11.2 之后默认是关闭该特性的。在 Intel 平台上,Oracle Validated RPM 包安装后将激活 NUMA。安装的时候,当 Oracle 检测到硬件与操作系统支持 NUMA 的时候,会自动启用 NUMA 支持,Linux 在内核 2.6.9-67 以后自动支持 NUMA 。至于硬件上的开关是通过 BIOS ,如果硬件支持,则 BIOS 默认是激活(enable)该特性的。操作系统层面的开启可以通过核心参数添加 numa=off 的方式来达到。

可以通过操作系统命令查看相关的状态:

# numactl --show

NUMA 这个常看到的术语,似乎一直以来没有得到 DBA 们足够的重视。需要注意的是,硬件、操作系统、应用软件(Oracle) 三者都要支持 NUMA ,才能充分利用这一特性。对于支持 NUMA 的 DB 环境,理论上来说内存请求的利用应该会更有效一些。至于具体的性能数据还要看实测结果,暂时恐怕难以给出,留待以后补充吧。必须要说的是,作为DBA,在启用某个特性的时候,一定要明白这个特性的来龙去脉,以及潜在的影响。

延伸阅读资料

EOF

对于一些不能充分利用多核的软件,比如某些 Web 服务器或者 Proxy,或者需要考虑一下如何利用 NUMA 特性了。而类似跑数据统计的应用,”CPU的并行”得到利用之后或许应该考虑如何更充分利用 NUMA 特性了。

4130467396_b00ea856b8.jpg

关于 I/O 的五分钟法则(Five-Minute Rule)

去年在对 SSD 做调查的时候就关注过这个五分钟法则,今天又发现了这篇文章的修订版(为了纪念 Jim Gray),这个话题倒是可以简单介绍一下,对架构师衡量 I/O 能力、Cache 评估和做硬件选型还是会有一些帮助的。

在 1987 年,Jim Gray 与 Gianfranco Putzolu 发表了这个”五分钟法则”的观点,简而言之,如果一条记录频繁被访问,就应该放到内存里,否则的话就应该待在硬盘上按需要再访问。这个临界点就是五分钟。看上去像一条经验性的法则,实际上五分钟的评估标准是根据投入成本判断的,根据当时的硬件发展水准,在内存中保持 1KB 的数据成本相当于硬盘中存储同样大小数据 400 秒的开销(接近五分钟)。这个法则在 1997 年左右的时候进行过一次回顾,证实了五分钟法则依然有效(硬盘、内存实际上没有质的飞跃),而这次的回顾则是针对 SSD 这个”新的旧硬件”可能带来的影响。

graefe_table3.gif

随着闪存时代的来临,五分钟法则一分为二:是把 SSD 当成较慢的内存(extended buffer pool )使用还是当成较快的硬盘(extended disk)使用。小内存页在内存和闪存之间的移动对比大内存页在闪存和磁盘之间的移动。在这个法则首次提出的 20 年之后,在闪存时代,5 分钟法则依然有效,只不过适合更大的内存页(适合 64KB 的页,这个页大小的变化恰恰体现了计算机硬件工艺的发展,以及带宽、延时)。

根据数据结构和数据特点的不同,对于文件系统来说, 操作系统倾向于将 SSD 当作瞬时内存(cache)来使用。而对于数据库,倾向于将 SSD 当作一致性存储来用。

这是一篇非常重要的文章(所以,建议读一下原文),其中对于数据库一节的描述尤其有趣(针对 DB 也有个五分钟)。限于篇幅,就不罗嗦了。

EOF

2001年以来的数据库技术领域回顾

《程序员》杂志 100 期约稿的稿件。这样比较”大”的话题我写起来并非顺手,而且只是从一个人所见的角度开写,难免贻笑方家。有所遗漏或者有失偏颇,拍砖即可。


2001 年对我自己来说,是一个比较重要的时间点–正式踏上工作岗位,也在这一年奠定了以后工作的技术方向。在 2001年,《程序员》杂志经过两期试刊后也已正式创刊。转眼间,杂志即将出版第 100 期,让人心生感慨。自己几年来持续关注数据库技术领域,《程序员》是一份很重要的参考信息来源。这里回顾一下自《程序员》创刊以来的数据库大事,算是一份纪念,或有谬误,敬请指正。

2001

就从 2001 年说起吧, 2001年6月的ORACLE OpenWorld大会中,ORACLE发布了ORACLE 9i。相比上一个主要版本,也就是 Oracle 8i来说,最大的新产品特性就是真实应用集群(Real Application Clusters, RAC)了。ORACLE 9i的RAC在TPC-C的基准测试中打破了数项记录,一时间业内瞩目。刚在上一年发布 SQL Server 2000 的微软在这一年产品上没什么更大的动作,正在积极拼抢市场。而 MySQL 在 1月份发布了 3.23 产品版,给不少开源爱好者以欣喜。

DB2 在这一年产品上没什么亮点,但是以 10 亿美金收购了 Informix 的数据库的事情震动业界。记得自己当时正好有个 Informix 项目要实施,着实看了几天 Informix 技术文档。这一年国内数据库领域的一件值得一提的小事是 ITpub.net 的创建,这个当初看似不起眼的论坛,在随后的几年中涌现出了一大批数据库技术人才,很大程度上在国内普及了 Oracle 数据库技术。

2002

IBM 推出DB2数据库V8.1的测试版,估计是还在消化 Infomix 的客户资源,几个月之后正式版才能面试。而 Oracle 与 Sun 庆祝了 20 年的合作伙伴关系。之后,Sun 不复 .com 大潮中的明星范儿,Oracle 因为全力支持 Linux 也与 Sun关系愈加微妙。Oracle Open World 第一次在国内举行,地点是北京,会议规格不低,Larry Ellison 在会上进行了主题演讲,此前,这位软件界的传奇人物已经来过中国数次了。[喜欢IT八卦的人可以搜索一下《IT江湖水也深》这篇文章。]

微软连续第二年没有对 SQL Server 发布新版本。

MySQL 发布 4.0 Beta 版。从 4.0 开始,InnoDB 正式成为 MySQL 的默认引擎。在 InnoDB 的基础上,MYSQL对于事务的处理能力有了极大提升。

2003

SQL:2003 发布。这个版本针对 SQL:99 的一些问题进行了改进,支持 XML,支持 Window 函数、Merge 语句等。随着,会看到各大数据库厂商纷纷宣布新的版本中对该标准的支持,这是他们一贯的姿态。

MySQL 4.0 正式发布。在全文索引、嵌入式应用方面得到增强。这个时候的 MySQL 仍然缺乏一些企业级数据库的关键功能。

Oracle 这一年发布了 Oracle 10g, g 代表 Grid ,网格计算。这一年中”网格计算”火爆程度不亚于现在的”云计算”,随后的几年,这个网格计算基本上还只存在于专家们的嘴里。所以,去年 Larry Ellison 在会议上对”云计算”表示不屑也是正常之举。在这一年,Oracle 也宣布针对Linux 64位环境的产品准备就绪,接下来的一年里,Oracle 宣称雇佣了近万人的 Linux 相关的开发人员,可谓不惜血本,当然,这些投入在日后得到了超值回报。从技术的角度上看,其贡献也是有目共睹的,在 I/O 能力、进程扩展能力上都作出很大贡献。

雅虎技术人何伟平的一篇《PostgreSQL 昨天,今天和明天》对于 PostgreSQL 的普及起到了很大作用。

2004

Danga Interactive 针对 LiveJournal.com 开发的Memcached 经过上一年的高频度发布,在这一年只发布了一个版本,标志着已经进入相对稳定阶段,只可惜养在深闺人未必识。关注者并不多。以此为滥觞,伴随着Web 2.0 的火热,类似的分布式对象缓存系统层出不穷,到现在已经成了各大网站标准配备。Memcached 的出现对于数据库方面相关应用设计也带来了更多思路。

这一年嵌入式数据库 SQLite 迎来了较大发展,版本3 完成开发并发布了稳定版。 这些努力为 SQLLite 获得 2005 Open Source Award 打下很好的基础。

我自己第一次给技术杂志投稿《书写历史的甲骨文》,当然是发在《程序员》。

2005

PostgreSQL 8.0 的发布宣告正式开始支持 Windows 平台,成为真正意义上的 Windows 平台数据库(Native Server)。这是 PostgreSQL 发展史上相当重要的一件大事。

微软时隔五年,终于发布了 SQL Server 新版,是为 SQL Server 2005。最大亮点在于对 XML 数据的支持,当时不少技术媒体对此都颇为关注。IBM 发布 DB2 V8.2。

Oracle发布了Oracle10g R2 版本,10g 的 R1 版本稳定性广为诟病,R2版本质量有很大增强,一部分用户终于可以放心一点从 9i 升级到 10g。10月,Oracle 抄了MySQL 后路,将 InnoDB 收归帐下。几年过去回头看,Oracle 此举对 MySQL 影响太大,直到现在,MySQL 也没能自己拥有一个超越 InnoDB 的存储引擎,当然,也不可能超出 InnoDB 的在线备份功能。历史不容假设,否则的话,或许 MySQL 最后仍将独立发展也说不定。
MySQL 在这一年发布5.0 Beta版,引入数个新特性,比如存储过程、触发器等,而这些其实是其他主流商业数据库早已实现的功能,从这个角度上看,MySQL和其竞争对手比较,仍然是追赶者,甚至也落后于开源兄弟 PostgreSQL。

2006

IBM 在这一年发布了DB2 V9 ,最大特性是加入了 PureXML 支持。IBM 对 XML 方面寄予厚望,不过时间证明,XML 对于数据库市场的影响并没有那么大。

在嵌入式数据库方面,Oracle 收购 Berkeley DB 的母公司 Sleepycat Software。到此,MySQL 两个最重要的存储引擎都控制在 Oracle 手里(Falcon 引擎开发进度遥遥无期,最后不了了之),尽管现在来看关系并未僵化,但谁也说不好未来能怎样。Oracle也宣布推出Enterprise Linux,进军操作系统市场,开始和 Linux 厂商之间展开竞争又合作的关系。

SQL:2006发布,继续增强 XML方面的特性。Ingres,这个早期数据库流派的标识产品,以GPL版权形式开放代码。

2007

Oracle 发布 11g 数据库,引入物理 Data Guard 算是最大新功能。MySQL 的拥趸者要偷笑,其实 MySQL 的 Slave DB早就可以在恢复的同时提供查询的能力了。MySQL 宣布将对 5.0 提供两个变种,社区服务器(Community Server)与企业服务器(Enterprise Server),后者发布周期为1月一次,而社区服务器发布周期则不固定。

随着 Firefox 的发行量增加,其内嵌的SQLite 也赢得了大量部署用户。如果单纯从部署数量来看,SQLite 倒也堪称最流行的DB。

2008

2008年数据库领域的最大的事件,是 Sun 收购 MySQL,价格 10 亿美元。一年多时间过去,回头来看,这次收购对于 MySQL 不是什么好事情。年尾,MySQL 发布 5.1 生产版,质量并不好,引起了不小争议。在这个版本中正式提供对分区(Partition)功能的支持。此外,在这一年中,开源社区对于 给MySQL 贡献的补丁和各种解决方案让人眼花缭乱,是可喜之事。Google 和 Facebook 等大站都对 MySQL 作出不小的贡献。

微软发布 SQL Server 2008,没有提供什么更扎眼的功能。其实关系数据库发展到现在,要想作出更大革新已经是几乎不可能的事情了。对于微软来说,Windows平台上 SQL Server 有其压倒性优势,可时过境迁,一方面的优势演变成了其他平台上的劣势。

PostgreSQL 8.3 发布,应该说从2008年开始,PostgreSQL 在市场上表现已经不容小视,以其为基础的集群BI系统 GreenPlum 已经引起了国内不少用户的关注。

SQL 标准SQL:2008 发布。从SQL:99 到 SQL:2009,可以看到标准修订的周期越来越短,多少也反映了对技术的需求之快。

2009

到现在为止,这篇文章还缺席 Sybase 的信息。必须要提一下的是,Sybase 将在3月份公布其列数据库(Column-based Database)的新版本:Sybase IQ 15 。说起来,Sybase 也是传统数据库厂商中唯一提供列数据库的公司。

此外,在云计算应用下涌现出的非关系型数据库(主要是Key/Value存储)产品渐欲迷人眼,有人在疑惑关系数据库已到末日。”关系数据库已死” 每隔几年就会有人跳出来喊,对关系型数据库(RDBMS)来说,百足之虫,死而不僵。

不是总结的总结

以上只是软件行业发展过程中的一个小小的阶段。如果要做点总结的话,我觉得这几年的值得探讨的一个地方就是 MySQL 的发展模式,从最初的近乎玩具的软件到现在对业界举足轻重的产品,其发展途径值得我们深思。反观国内,我们也有一些所谓的国产数据库,投入重金,多半昙花一现,恐怕技术因素不是主要问题吧?


补充1) 应该说,时间就是善于和人开玩笑。这篇文章写完不久,就传来 Sun 被 Oracle 收购的消息。尽管现在还不能断定收购一定能完成,但这毕竟宣告了有关数据库技术的一个转折点。现在无从判断 MySQL 究竟发展方向如何,也或许,MySQL 的命运掌握在广大用户的手中。

补充2) 其实我非常想写一下”国产数据库”,但出于某种原因考虑,还是放弃了。长期以来,那似乎是和我接触的数据库圈子并行的一个轨道。想来想去,还是不要徒增烦恼了吧。

补充3) 这是个变革的时代,新的数据库产品层出不穷。”乱花渐欲迷人眼”。

补充4) 这篇文章和我参与翻译的 Troubleshooting Oracle Performance 一书,似乎可以用来小声的宣布一件事,那就是我关注的技术领域重心早已不再是数据库了。再见,Database !

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