`
colorlife
  • 浏览: 130201 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

oracle基础

阅读更多

一. 参数、视图等

1. 警报日志位置: show parameters background_dump_dest alert.log 日志

 

2. 跟踪日志文件: user_dump_dest

 

3. SGA 大小: show parameters sga_max_size; 或 sga_target

sga 各部分: show sga

PGA(程序合局区,服务器进程使用的包含数据和信息的内存,非共享): 由 *_area_size 参数控制。

pga_aggregate_target:控制总共可用的pga

纯数据库服务器,oracle占用内存的大小大概为80%,pga设置为oracle占用内存的20%,也就是:总内存*80%*20%

 

4.各种视图 v$process: 进程视图

 

select * from v$session;  会话

select * from v$sgastat;  sga视图,还有 v$pgastat

v$sysstat

 

5.查找sql语句引起cpu高的问题的过程:

top查找哪个进程引起的

ps -ef|grep pid 查到是否本地还是远程用户  (local=no表示远程用户)

根据pid捕获有问题的语句:

 

select /*+ ORDERED */ sql_text

from v$sqltext a

where (a.hash_value,a.ADDRESS)in 

         (select decode(sql_hash_value,0, prev_hash_value,sql_hash_value),

                 decode(sql_hash_value,0,prev_sql_addr,sql_address)

          from v$session b

          where b.PADDR = (select addr from v$process c where c.spid='&pid'))

order by piece ASC;

(不太好用,要找更好的)

 

6.连接

左外连接:包括左边所有  A left join B on A.id=B.id

右外连接,类似

内连接即自然连接,inner join

一般不用加号,有较多限制

 

7. redo, undo

redo log记录执行的操作,使用改变向量(change vector)来记录,只记录操作代码、数据块地址等,记录量比实际执行语句少很多,能连续、顺序、快速地写出。

用户在 commit事务时,表示此时间点之前的 redo 写入了重做日志文件中而已,足以保证 提交成功的数据不会丢失。这

是 no-force-at-commit策略,也就是提交时不强制写。

由于ORACLE认为你一旦做数据更新,那么就意味着你要COMMIT(其他数据库不全是这种设计理念,比如DB2),所以在你更新数据的时候就做了大量的工作,在commit时所做工作并不多:产生SCN,写redo到磁盘,释放lock等。因此大事务和小事务commit时所花的时间差不多。

 

undo

读不阻塞写,写不阻塞读。

undo是为了回滚事务(rollback),也就是需要保存修改前数据的值,以便能够恢复到之前的状态。回滚的过程也会产生redo。

对于插入操作,回滚段记录的是 rowid。 update,记录的是被更新字段的旧值。delete记录的是整行的数据,因此delete的回滚是需要很长时间。

查看undo表空间大小:

select file_name,bytes/1024/1024 from dba_data_files where tablespace_name like 'UNDOTBS1';

 

查看回滚段的大小和状态

select usn,xacts,status,rssize/1024/1024 as "size(MB)",hwmsize/1024/1024/1024,shrinks from v$rollstat order by rssize;

 

 

归档日志:

1. 开启: alter database archivelog;

关闭: alter database noarchivelog;

必须在mount 模式下执行,startup mount

需重启数据库

2.查看: archive log list;

3. 删除:

rman target/

delete archivelog all completed before 'sysdate-2';  -- 删除2天之前的归档日志

delete archivelog from time 'sysdate-2';  -- 删除从两天前到现在的归档日志

 

 

等待事件、性能

所有等待事件:v$event_name

1.  v$session,  v$session_wait  v$sqltext

可以通过v$session_wait获取等待事件,得到等待时间最长的事件的 sid,在 v$session 根据 sid 查到 sql_hash_value, 根据 hash_value 在 v$sqltext 中查看相关语句。

2.  v$session_wait_history 可以查看之前活动session 的最近十个等待事件。

3. ASH : ash 是每一秒钟对 v$session 表进行采样得到的信息,但只记录活动的会话。使用的内存大小可以通过 v$sgastat 查询出来。内存写满了会覆盖前面的。

4. AWR :采样工作由MMON后台进程进行,默认每60分钟把所有重要的统计信息和负载信息执行一次快照。ASH 信息是AWR信息的一部分。把ASH 10%左右的信息写到AWR负载库中。相关表以 WRH$ 开头,存储在 SYSAUX表空间。

5. v$system_event

可以查看各类事件的自数据库运行以来的总的等待时间。

关注 event, time_waited, wait_class 等字段。如果 wait_class是idle,是空闲等待,不需要看。

如 db file scattered read 事件一般表示全表扫描,等待时间很长的话,可能就是没有建索引了。

db file sequential read 事件: 一般表示读取索引或通过索引读取数据块,等待时间很长的话,表示索引有问题,或者多表链接顺序没有正确的使用驱动表,

direct path read/write: 直接路径读、写。是指绕过SGA,直接读写PGA。一般指磁盘排序IO操作、直接路径加载。要确定是否有过度排序的语句,或者增大临时文件使用的空间,如增大 pga_aggregate_target

 

 

6. v$session_longops: 查看花费时间长的事件

v$sql_plan:查看执行计费,可以通过 operation 、options字段查询匹配哪些sql语句(需关联到sql_text表)进行了全表、全索引的扫描。

 

 

性能诊断

1. 执行计划

set autotrace off | on | on explain | on statistics | traceonly

或者

explain plan for select * from dual;

@?/rdbms/admin/utlxplp;

有效地降低sql的逻辑读(consistent gets)是sql优化的基本 原则之一。

 

2. sql_trace

对sql进行跟踪,设置参数 timed_statistics 为 true; max_dump_file_size要足够大。

alter session set sql_trace=true;  (不能sysdba登录,会提示权限不够)

将会生成跟踪文件,用 tkprof 格式化跟踪文件,进行查看。

 

对特定的 session 进行 sql_trace:

获取session 的 sid 和 serial ,  select sid,serial#,username from $session;

exec dbms_system.set_sql_trace_in_session(sid, serial, true);

运行一段时间后关闭: exec dbms_system.set_sql_trace_in_session(sid, serial, false);

 

3. 10046事件 

有4个级别:level 1 相当于sql_trace,  level 4 相当于level 1 + 绑定值

level 8 相当于level 1 + 等待事件跟踪,  level 12 相当于 level 4 + level 8

全局设置:在参数文件中增加: event="10046 trace name context forever,level 12"

session: alter session set events '10046 trace name context forever";

或:alter session set events '10046 trace name context forever,level 8';

关闭:alter session set events '10046 trace name context off';

设定其它会话: 需要用到 sid, serial#, username(同2)

exec dbms_system.set_ev(sid, serial, 10046, level, username);

关闭: dbms_system.set_ev(sid, serial, 10046, 0, username);

经测试:10046事件实际打印的执行计划的信息没有sql_trace 详细

 

 

物化视图

视图的查询结果是执行视图定义的查询语句动态得到的。

而物化视图则使用中间表存储了视图定义时查询语句的结果,查询物化视图时就不需要再动态关联各个表执行查询了。

物化视图是典型的空间换时间。

什么时候使用物化视图:定义视图的查询语句较为复杂;where语句较为严格,查询结果的数据量比原来少很多;原表数据更新频率不高或物化视图不需与原表同步实时更新数据。这时使用物化视图可大大提高查询性能。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics