Tag Archives: 11g

Oracle 11gR2 几个值得关注的新特性

读了一下 Oracle 11gR2 的新特性列表,发现几个新特性是值得关注的。
Support 4 KB Sector Disk Drives

为了更充分的利用容量,新一代的磁盘扇区趋向于用 4KB 的扇区而不是旧有的 512 byte 。如果就兼容模式,无疑会影响 I/O 性能。Oracle 11gR2 对 4KB 扇区的支持在 I/O 上是个很好的改进。以前的版本中,都是操作系统默认的大小(512 byte)。这个改进收益最大的可能就是 Redo Log 文件了,要知道 Redo 文件的写速度一直是一个潜在的 DB 瓶颈,现在终于可以指定 4K 而不是默认的 512 byte 了(通过指定 BLOCKSIZE 来替代操作系统依赖的扇区尺寸)。相信写入速度会好很多。

这个 4K ,真是个有趣的话题,还记得以前的 4K 偏移量的问题么?

ASM Cluster File System (ACFS)

Oracle 自己推 ASM 集群文件系统了。

Oracle Automatic Storage Management Storage Layers.gif

看看示意图就知道第三方的集群文件(比如Veritas)系统要受到影响.

Enable Sampling for Active Data Guard

本来 Active Data Guard 就是个很好的东西–在这一点上 Oracle 终于能做到和 MySQL 差不多了。现在 Active Data Guard 上支持了 ASH 性能采样。调查性能问题的时候,基本上不影响主生产库了。

Oracle_Active_Data_Guard.jpg
Data Pump

对于 Data Pump ,可能做数据仓库的同学要注意了。现在Data Pump可以指定分区导出。而 Worker 进程也可以跨多个节点进行了。

另外对于 Flush Cache 的特性,我觉得成本太高了。开源的方案更靠谱一些。

走马观花了一下新特性,感觉有一些亮点,不过光有亮点如果用户不接受的话也没有用,谁让 Oracle 所有的新版本都是一堆 Bug 呢?

EOF

补充一个刚看到的:

IGNORE_ROW_ON_DUPKEY_INDEX Hint for INSERT Statement

这个也是 MySQL 之前有的功能…

PHP 与 Oracle DRCP

Oracle 对 PHP 的支持一直是不错的(只是国内好像 PHP + Oracle 的开发并不多)。 Oracle 11g 中的新特性数据库驻留连接池(Database Resident Connection Pool,DRCP) 对 PHP 应用进一步扩展带来了一种可能。

这个特性应该重点针对 PHP 应用的。PHP 不支持真正的多线程,非持久连接非常消耗 CPU 资源,扩展性也差;持久连接扩展性好了一点,但是又额外占用更多的内存资源(PHP 之父在几年前的一个 Step-by-Step 优化演示的文章中很形象的说明了连接开销对应用的影响)。DRCP 的出现能更好的缓解上述两个问题,其共享连接能跨 Apache 与中间件节点,但共享的连接是基于数据库用户的,比如 Scott 用户登录到 DB 上的所有连接间共享。

Oracle_DRCP.jpg

Oracle 官方披露的测试数据是,在 4 CPU Intel Xeon MP 2.80GHz 机器上,2GB RAM, 32bit RHEL 4. 支撑到 14000 个链接的时候,CPU 使用率在 65% 左右。这个…还是太惊人了,根据我找到的另外一份测试结果,看来要大打折扣才能有参考性。

EOF

Oracle 11g 新特性: DBMS_STATS 自动统计阀值修改

oracle11g_logo.gif

这是我的 Oracle 11g 系列的文章之一(这一篇没啥含量,算是笔记吧)。

在 11g 之前的版本中,DBMS_STATS 自动统计收集(Automatic Statistics Gathering)默认的阀值是 10%, 这个 10% 是不可以修改的。这对千变万化的企业数据库来说环境来说,有些死板,如果是个超大的表,默认的 10% 数据也是海量了,会把整个资源占死。Oracle 11g 中,这个属性可以通过修改 STALE_PERCENT 属性来修改, 有全局(DBMS_STATS.SET_GLOBAL_PREFS )和表级别(DBMS_STATS.SET_TABLE_PREFS)两种。

例子语句:

设定:SQL>  exec dbms_stats.set_table_prefs(null,'EMP','STALE_PERCENT',1);
修改为 1%. 范围从 1-100.
恢复:
SQL> exec dbms_stats.set_table_prefs(null,'EMP','STALE_PERCENT',null);
查询:
SQL> select dbms_stats.get_prefs('STALE_PERCENT',null,'EMP') from dual;

虽然我很少用 DBMS_STATS 收集数据对象统计信息,不过它的有些用途还真的不错。

Refer: Metalink Note:390737.1
EOF

About Oracle 10g/11g AWR

Oracle 10g 开始 引入了AWR (Automatic Workload Repository). Oracle 建议用户用这个取代 Statspack。不过这个需要注意的是使用 AWR 需要有 Diagnostic Pack License。Oracle 后来推出了一个解决方案可以禁止掉该特性。

在 Note. 436386.1 有说明:

SQL> @dbms_awr.plb

然后执行:

dbms_awr.disable_awr();

如果用 sys 之外的用户创建 AWR 报告,则需要进行合适的授权。否则会报告错误 PACKAGE 执行错误。

CONNECT / AS SYSDBA;
GRANT ADVISOR TO foo;
GRANT SELECT_CATALOG_ROLE TO foo;
GRANT EXECUTE ON sys.dbms_workload_repository TO foo;

注意 Bug 4597354 在创建基线数据的时候,对性能有很大影响。在一个非常繁忙的系统上不要进行此操作。

如果结合企业管理器用 AWR 是很方便的,如果用手工方式收集性能数据,多了很多可供调整的地方,是更加方便了呢?还是更加麻烦了?

EOF