Oracle数据库优化的几个有用思路

AWRAutomatic Workload Repository)报告

Oracle10g之后,AWR报告取代了原先的Statspack报告成为一个主流性能分析报告。通常可以从OEM(Oracle Enterprise Manager Console)平台上生成查看AWR报告。在OEM中,使用图形化方法更加容易。这里讲一下手工生成AWR报告。

1. 创建一个awr的目录,进到awr目录

2. 使用oracle用户,sqlplus /nolog

3. SQL> conn / as sysdba

4. SQL> @?/rdbms/admin/awrrpt.sql

5. report_type: html

6. num_days: 1

7. 选择时间点

8. 确认报告名称

就会在awr目录下生成一个类似的awrrpt_1_1796_1813.html文件。

关于Oracle的锁问题

DML锁(data locks,数据锁)

表级锁(TM)

1、NULL、Select
2、SS(Row-S)行级共享锁,其他对象只能查询这些数据行、Select for update、Lock for update、Lock row share
3、SX(Row-X)行级排它锁,在提交前不允许做DML操作、Insert、Update、Delete、Lock row share
4、S(Share)共享锁、Create index、Lock share
5、SSX(S/Row-X)共享行级排它锁、Lock share row exclusive
6、X(Exclusive)排它锁、Alter table、Drop able、Drop index、Truncate table 、Lock exclusive

事务(行级)锁(TX)

事务发起第一个修改时会得到TX 锁(事务锁),而且会一直持有这个锁,直至事务执行提交(COMMIT)或回滚(ROLLBACK)。

  事务(行级)锁(TX)

    事务发起第一个修改时会得到TX 锁(事务锁),而且会一直持有这个锁,直至事务执行提交(COMMIT)或回滚(ROLLBACK)。

DDL锁(dictionary locks,字典锁)

内部锁和闩(internal locks and latches)

  分为共享锁(share lock,即S锁),排他锁(exclusive lock,即X锁)

 

  假如子表的外键字段没有建立索引,则删除父表记录的时候,就会在子表上申请一个表级(TM)的共享锁,这个锁他不是一直持有的,当父记录已经被删除的时候,只能看到关于这个记录的行锁,根本看不到这个共享的表锁的。但是如果当删除父记录的会话被block的时候,却会发现它在等待申请一个SSX的锁。

  如果不对子表外键建索引,在删除子表记录时,会将父表全表删除操作锁住,父表删除时又会获取子表的全表共享锁,使子表全表锁死。但父表可以对非子表对应行进行修改操作。

  基于以上两点,一定要在外键上建索引

 

补充:

行级锁,一般是指排它锁,即被锁定行不可进行修改,删除,只可以被其他会话select。行级锁之前需要先加表结构共享锁。

表级锁,一般是指表结构共享锁锁,是不可对该表执行DDL操作,但对DML操作都不限制。
行级锁之前需要先加表结构共享锁。

根据锁的类型分,共有6种
LMODE
1、NULL,可以某些情况下,如分布式数据库的查询会产生此锁。
2、SS,表结构共享锁
3、SX,表结构共享锁+被操作的记录的排它锁
4、S, 表结构共享锁+所有记录共享锁
5、SRX 表结构共享锁+所有记录排它锁
6、X 表结构排它锁+所有记录排它锁

posted @ 2015-09-21 20:58  keagan  阅读(1481)  评论(0编辑  收藏  举报