月度存档: 四月 2008

夢見蛇

昨天晚上夢見蛇了, 太恐怖了…
很大很粗的一條蛇, 它纏繞著我, 不咬我, 不攻擊我, 只是纏繞著我, 感覺很舒服地貼著我, 而我, 卻怕死了, 想推開他卻又不敢推, 因為我怕它, 不想碰它. 不知道為什么, 一會兒我掙脫了它, 跑到一個房子里面去了, 這個房子有兩扇門, 一個窗, 門和窗都沒有插銷, 所以關上也會被推開, 而且門下的縫隙很大, 我很擔心它會從門縫里進來.果然在門縫里可以看到它的很亮的棕色的皮…令人寒毛直豎!!不知道怎么回事, 后來還是被它纏住了, 它還是不咬我, 不攻擊我, 就是緊緊地纏繞, 讓人還害怕很害怕.
早上醒來還在后怕. 以前也常常夢見蛇, 但是最近半年都沒有夢見過了, 最近又突然夢到, 到底是為什么呢?

我查了很多資料, 有的說是會發財, 有的說走大運, 有的說有疾病纏身, 有的說要女的夢見蛇要生兒子. 也有的人說蛇又是”小龍”, 是一個很好的征兆, 運氣會很好, 財運會很好…
呵呵, 人多多少少都有點阿Q, 我似乎更愿意相信那些好的說法, 希望我是好運當頭, 財運多多.

开心的日子

今天是个开心的日子,我要好好记录一下。

呵呵,套用某人的话,不要臭屁,再接再厉。。。

MMAN

The Automatic Shared Memory Management feature uses a new background process named Memory Manager(MMAN). MMAN serves as the SGA Memory Broker and coordinates the sizeing of the memory components. The SGA Memory Broker keeps track of the sizes of the components and pending resize operations

Reference: metalink note: 268197.1: New Backgroud Processes In 10g

ADDM

ADDM (Automatic Database Diagnostic Monitor)

引用: http://www.e-works.net.cn/ewkbbs/dispbbs.asp?boardID=183&ID=28184&page=1

一. ADDM概述
ADDM提供了一个整体的优化方案.基于一段时间内的AWR snapshots可以执行ADDM 分析,它可以帮我们
诊断在这段期间内数据库可能存在的瓶颈.

ADDM分析的目标是减小吞吐量的度量值, 在这里我们将它称为”DB TIME”.
DB TIME是一个累积值(数据库服务器处理用户请求所花费的时间).它包括了等待时间和CPU处理的时间
(针对所有活跃的用户进程而言),可以通过查询下面两个视图来获得它的值:
V$SESS_TIME_MODEL, V$SYS_TIME_MODEL

注意: ADDM不会将处理用户响应时间作为调优的目标,你应该使用”TRACE”技术来监控它.

通过减小”DB TIME”, 使用同样多的系统资源,数据库服务器可以处理更多的用户请求,也就是提高了吞吐量. 通过ADDM报告的问题是按照DB time排序的.

ADDM所诊断到的问题包括这些:

1. CPU的瓶颈

2. 内存结构上的瓶颈 (SGA,PGA是否已经合理地设置 ?)

3. I/O 是否存在性能瓶颈? (I/O子系统是否工作正常 ?)

4. 高负载的SQL语句 (是否存在消耗过量系统资源的SQL ?)

5. 高负荷的PLSQL执行和编译,同时是否存在高负荷的JAVA使用?

6. RAC相关的问题: 什么是全局缓冲的热块和对象? 是否存在潜在的内联(interconnect)问题 ?

继续阅读 »

PLSQL_CODE_TYPE

PLSQL_CODE_TYPE:指定将plsql代码编译成默认翻译的字节码还是本级代码.本机代码较长编译时间和较大一些的管理性开销,较快速的运行时性能.

PLSQL_CODE_TYPE specifies the compile

PLSQL_OPTIMIZE_LEVEL

Merge

MERGE [hint] INTO [schema .] table [t_alias] USING [schema .]
{ table | view | subquery } [t_alias] ON ( condition )
WHEN MATCHED THEN merge_update_clause
WHEN NOT MATCHED THEN merge_insert_clause;

MERGE语句是Oracle9i新增的语法,用来合并Update和Insert语句。通过MERGE语句,根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行Update,无法匹配的执行Insert。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于Insert+Update。

STATISTICS_LEVEL

STATISTICS_LEVEL是控制DB_CACHE_ADVICE, TIMED_STATISTICS, or TIMED_OS_STATISTICS的主要参数。
If STATISTICS_LEVEL=TYPICAL or ALL时,不需要设置TIMED_STATISTICS;
If STATISTICS_LEVEL=BASIC时, 设置了TIMED_STATISTICS=TRUE才能统计时间信息。

当明确设定了DB_CACHE_ADVICE, TIMED_STATISTICS, or TIMED_OS_STATISTICS这几个参数的值后,系统会将由STATISTICS_LEVEL所设定的默认这些参数的值覆盖。

Metalink resource:
– STATISTICS_LEVEL

STATISTICS_LEVEL sets the statistics collection level of the database.

oracle9i Release 2 introduces a comprehensive set of advisories including shared
pool sizing advisor, SQL Execution Memory (PGA) Memory Advisor and Recovery Cost
Estimator. All the advisories in oracle9i Release 2 including the Buffer Cache
Advisor are controlled by a newly introduced parameter STATISTICS_LEVEL. The
Parameter DB_CACHE_ADVICE has, therefore, been deprecated in oracle9i Release 2.
By default, the STATISTICS_LEVEL parameter is set to TYPICAL thereby enabling
all the advisories. V$STATISTICS_LEVEL lists the status of the statistics or
advisories controlled by the STATISTICS_LEVEL initialization parameter. Each row
of V$STATISTICS_LEVEL represents one of these statistics or advisories. For more
details on the STATISTICS_LEVEL parameter, please refer to oracle9i Release 2
Performance Tuning Guide and Reference.

Oracle Lock

被问到,没有完整回答出来的问题之二: oracle Lock

1. DML lock(data lock)
  1-1. row lock
          在select.. for update/insert/update/delete时隐式自动产生;

   1-2. table lock
          除了隐式产生,也可以调用lock table in name来显示锁定;
     1-2-1. 如果不希望别的session lock/insert/update/delete表中任意一行,只允许查询,
      ==>lock table table_name in exclusive mode。(X)  这个锁定模式级别最高,并发度最小。
     1-2-2. 如果允许别的session查询或用select for update锁定记录,不允许Insert/update/delete,
      ==>lock table table_name in share row exclusive mode。(SRX)
       1-2-3. 如 果允许别的session查询或select for update以及lock table table_name in share mode,只是不允许insert/update/delete,
      ==>lock table table_name in share mode。

share mode和share row exclusive mode的区别在于一个是非抢占式的而另一个是抢占式的。进入share row exclusive mode后其他session不能阻止你insert/update/delete,而进入share mode后其他session也同样可以进入share mode,进而阻止你对表的修改。(S)
       1-2-4. row share(RS)
       1-2-5. row exclusive(RX)

2. DDL lock(dictionary lock)
3. internal lock/latch

CBO/RBO

今天很郁闷,被问到很多东西,没有几个可以回答出来,自信心被打击的差不多了。
Vingo一个劲地鼓励我,说我很棒很棒,可是还是没有办法骗自己。
所以还是勤快点,把东西记录下来吧…

oracle的优化器有两种优化方式,
基于规则的优化方式(Rule-Based Optimization,简称为RBO)
基于代价的优化方式(Cost-Based Optimization,简称为CBO)
在Oracle8及以后的版本,Oracle强列推荐用CBO的方式

    RBO方式:优化器在分析SQL语句时,所遵循的是Oracle内部预定的一些规则。比如我们常见的,当一个where子句中的一列有索引时去走索引。

    CBO方式:它是看语句的代价(Cost),这里的代价主要指Cpu和内存。优化器在判断是否用这种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行的长度等信息。这些统计信息起初在库内是没有的,是做analyze后才出现的,很多的时侯过期统计信息会令优化器做出一个错误的执行计划,因些应及时更新这些信息。

    注意:走索引不一定就是优的,比如一个表只有两行数据,一次IO就可以完成全表的检索,而此时走索引时则需要两次IO,这时全表扫描(full table scan)是最好

    优化模式包括Rule、Choose、First rows、All rows四种方式:

    Rule:基于规则的方式。

    Choolse:默认的情况下Oracle用的便是这种方式。指的是当一个表或或索引有统计信息,则走CBO的方式,如果表或索引没统计信息,表又不是特别的小,而且相应的列有索引时,那么就走索引,走RBO的方式。

    First Rows:它与Choose方式是类似的,所不同的是当一个表有统计信息时,它将是以最快的方式返回查询的最先的几行,从总体上减少了响应时间。

    All Rows:也就是我们所说的Cost的方式,当一个表有统计信息时,它将以最快的方式返回表的所有的行,从总体上提高查询的吞吐量。没有统计信息则走RBO的方式。

    设定选用哪种优化模式:

    A、Instance级别我们可以通过在initSID.ora文件中设定OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS如果没设定OPTIMIZER_MODE参数则默认用的是Choose方式。
    B、Sessions级别通过Alter SESSION SET OPTIMIZER_MODE=RULE/CHOOSE/FIRST_ROWS/ALL_ROWS来设定。
    C、语句级别用Hint(/*+ … */)来设定

今天被问到的问题是: oracle的那个参数是用来指定是CBO还是RBO,答案是OPTIMIZER_MODE