Category Archives: oracle

11203的parse count(total)中不包含softer soft parse

Jonathan Lewis在07年的一篇文章Parse Calls中详细介绍了parse相关的一些statistics. 在10g以及11202的oracle版本中parse count(total)是包含softer soft parse的(文章中提到),但是在11203中实验证明parse count(total)中不再包含softer soft parse。 我们来看实验结果: 首先是10g版本(11202的实验结果和10g是一样的) 我们执行一条很简单的SQL: select count(*) from temp; 然后通过另外一个session查看v$sesstat select a.name,b.value from v$statname a,v$sesstat b where a.STATISTIC#=b.STATISTIC# and b.sid=&&sid. and (a.name like ‘parse count%’ or a.name like ‘session cursor cache hits’); … Continue reading

Posted in oracle 11g | 450 Comments

如何查询运行在某个表上的所有SQL

这里说的所有SQL指的是存在于v$sql中还没有被age out出去的SQL. 一般频繁运行的SQL都是存在于v$sql中没有被age out出去的。 第一种方法最简单,也最不准确,就是直接查询sql_text select * from v$sql where lower(sql_text) like ‘%TABLE_NAME%’ 最不准确是因为他有几个问题: 1. table_name可能会被折行,这样like就无法被匹配 2. 可能存在表名一样,但是owner不一样的情况 3. 如果用户查询的是view或者synonym,SQL语句中没有真实的表名,这种方法也无法显示 使用这种方法主要是在当你要查询某个已知SQL的统计信息的时候。 第二种方法是通过查询v$sql_plan select * from v$sql where hash_value in (select hash_value from v$sql_plan where object_owner=’xxx’ and object_name=’TABLE_NAME’); SQL被分析后,执行计划会被存储在v$sql_plan中,object_name就是执行计划里面的name那一列。这种方法可以避免上面所说的三个问题。 但是这个方法也有个问题,就是当SQL执行计划中没有查询表的时候,SQL不会被显示,例如下面SQL的执行计划中没有表名,只有索引名 SYS@XFAN: … Continue reading

Posted in oracle | 412 Comments

11g Bug 10082277 – Excessive allocation in PCUR or KGLH0 heap of “kkscsAddChildNo”

在11.2.0.2的数据库上,我们遇到了oracle 11g的Bug 10082277 Excessive allocation in PCUR or KGLH0 heap of “kkscsAddChildNo” (ORA-4031) Bug 10082277 Excessive allocation in PCUR or KGLH0 heap of “kkscsAddChildNo” (ORA-4031) This note gives a brief overview of bug 10082277. The content was last updated on: … Continue reading

Posted in oracle 11g, oracle bugs | 494 Comments

乾坤大挪移–利用exchange partition将range partition表转为range hash partition表

Exchange Partition是一个很好用的功能,在我们的系统中被经常使用。 如果有同学不熟悉,可以参考这篇文章exchange partition。 灵活运用这一功能,可以解决很多问题。上周我们利用exchange partition成功的将range partition表转为range hash partition表。 事件背景如下: Range分区的日志表,大小为1.6T, 每天写入一个分区,每天truncate下一个分区给第二天的数据使用,33个数据分区循环使用再加一个Partmax分区。 问题是Insert操作太多,在高峰时段达到每秒钟近700次,出现大量的HW enqueue,导致数据库不稳定。 解决问题的方法:

Posted in oracle | 85 Comments

10203下log file parallel write统计信息不准确的问题

log file parallel write是很重要的一个等待事件,当lgwr将redo buffer中的内容写入到disk上去的时候会出现该等待事件。 注意不要和log file sequential read混淆了,log file sequential read是更新logfile header block,出现在日志切换或者归档的时候,等待进程可能是lgwr或者arch。 我发现在数据库从10203升级到10204后,该等待事件的等待次数变多了很多: 这样大幅度的提高蛮奇怪的,我在oracle-l上提出了该问题 http://www.freelists.org/post/oracle-l/log-file-parallel-write-wait-times-get-increased-a-lot-after-upgrading-from-10203-to-10204 Tanel Poder提到这是一个instrumentation bug,10203下面log file parallel write的统计信息不准确。而10204修复了这个问题,所以并不是10204有更多的等待事件,而是10204的统计更加准确了。 It’s more likely that you hit an instrumentation bug which didn’t record any log file parallel write … Continue reading

Posted in oracle bugs | Tagged , | 143 Comments