ORACLE数据库性能优化之表的NOLOGGING
来源:互联网 发布:3.35 魔兽数据库 编辑:程序博客网 时间:2024/05/22 11:13
通过设置表的NOLOGGING来产生更少的REDO
ORACLE数据库会对产生改变的操作记录REDO,比如DDL语句、DML语句,这些操作首先会放在redo buffer中,然后由LGER进程根据触发条件写到联机日志文件,如果数据库开启归档的话,还要在日志切换的时候归档。在这样一个完整的链条上的每一个环节,都可能会成为性能的瓶颈,所以需要引起DBA和数据库应用人员的注意。
对于我们来说,最好的调优方式就是不产生REDO或者尽量少的产生REDO。
这里我们需要搞明白,有些操作不管你怎样都会产生REDO的,比如普通的DML语句(insert、update、delete等),而有些操作我们是可以考虑不产生redo或者少产生redo的。
比如:1、创建或者重建索引
以上列出的不是所有的操作。
下面是一个小的例子,当我们把一个表设置成NOLOGGING模式的时候,通过合适的操作,可以让oracle产生很少的REDO。
首先确认数据库处于归档模式
system@DB01> conn / as sysdba
Connected.
sys@DB01> archive log list
Database log mode
Automatic archival
Archive destination
Oldest online log sequence
Next log sequence to archive
Current log sequence
一、如果表采用默认的方式,也就是记录日志的方式,不管你是否使用insert into, oracle产生的日志都会很多
scott@DB01> conn system/oracle
Connected.
system@DB01> create table tj as select * from dba_objects where 1=2;
Table created.
system@DB01> select count(*) from tj;
----------
system@DB01> select table_name,logging from user_tables where table_name='TJ';
TABLE_NAME
------------------------------ ---
TJ
通过autotrace统计redo生成
system@DB01> set autotrace trace stat
1.不采用append 提示
system@DB01> insert into tj select * from dba_objects;
50330 rows created.
Statistics
----------------------------------------------------------
system@DB01> rollback;
Rollback complete.
2.采用append 提示的方式
system@DB01> insert --+append
50330 rows created.
Statistics
----------------------------------------------------------
system@DB01> rollback;
Rollback complete.
通过以上1和2两种不同方式的比较,我们发现产生的日志量是差不多的1.5690832
二、修改表为不记录日志,这个时候insert into就会体现出他的优势
system@DB01> alter table tj nologging;
Table altered.
1.不采用append 提示
system@DB01> insert into tj select * from dba_objects;
50330 rows created.
Statistics
----------------------------------------------------------
system@DB01> rollback;
Rollback complete.
2.采用append 提示的方式
system@DB01> insert --+append
50330 rows created.
Statistics
----------------------------------------------------------
通过以上1和2两种不同方式的比较,我们发现产生的日志量APPEND的方式明显会少,1.5542844
根据上面的实验我们可以发现,为了通过减少REDO而提高语句的性能,我们要满足两个条件1.表NOLOGGING 2.在语句中使用APPEND提示。
当然我们这里只是在强调性能,作为一个DBA,在性能和安全之间一定要做一个平衡,当你选择了NOLOGGING的时候,由于表是不记录日志的,那如果数据库崩溃,这些数据是不能被恢复的。
- ORACLE数据库性能优化之表的NOLOGGING
- Oracle数据库性能的优化
- oracle数据库的性能优化
- Oracle 数据库的性能优化
- 关于oracle的NOLOGGING
- oracle的nologging
- oracle 的NOLOGGING
- 于oracle的NOLOGGING
- 关于Oracle的NOLOGGING
- ORACLE数据库性能优化之-->内存磁盘
- Oracle数据库中NOLOGGING和FORCE LOGGING的理解
- Oracle数据库中NOLOGGING和FORCE LOGGING的理解
- Oracle数据库中NOLOGGING和FORCE LOGGING的理解
- 优化Oracle数据库性能
- 优化Oracle数据库性能
- 优化Oracle数据库性能
- oracle数据库性能优化
- oracle数据库性能优化
- Android之列表对话框
- jQuery基础 -- 添加/移除CSS类
- Android 各版本的 support vx包相关笔记
- VoIP和电话网络浅析
- web.xml 中的listener、 filter、servlet 加载顺序
- ORACLE数据库性能优化之表的NOLOGGING
- jar命令小记
- java设计模式之代理模式(转自一淫才)
- python cmd命令
- poj 1325 Machine Schedule(最大流版)
- MySQL错误:Can't connect to MySQL server ***(111)
- 如何打war包
- poj 1611
- linux下vi命令修改文件及保存等使用方法整理