HelloDBA

Tuesday, July 7, 2009, 11:02 PM ( 38 浏览 ) - 技术文档 - 发表 fuyuncat
CBO是一种相对更加精确的优化器,它在选择访问路径时能够更多的考虑一些客观因素,得出更加合理的查询计划。但是,Oracle并没有给出完整的代价计算公式,所以我们并不清楚这些因素在整个代价中到底产生多大的影响,或者在尝试调整一些参数时,也没有可依靠的理论公式。不过,Oracle提供了对CBO的Trace方法和输出。这对于我们来说相当于是个“黑盒子”,我们可以向黑盒子输入一些数据,黑盒子会输出结果。

很多人可能都做过一些IQ测试题,其中一种很典型的题型就是给出一组数字,但是中间缺1、2个,让你通过观察出这一组数字的规律来补充出缺少的数字。比如,一组数字1、2、?、5、8、?、21,通过观察,可以对这组数字得出一个这样的规律Xn = Xn-1 + Xn-2,根据这个规律,可以得出两个缺失的数字分别是3、13。

那么我们是否可以由黑盒子的输入、输出来尝试推导出黑盒子里到底如何运算的呢?

完整文章


Tuesday, July 7, 2009, 11:01 PM ( 28 浏览 ) - 技术文档 - 发表 fuyuncat
问:

1. 关于Recycle buffer,在这个缓存区中数据是可以被清出去的,但是,什么条件才会让这里的数据被清理出去呢?
2.您写的文档说会即清除那些不在使用的数据缓存块.请问一下,在哪个文档上有更详细说明,谢谢您.
3. keep buffer和recycle buffer也是使用LRU吗?

答:

完整文章

Thursday, June 18, 2009, 11:01 PM ( 59 浏览 ) - 技术文档 - 发表 fuyuncat
在一致性读(Consistent Read)过程中,Oracle根据SCN从undo segment/buffer中读取脏数据块的undo数据来保证查询数据的一致性。当查询读取了CR数据块时,为了提高后续CR的性能,会将CR块copy到buffer中,后续的CR就直接读取buffer。

在分析CR buffer之前,先简单看下buffer cache是怎么管理的。

我们知道,buffer cache的主要目的就是缓存那些被访问过的数据,以提高下次对这些数据的访问性能。由于一个数据库的被访问的数据量是很庞大的,但是buffer cache资源是有限的,这就需要一个对buffer cache的管理算法,以大大提高buffer cache的利用率。这一算法就是LRU算法,其基本思想就是让那些经常被访问的数据能尽量长时间的保留在buffer中,以提高数据库的整体性能。

完整文章

Monday, June 8, 2009, 09:13 AM ( 27 浏览 ) - 案例 - 发表 fuyuncat
· Troubleshooting:

1st, Hosting report a program seems hung, DB server CPU raised up

2nd , Found a abnormal top SQL from statspack report

Buffer Gets Executions Gets per Exec %Total Time (s) Time (s) Hash Value
--------------- ------------ -------------- ------ -------- --------- ----------
110,089,488 1,555 70,797.1 40.0 2801.99 3369.20 3261003379
Module: SQL*Plus
SELECT ROWID FROM CSS_TP_SHMT_QUEUE WHERE CARRIER_ID = :B6 AND T
RDNG_PTNR_ID = :B5 AND CNTR_ID = :B4 AND SHMT_ID = :B3 AND EVENT
_TYPE_ID = :B2 AND TRANSHMT_SEQ = :B1 AND ROWNUM = 1



Sunday, June 7, 2009, 11:00 PM ( 73 浏览 ) - 技术文档 - 发表 fuyuncat
在之前的文章<Oracle中ROWNUM的使用技巧>中,我们已经介绍过ROWNUM的使用及一些要注意的问题。这里,再介绍一种由ROWNUM导致的性能陷阱。事实上,如果能清楚了解ROWNUM的基本机制,那么对这个陷阱就很容易理解。

我们有定义如下视图,


完整文章


Sunday, May 10, 2009, 10:59 PM ( 23 浏览 ) - 技术文档 - 发表 fuyuncat
1、并行化跟踪设置

