Tag Archives: Oracle

Bebo.com 采用 Oracle 数据库的一些数据

最近一期的 Oracle 杂志(电子版地址)中介绍了一家新兴的社会网络交友站点 Bebo.com 采用 Oracle 的一些信息。这是第一次看到 Web 2.0 公司采用 Oracle 数据库而不是 MySQL 。
Bebo 当前大约有 2700 万用户,每月大约有 40 亿 PV,而每月的增长率大约有 25%–非常惊人。所以有消息说 Google 发布的一份报告中,Bebo 被搜索的频度超过 MySpace。
Bebo 最开始使用的是 Oracle 标准版,运行在一个 2 CPU 服务器上, 操作系统是 SuSE 企业版。标准版是有一些局限性的,所以后来升级到了 Oracle 的企业版。Bebo 创始人 Michael Birch 介绍说,每天用户上传的图片量大约是 120 万张,需要保存为 5 种格式,这些(应该是图片的元数据等信息吧)都是通过数据库来处理的。并且已经构建了 Standby 数据库。
Oracle 把 Bebo 的经验作为 Oracle 在中小企业上的成功案例来介绍的。Bebo 最初为什么选用 Oracle ? “不能承受宕机损失, 不能允许丢失数据?” 如果是出于这样的考虑,那么成本高一点也是必需要承受的。
在 .com 的那一波浪潮中,Oracle 是大赢家之一,在 Web 2.0 这一次,MySQL 斩获不小。
EOF

补充, Bebo 似乎非常喜欢 Oracle 10g 的 Index Organized Table 特性。最新的消息是 Bebo 被 AOL 收购,收购价格:8.5 亿美元.

用 Wget 直接下载 OTN 上的 Oracle 安装文件

OTN 上下载文件,有的时候是比较烦人的事情。估计是出于负载均衡的原因,直接使用浏览器看到的地址还要经过几次 http 302 跳转才可以看到。而这个跳转是要带着 Session 走的,如果使用多线程下载工具就有可能到一个很小的错误页面文件。新版本的 FlashGet 就有这毛病。
如果准备安装的服务器在远程,参考这里的方法,用 Wget 直接下载其实也并不费事。
现通过浏览器获知该数据文件的 URL 地址。然后来个投石问路看看具体的跳转情况:

$ wget --limit-rate=150k \ http://download.oracle.com/otn/linux/oracle10g/ \ 10201/10201_database_linux_x86_64.cpio.gz http://download.oracle.com/otn/linux/oracle10g/ \ 10201/10201_database_linux_x86_64.cpio.gz => `10201_database_linux_x86_64.cpio.gz' Resolving download.oracle.com... 213.35.100.1 Connecting to download.oracle.com[213.35.100.1]:80... connected. HTTP request sent, awaiting response... 302 Found
Location: http://download-
west.oracle.com/otn/linux/oracle10g/10201/ 10201_database_linux_x86_64.cpio.gz [following] http://download-west.oracle.com/otn/linux/oracle10g/10201/ 10201_database_linux_x86_64.cpio.gz
=> `10201_database_linux_x86_64.cpio.gz' Resolving download-west.oracle.com... 206.204.21.139 Connecting to download-west.oracle.com[206.204.21.139]:80... connected. HTTP request sent, awaiting response... 302 Found
Location: https://profile.oracle.com/jsp/realms/otnLogin.jsp?
remoteIp=218.108.233.1&globalId=&redirectUrl=http%3a%2f%2fdownload-
west.oracle.com%3a80%2fotn%2flinux%2foracle10g%2f10201%
2f10201_database_linux_x86_64.cpio.gz [following] --16:11:01-- https://profile.oracle.com/jsp/realms/otnLogin.jsp? remoteIp=218.108.233.1&globalId=&redirectUrl=http%3a%2f%2fdownload- west.oracle.com%3a80%2fotn%2flinux%2foracle10g%2f10201% 2f10201_database_linux_x86_64.cpio.gz => `otnLogin.jsp? \ remoteIp=218.108.233.1&globalId=&redirectUrl=http:%2F%2Fdownload-
west.oracle.com:80%2Fotn%2Flinux%2Foracle10g%2F10201%
2F10201_database_linux_x86_64.cpio.gz' Resolving profile.oracle.com... 141.146.8.116 Connecting to profile.oracle.com[141.146.8.116]:443... connected.
HTTP request sent, awaiting response... 200 OK Length: 4,106 [text/html]

输出实在是有点恶心,我在适当的地方做了换行处理。要在第二个 Location 处下手:
https://profile.oracle.com/jsp/realms/otnLogin.jsp?remoteIp=218.108.233.1&globalId=&redirectUrl=http%3a%2f%2fdownload-west.oracle.com%3a80%2fotn%2flinux%2foracle10g%2f10201%2f10201_database_linux_x86_64.cpio.gz
在这个地址后添加 &username=YOURPASSWORD&password=YOURPASSWORD&submit=Continue . YOURUSERNAME/YOURPASSWORD 是在 OTN 上的用户名与口令。然后提交如下的命令即可:

wget --limit-rate=128K --post-data="https://profile.oracle.com/jsp/realms/otnLogin.jsp? \ remoteIp=218.108.233.1&globalId=&redirectUrl=http%3a%2f%2fdownload- \ west.oracle.com%3a80%2fotn%2flinux%2foracle10g%2f10201% \ 2f10201_database_linux_x86_64.cpio.gz \ &username=YOURUSERNAME&password=YOURPASSWORD&submit=Continue" \ https://profile.oracle.com/jsp/reg/loginHandler.jsp

如果嫌输出麻烦,可以在最后 -o downloadOracle.log . 新开一个终端窗口 tail -f downloadOracle.log 就可以观察下载进度了。
要养成随时用 Unix 的习惯思考问题,还真是一个需要时间的事情 :)
EOF

Oracle 的 MBRC 与 SSTIOMAX

Oracle 初始化参数 DB_FILE_MULTIBLOCK_READ_COUNT (MBRC) 默认值一般是比较低的,在进行一些比较大的数据操作的时候,恰当的调整当前 Session 的 MBRC 的值可能会在 IO 上节省一点时间。
DB_FILE_MULTIBLOCK_READ 这个参数的值并不是可以无限大, 大多数平台下的 Oracle 都是 128。一般 Oracle 的 Block Size 是 8K 。128*8K=1M 。 这个 1M 是大多数操作系统一次最大 I/O 的限制。前面的限制要从这个 1M 推回去,初始化参数 DB_FILE_MULTIBLOCK_READ_COUNT 的最大值之所以定为 128 ,也是一个比较保守的策略。
Oracle 的 Metalink Note:291239.1 有一小段说明:

Each version of Oracle on each port, is shipped with a preset maximum of how much data can be transferred in a single read (which of course is equivalent to the db_file_multiblock_read_count
since the block size is fixed). For 8i and above (on most platforms) this is 1Mb and is referred to as SSTIOMAX.
To determine it for your port and Oracle version, simply set db_file_multiblock_read_count to a nonsensical value and Oracle will size it down for you.

SSTIOMAX 中的 SST 代表什么意思不为人知:

SSTIOMAX is an internal parameter/constant used by oracle, which limits the maximum amount of data transfer in a single IO of a read or write operation. This parameter is fixed and cannot be tuned/changed

要查看当前系统上的 SSTIOMAX 限制,可以通过如下做法简单的得到(trace 10046 的方法似乎麻烦了一些):

foo@DEMO> show parameters db_file_multiblock_read_count
NAME TYPE VALUE ------------------------------------ ----------- ------- db_file_multiblock_read_count integer 16
foo@DEMO> ALTER SESSION SET db_file_multiblock_read_count =256;
Session altered.
foo@DEMO> SELECT VALUE FROM v$parameter WHERE NAME = 'db_file_multiblock_read_count';
VALUE -------------------- 128

正常运行的库,MBRC 并非越大越好(除了 IO 效率有降低的可能,也会有可能影响 CBO 的运行)。后者是我的猜测,因为在 10gR2 上,’db_file_multiblock_read_count’ 参数引入了两个相关的隐含参数(Refer):

_db_file_exec_read_count
_db_file_optimizer_read_count

距离上一次写技术备忘似乎有好久了…这几天比较累
EOF

关于世界上的超大数据库

手边有一份 2005 Winter TopTen Award Winners的报告,包含了一些关于世界上排名前几位的 VLDB 的信息。VLDB,超大数据库,其实叫做”狂大数据库“倒是也很贴切。
如果不区分操作系统环境,Yahoo! 力拔数据仓库一项的头筹,单个数据库数据大小接近 100T 。采用的是 Oracle 数据库,部署在 Unix 上, 存储是 EMC 的设备。这是 2005年的数据,雅虎现在每日接近 40 亿 PV,这个数据仓库现在应该远超 100T 了吧。 电信巨头 AT&T 的数据仓库屈居亚军。Amazon 的两个数据仓库也不小,数据量多达 24773 GB,是用 Oracle RAC 实现的,部署在 Linux 操作系统上。

OLTP Top 10

我比较关心 OLTP 数据库的情况。下面这个图表是包括所有操作系统环境的 OLTP 数据库情况。前 10 名中只有两个采用了集群,而且都是集中式集群(Centralized/Cluster)。其余8个席位都采用了 SMP 架构,而且大多是集中式(Centralized)。分布式超大 OLTP 的成功案例看来并不多(只有 1 例,另外有一例是Federated)。让 Fenng 稍微有些惊讶的是 SQL Server 占了三个席位,数据量最大接近 8T 。整个表看来,数据库类别、所用的软件平台还真的比较平均。并非我想象的完全是 DB2/Oracle+Unix 的格局。
世界上 Top 10 OLTP 数据库

Unix 上 OLTP TOP 10

下表是使用 Unix 操作系统 OLTP TOP 10。好家伙,几乎清一色的 Oracle。DB2 不见踪影,只有 Sybase ASE 还算争气,占了一个席位。 9 个 Unix 平台上的 Oracle OLTP DB,只有两个使用了 RAC ,其他都是 Centralized/SMP。
到现在为止,都还没有看到互联网站点的身影。

继续阅读