Statspack分析报告详解(3)
5.首要等待事件常见等待事件说明:oracle等待事件是衡量oracle运行状况的重要依据及指示,主要有空闲等待事件和非空闲等待事件。TIMED_STATISTICS:=TRUE,等待事件按等待的时间排序,= FALSE,等待事件按等待的数量排序。运行statspack期间必须session上设置TIMED_STATISTICS = TRUE。空闲等待事件是oracle正等待某种工作,在诊断和优化数据库时候,不用过多注意这部分事件,非空闲等待事件专门针对oracle的活动,指数据库任务或应用程序运行过程中发生的等待,这些等待事件是我们在调整数据库应该关注的。Top 5 Timed Events~~~~~~~~~~~
Statspack分析报告详解(2)
Statspack分析报告详解: statspack 输出结果中必须查看的十项内容 1、负载间档(Load profile) 2、实例效率点击率(Instance efficiency hit ratios) 3、首要的5个等待事件(Top 5 wait events) 4、等待事件(Wait events) 5、闩锁等待 6、首要的SQL(Top sql) 7、实例活动(Instance activity) 8、文件I/O(File I/O) 9、内存分配(Memory allocation) 10、缓冲区等待(Buffer waits1.报表头信息数据库实例相关信息,包括数据库名称、ID、版本号及主机等信息。STATSPACK report for DB Name DB Id Insta
Statspack分析报告详解(1)
调整STATSPACK 的收集门限Statspack 有两种类型的收集选项:级别(level):控制收集数据的类型门限(threshold):设置收集的数据的阈值。1.级别(level)Statspack 共有三种快照级别,默认值是5a.level 0: 一般性能统计。包括等待事件、系统事件、系统统计、回滚段统计、行缓存、SGA、会话、锁、缓冲池统计等等。b.level 5: 增加SQL 语句。除了包括level0 的所有内容,还包括SQL 语句的收集,收集结果记录在stats$sql_summary 中。c.level 10: 增加子锁存统计。包括level5 的所有内容。并且还会将附加的子锁存存入stats$lathc_children
ORACLE分析函数手册
Oracle从8.1.6开始提供分析函数,分析函数用于计算基于组的某种聚合值,它和聚合函数的不同之处是对于每个组返回多行,而聚合函数对于每个组只返回一行。下面例子中使用的表来自Oracle自带的HR用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/human_resources/hr_main.sql来创建。少数几个例子需要访问SH用户下的表,如果没有安装该用户,可以在SYS用户下运行$ORACLE_HOME/demo/schema/sales_history/sh_main.sql来创建。如果未指明缺省是在HR用户下运行例子。 开窗函数的的理解:开窗函数指定了分析函数工
ORACLE分析函数手册二
REGR_ (Linear Regression) Functions 功能描述:这些线性回归函数适合最小二乘法回归线,有9个不同的回归函数可使用。 REGR_SLOPE:返回斜率,等于COVAR_POP(expr1, expr2) / VAR_POP(expr2) REGR_INTERCEPT:返回回归线的y截距,等于 AVG(expr1) - REGR_SLOPE(expr1, expr2) * AVG(expr2) REGR_COUNT:返回用于填充回归线的非空数字对的数目 REGR_R2:返回回归线的决定系数,计算式为: If VAR_POP(expr2) = 0 then return NULL If VAR_POP(expr1) = 0 and VAR_POP(exp
ORACLE回滚段(2)
查询回滚段的信息 所用数据字典:DBA_ROLLBACK_SEGS 可以查询的信息:回滚段的标识(SEGMENT_ID)、名称(SEGMENT_NAME)、所在表空间(TABLESPACE_NAME)、类型(OWNER)、状态(STATUS)。 例: SQL>SELECT segment_name,tablespace_name,owner,status FROM dba_rollback_segs; 回滚段的统计信息 数据字典:V$ROLLNAME,V$ROLLSTAT 例: SQL>SELECT n.name,s.extents,s.rssize,s.optsize,s.hwmsize,s.xacts,s.status FROM v$rollname n,v$rollstat s WHERE n.usn=s.usn; 回滚段的当前活动事务
ORACLE回滚段(1)
创建回滚段 语法: CREATE [PUBLIC] ROLLBACK SEGMENT rollback_segment [TABLESPACE tablespace] [STORAGE ([INITIAL integer[K|M]] [NEXT integer[K|M]] [MINEXTENTS integer] [MAXTENTS {integer|UNLIMITED}] [OPTIMAL {integer[K|M]|NULL}]) ] 注: 回滚段可以在创建时指明PRIVATE或PUBLIC,一旦创建将不能修改。 MINEXTENTS 必须大于等于2 PCTINCREASE必须是0 OPTIMAL如果要指定,必须大于等于回滚段的初始大小(
Hash join算法原理
自从oracke 7.3以来,oracle提供了一种新的join技术,就是hash join。Hash Join只能用于相等连接,且只能在CBO优化器模式下。相对于nested loop join,hash join更适合处理大型结果集。Hash join不需要在驱动表上存在索引。一. Hash Join概述Hash join算法的一个基本思想就是根据小的row sources(称作build input,我们记较小的表为S,较大的表为B) 建立一个可以存在于hash area内存中的hash table,然后用大的row sources(称作probe input) 来探测前面所建的hash table。如果hash area内存不够大,hash table就无法完全存放在hash
一个简单的oracle函数返回数组的例子
create or replace type t_ret_table is table of varchar2(20);create or replace function f_test(var_num in integer) return t_ret_table isvar_out t_ret_table;beginvar_out := t_ret_table();var_out.extend(var_num);for i in 1..var_num loopvar_out(i) := i;end loop;return var_out;end f_test;/set serverout ondeclareaa t_ret_table;beginaa := f_test(10);for i in 1..aa.count loopdbms_output.put_line(aa(i));end loop;end;/一个分隔字符串的例子:把'a|||b|||c'字符串分隔成abccreate or replace function f_test(var_
Oracle Data Pump
在Oracle 10g中, exp 和 imp 被重新设计为Oracle Data Pump(虽然Oracle 仍然装载了exp 和imp,并完全地支持它们)。如果你以前使用过exp 和 imp,那么Data Pump 的命令行程序的语法对你来说就不陌生了。 Data Pump 是运行在数据库内部的, 而不是像一个独立的客户端应用程序一样存在。这就意味着这部分的工作在一定程度上独立于发起执行导入或者导出任务的进程 。 在一台机器上 (例如一个定期任务) 可以开始执行导出的任务,而另一台机器上 (例如 DBA 的 手提电脑) 可以对任务的运行状态进行监控。 也正因为任务是运行在数据
execute shell script from stored procedure
In Oracle8i, release 8.1, we could use java to run a system command with an "&" after it (assuming unix) or perhaps "start xxx.cmd" if using NT.o In Oracle8.0 and up, we can write an external procedure in C that runs host commands with system() and the "&". (see attached for an external procedure example)o In Oracle7.0 and up, we can use dbms_pipes to talk to a daemon running outside the database. Here is a simple example that uses sqlplus to be the daemon:
在Oracle数据库10g中跟踪SQL
在具有许多活跃用户的繁忙生产环境中,跟踪SQL会话是费时且十分复杂的,因为在任何使用连接池的多层系统中处理SQL语句可能要涉及多个进程,或者甚至是不同的实例。 利 用Oracle数据库10g,Oralce通过一个新的内置软件包DBMS_MONITOR合理化了SQL的跟踪,这个软件包中包含以前无书面记载的跟踪 工具(如DBMS_SUPPORT软件包)的功能。现在,您可以轻松地从头到尾--从客户机到中间层再到后端--跟踪任何用户的会话,并且基于特定的客户 ID、模块或动作生成跟踪文件。 此外,Oracle数 据库10g包含一种新的实用程序trcsess,它可以让您基于会
oracle cache table(6)
第二个特点,CACHE存储参数无效:SQL> CREATE TABLE T3 STORAGE(BUFFER_POOL KEEP) AS SELECT * FROM T2; Table created.SQL> ALTER TABLE T2 CACHE; Table altered.SQL> SELECT COUNT(*) FROM T;COUNT(*)----------334022SQL> SELECT OBJECT_NAME, A.STATUS, COUNT(*) 2 FROM V$BH A, USER_OBJECTS B3 WHERE A.OBJD = B.OBJECT_ID4 AND OBJECT_NAME IN ('T', 'T2', 'T3')5 GROUP BY OBJECT_NAME, A.STATUS;OBJECT_NAME STATU COUNT(*)--------------------------T xcur 8096SQL> SELECT COUNT(*) FROM T2;COUNT(*)-------
OPTIMIZER_INDEX_COST_ADJ与成本计算
OPTIMIZER_INDEX_COST_ADJ这个初始化参数代表一个百分比,取值范围在1到10000之间.该参数表示索引扫描和全表扫描成本的比较。缺省值100表示索引扫描成本等价转换与全表扫描成本。这些参数对于CBO的执行具有重大影响,其缺省值对于数据库来说通常需要调整。一般来说对于OPTIMIZER_INDEX_CACHING可以设置为90左右对于大多数OLTP系统,OPTIMIZER_INDEX_COST_ADJ可以设置在10到50之间。对于数据仓库和DSS系统,可能不能简单的把OPTIMIZER_INDEX_COST_ADJ设置为50,通常我们需要反复调整取得一个合理值.更为具体的可以根据统计信息,db file scat
oracle cache table(4)
下面说明KEEP池缓存的特点,先看一下查询的结果:SQL> SELECT COUNT(*) FROM T2;COUNT(*)----------167011Statistics--------------0 recursive calls0 db block gets4839 consistent gets4829 physical reads0 redo size381 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processedSQL> SELECT OBJECT_NAME, A.STATUS, COUNT(*) 2 FROM V$BH A, USER_OBJECTS B3 WHERE A.OBJD = B.OBJECT_ID4 AND OBJECT_NAME IN ('T', 'T
oracle cache table(5)
下面继续说明KEEP池和DEFAULT的一些不同之处。首先,创建T表的一个索引:SQL> CREATE INDEX IND_T_NAME ON T (NAME) STORAGE (BUFFER_POOL KEEP);Index created.SQL> ALTER TABLE T MODIFY NAME NOT NULL;Table altered.SQL> SELECT COUNT(*) FROM T;COUNT(*)----------334022Statistics---------------120 recursive calls0 db block gets9682 consistent gets9655 physical reads0 redo size381 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client4 sorts (memo
oracle cache table(2)
下面再创建一个同样大小的表:SQL> CREATE TABLE T2 STORAGE (BUFFER_POOL KEEP) AS SELECT * FROM DBA_SOURCE;Table created.SQL> SELECT COUNT(*) FROM T2;COUNT(*)-------167011Statistics-----------0 recursive calls0 db block gets4839 consistent gets4828 physical reads0 redo size381 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips to/from client0 sorts (memory)0 sorts (disk)1 rows processedSQL> SELECT COUNT(*) FROM T2;COUNT(*)----------167011Statisti
oracle cache table(3)
文章介绍了KEEP池和DEFAULT池的差异之处,下面通过例子进行详细的说明:首先,将T表的容量扩大1倍,这样,即使是单独查询T表,所有的数据也无法全部放入KEEP池。SQL> INSERT INTO T SELECT * FROM T;167011 rows created.SQL> COMMIT;Commit complete.SQL> SELECT COUNT(*) FROM T;COUNT(*)----------334022Statistics----------------0 recursive calls0 db block gets9666 consistent gets4828 physical reads0 redo size381 bytes sent via SQL*Net to client503 bytes received via SQL*Net from client2 SQL*Net roundtrips
oracle cache table(1)
The KEEP buffer pool retains the schema object’s data blocks in memory. The RECYCLE buffer pool eliminates data blocks from memory as soon as theyare no longer needed. The DEFAULT buffer pool contains data blocks from schema objects that are notassigned to any buffer pool, as well as schema objects that are explicitlyassigned to the DEFAULT pool.The initialization parameters that configure the KEEP and RECYCLE buffer pools areDB_KEEP_CACHE_SIZE and DB_RECYCLE_CACHE_SIZE.对象放入KEEP池后,数据
library cache pin(3)
其他解决方法当重新编译某个package时,应确认当前没有session在使用此package中的object. 当我们重新编译某个package时,如果有session正在执行此package中的procedure或function,那么编译就会挂起. 因为编译或分析(parse)package或procedure或function或view时,Oracle需要先取得”library cache lock”和”library cache pin”以保证在编译或分析(parse)期间没有session正使用此object – 因为我们正修改此object的定义并需要删除后用新的定义来重建此object.我们可以用以下procedure来检查是否有session正在使用某个package,如果此proced