在OLAP或DSS系统中,或者在OLTP中大批量处理数据时,我们经常会借助于并行化处理来最大化利用硬件资源使作业在更短的时间内返回结果。由于影响并行化的因素比较多,如cpu数量、系统参数设置、分区等等,在并行化过程中,又可能会遇到一些意想不到的问题,例如,语句不能并行化或者并行度(DOP Degree Of Parallel)和预期的不一致。这时我们就可以通过Parallel Trace对并行过程进行分析,找出问题所在。

在9i之前,可以通过设置10384~10399 event对并行会话进行trace,在9i以后,可以通过在会话中设置“_px_trace”来实现:

完整文章

Thursday, May 7, 2009, 10:57 PM ( 79 浏览 ) - 技术文档 - 发表 fuyuncat
接到开发组的一个调优请求,任务是对一张海量表CS2_CT_MVMT(近2亿多记录,表大小48G)进行数据update,而更新数据来自于另外一张海量的日志表CS2_TXN_LOG(同样近2亿,表大小42G),数据处理的语句如下:

UPDATE CS2_CT_MVMT CT
SET CT.LAST_MOD_DT = (SELECT TL.MSG_GMT_DT
FROM CS2_TXN_LOG TL
WHERE TL.MSG_ID > 9000000000000000000
AND CT.MSG_ID = TL.MSG_ID
AND TL.MSG_GMT_DT IS NOT NULL)
WHERE EXISTS (SELECT 1
FROM CS2_TXN_LOG TL
WHERE TL.MSG_ID > 9000000000000000000
AND CT.MSG_ID = TL.MSG_ID
AND TL.MSG_GMT_DT IS NOT NULL);

完整文章

Tuesday, April 7, 2009, 10:57 PM ( 80 浏览 ) - 技术文档 - 发表 fuyuncat
数据库的作用就是实现对数据的管理和查询。任何一个数据库系统,必然存在对数据的大量读或者写或者两中操作都大量存在。IO问题也往往是导致数据库性能问题的重要原因。在这篇文章中,主要帮助大家在理解Oracle的读写操作机制的基础上,灵活解决遇到的各种常见的IO问题。

1 Oracle中IO的产生

IO当然包括了读、写两部分,先介绍Oracle中写操作的产生。

完整文章

Monday, March 16, 2009, 10:56 PM ( 23 浏览 ) - 技术文档 - 发表 fuyuncat
我们知道,在Oracle中存在许多参数能够影响SQL的查询计划,如hash_join_enabled、optimizer_index_cost_adj、_optim_peek_user_binds。正确调整这些参数能够解决不少SQL所引起的性能问题。但是,在调整这些参数时需要注意一点,他们是对整个实例其作用的。他们的影响范围如此之大,以至于我们可能通过调整这些参数解决某一条SQL的问题,但是参数的调整却会给其他SQL带来负面影响。有没有办法使某个参数只针对某条语句有一个特殊的数值,而对系统没有影响呢?Oracle 10gR2就提供了一个这样的提示——opt_param。

看下这个提示的用法:/*+opt_param(<parameter_name>[,] <parameter_value>)*/。这个提示的作用就是使我们在某条语句中指定某个系统参数值。

完整文章

Saturday, March 7, 2009, 10:55 PM ( 23 浏览 ) - 技术文档 - 发表 fuyuncat
SCN(System Chang Number)作为oracle中的一个重要机制,在数据恢复、Data Guard、Streams复制、RAC节点间的同步等各个功能中起着重要作用。理解SCN的运作机制,可以帮助你更加深入地了解上述功能。

在理解SCN之前,我们先看下oracle事务中的数据变化是如何写入数据文件的:

1、 事务开始;
2、 在buffer cache中找到需要的数据块,如果没有找到,则从数据文件中载入buffer cache中;
3、 事务修改buffer cache的数据块,该数据被标识为“脏数据”,并被写入log buffer中;
4、 事务提交,LGWR进程将log buffer中的“脏数据”写入redo log file中;
5、 当发生checkpoint,CKPT进程更新所有数据文件的文件头中的信息,DBWn进程则负责将Buffer Cache中的脏数据写入到数据文件中。

完整文章

<上一页 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 下一页> 尾页>>