您的位置:首页 > 数据库 > Oracle

day12_oracle hint——oracle hint例子

2016-03-21 21:28 519 查看
一、nologging 使用【强制操作不记录 联机日志,加快操作速度】

(1) 【一些临时使用的表,比如:操作某些表的某几条记录,表比较小,不想备份整表,做个表的复本!如果操作完毕了,不满意,再从复本表中取回数据!】
set timing on【打开操作执行时间】
SQL> alter system flush shared_pool;
SQL> alter system flush buffer_cache;
create table test as select * from all_objects;
Table created.
Elapsed: 00:00:05.93

create table test2 nologging as select * from all_objects;
Table created.
Elapsed: 00:00:02.70

select TABLE_NAME,LOGGING,OWNER from all_tables where TABLE_NAME in ('TEST','TEST2');【校验是否记录日志,如果logging空的话,表可能是分区表、临时表、索引组织表】

(2) 【一些日志表,不重要的表】
set timing on【打开操作执行时间】
insert into test select * from all_objects;

49309 rows created.
Elapsed: 00:00:05.28

insert into test2 select * from all_objects;
49310 rows created.
Elapsed: 00:00:18.40
(3)【某一些数据不重要,这个表本身还是要记录日志的】
set timing on【打开操作执行时间】
SQL> truncate table test;
SQL> truncate table test2;
SQL> drop table test;
SQL> drop table test2;
SQL> alter system flush shared_pool;
SQL> alter system flush buffer_cache;
SQL> create table test as select * from all_objects;
SQL> create table test2 as select * from all_objects;
set timing on【打开操作执行时间】

SQL> insert into test select * from test;
49310 rows created.
Elapsed: 00:00:01.29
SQL> insert /*+ NOLOGGING */ into test2 select * from test2;
49309 rows created.
Elapsed: 00:00:00.30

二、 append 【在使用了append选项以后,insert数据会直接加到表的最上面,是在表的高水位上分配空间,而不会在表的空闲块中插入数据。使用append会增加数据插入的速度。】
set timing on【打开操作执行时间】
SQL> truncate table test;
SQL> truncate table test2;
SQL> drop table test;
SQL> drop table test2;
SQL> alter system flush shared_pool;
SQL> alter system flush buffer_cache;
SQL> create table test as select * from all_objects;
SQL> create table test2 as select * from all_objects;
set timing on
SQL> insert into test select * from test;
49309 rows created.
Elapsed: 00:00:00.55
SQL> insert /*+append*/ into test2 select * from test2;
49310 rows created.
Elapsed: 00:00:00.19

三、整合
set timing on【打开操作执行时间】
SQL> truncate table test;
SQL> truncate table test2;
SQL> drop table test;
SQL> drop table test2;
SQL> alter system flush shared_pool;
SQL> alter system flush buffer_cache;
SQL> create table test as select * from all_objects;
SQL> create table test2 as select * from all_objects;

SQL> insert into test select * from test;
49309 rows created.
Elapsed: 00:00:00.41SQL> insert /*+ append*/ into test2 nologging select * from test2;
49310 rows created.
Elapsed: 00:00:00.12

-------------------------------------------------------------------------
四、parallel 【开启并行,提高速度,占用CPU资源,慎用】

可以在写SQL时用hint 强制来使用并行。
HINT 提示修改parallel(table,4) 并行度为4 parallel(table) 如果使用parallel 但未指定并行度,则DOP要通过初始化参数CPU_count 和Parallel_THREADS_PER_CPU计算得到,
并行度为4的程序,最多可以分配或创建9个并行执行服务器来满足这个事务操作,所以并行操作速度有很大提高,但对CPU占用比较多
并行操作增加了事务操作的性能,但会连续的记录重做日志,并且造成瓶颈,所以可以使用nologging 模式来避免瓶颈 sql> alter table table_name NOLOGGING; sql> select /*+ parallel(table,4)*/ count(*) from table;

并行处理服务器(Parallel Execution Servers)并行处理服务器默认是开启的。因为PARALLEL_MAX_SERVERS参数的默认值是大于0的;
在SESSION级别修改并行处理1 关闭并行处理ALTER SESSION DISABLE PARALLEL DML|DDL|QUERY;如,关闭DDL的并行处理ALTER SESSION DISABLE PARALLEL DDL;2 开启并行处理ALTER SESSION ENABLE PARALLEL DML|DDL|QUERY;如,开启DML的并行处理ALTER SESSION ENABLE PARALLEL DML;
SQL语句强制并行处理ALTER SESSION FORCE PARALLEL DML|DDL|QUERY;
如:强制并行DDL,并行度为5ALTER SESSION FORCE PARALLEL DDL PARALLEL 5;注:强制并行处理的优先级比SQL语句中HINT的优先级要低

来自为知笔记(Wiz)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: