分类目录归档:Performence Tuning

使用statspack监控Active Dataguard的性能—1-安装篇和简介

Statspack的功能早在Oracle 8.1.6就可以使用(Oracle 8.1.7正式随产品发布),这里不再赘述,baidu google上大把大把的…… 从Oracle 10.1开始,Oracle引入了AWR(Automatic Workload Repository),其功能较之statspack不是强大了一星半点(AWR,ASH,ADDM,SPA,SPM……),statspack一度在10g后被搁置了…… 随着Oracle 11.1 ADG的出现,Statspack有了新的用途……我们都知道ADG是只读打开的,其awr跟主库的是一致的,监控ADG上的查询业务的功能,又变成了使用脚本和crontab等的手工作坊式管理……Oracle为此给statspack增加了新的功能: @?/rdbms/admin/sb* 在statspack目录下($ORACLE_HOME/rdbms/admin/),有两类statsapck相关的文件: 前面的sp开头的应该都不陌生,跟9i和8i的都一样的: 后面sb开头的是ADG中在备库上使用的一套脚本(sb,也就是standby): 具体的安装过程,参加下面的附件sbcreate 如果ADG是RAC,那么需要使用sbaddins.sql将其余的节点加入到statspack中。

发表在 Dataguard, Performence Tuning | 标签为 , , , | 一条评论

让“select min(xxx),max(xxx) from xxx”走索引

首先,做一个测试表: 在extent_id列上创建非唯一索引: 下面的语句没有走索引: 手工指定IDX_LUNAR_EXTENT_ID时,也不走索引: 指定该列为非空时,可以走索引(Oracle的索引不保存空值): 可以看到,无论是否使用hint都走索引了: 再次验证,依然这个结果: LUNAR@lunar>alter table lunar modify extent_id null; Table altered. Elapsed: 00:00:00.01 单独查询最小值或者最大值时,也可以走索引,采用“INDEX FULL SCAN (MIN/MAX)”: 假设,在不能修改表结构的情况下,怎么才能让“select min(extent_id),max(extent_id) from lunar”走索引呢? 参考了网上的一些建议,改写sql如下:

发表在 Performence Tuning | 标签为 | 留下评论

使用coe脚本固定执行计划和手工指定profile的outline的方式有什么区别?

测试目的: 1,假设下面的两个语句分别为A语句和B语句: A语句: select count(*) from lunar where extent_id=1; B语句: select /*+ FULL(lunar) */ count(*) from lunar where extent_id=1; 2,使用coe的脚本(在SQLT中可以知道整套coe脚本)手工为A语句指定B语句的执行计划,看看什么效果 (即,让原本正常走索引的A语句使用全表扫描的B语句的执行计划) 3,使用dbms_sqltune.import_sql_profile为A语句指定执行计划,看看什么效果 首先,做一个测试表: 在extent_id列上创建非唯一索引: 可以看到下面的语句正确的使用了索引(把这条语句称之为A语句): 我使用hint指定该语句必须走全表扫描,姑且把这条语句称为B语句: 找到A语句和B语句的sql_id: 使用coe的脚本来固定执行计划,291688323是B语句的执行计划: 根据提示执行COE_XFR_SQL_PROFILE_fvrmp2a2t38dc_291688323.sql脚本: 再次查询,验证一下A语句是否已经按照我们指定的那样采用了B语句的全表扫描的执行计划: 结论:我们的猜测是错误的,使用coe的脚本固定执行计划,必须是从该sql_id的已经有的所有执行计划中挑选其一,而不能凭空指定一个你认为合适的。 下面,我们使用其他方法固定SQL的执行计划。首先找出B语句的执行计划和outline: 使用下面的脚本为A语句指定B语句的outline: 结论: 1,使用coe的脚本固定执行计划,必须是从该sql_id的已经有的所有执行计划中挑选其一,而不能凭空指定一个你认为合适的。 因此,如果需要从某条sql已经执行过的执行计划中挑选一个合适的,那么coe的脚本简单轻巧,非常合适。 2,如果要手工构造一个该SQL语句从未使用的执行计划,可以采用dbms_sqltune.import_sql_profile的方式手工设置outline,从而改变执行计划。 在这种需求下,coe的脚本是无能为力的。

发表在 Performence Tuning | 标签为 , , | 5 条评论