做事要有始有终。前面看到了Oracle的查询语句那里了。今天接着来。
1.Oracle执行查询语句的步骤:
a。编译:在编译的时候,服务器进程会把sql语句的政务放入共享池,和库高速缓存中,然后进行下面的:
1):首先在共享池里面搜索是不是有相同的sql语句。有的话,当然就将就拿来用了撒。没有接下面。
2):检查sql语句是不是正确的。
3):通过查看数据字典来检查表和列的定义。
4):对所操作的对象加编译锁。--编译时以防对象改变。
5):检查所引用对象的用户权限。
6):生成执行sql语句所需的优化的执行计划。
7):将sql语句和执行计划装入共享的sql区。
b。执行sql语句。
c。提取数据。
附:update语句执行过程:
1):如果数据和回滚数据不在数据库高速缓冲区(见下),服务器进程吧他们先从数据文件中读到数据库高速缓冲区中。
2):服务器在数据修改的行上加行锁。
3):服务器进程把数据变化的信息和恢复数据所需要的信息记录在重做日志文件(见下)中。
4):服务器进程把回滚所需的原始值和对数据所作的修改都写入数据库高速缓冲区。INSERT,DELECT 类似。
2.共享池(shared pool)
SGA的共享池由两部分组成。库高速缓存,数据字典高速缓存。
要想共享sql或PL/SQL,1,库高速缓存要足够大。不然语句很快就会被淘汰。2,语句要能被共享。
比较下面:
select * from emp where sql >=1200;
select * from emp where sql >=1201;
不同的语句哦。
select * from emp where sql >=&var;通用的哦。
在执行SQL语句时,服务器进程将把数据文件,表,索引,列,用户和其它数据对象的定义和权限放在数据字典高速缓存中。
改变共享池大小的命令:
alter system set shared_pool_size = 100 m;
3.数据库高速缓冲区(database buffer cache)
数据库在提取数据的时候,首先在这里查找,如果没有,才进行磁盘操作。
4.内存缓冲区顾问(v$db_cache_advice)
Oracle 9i以上的版本引入的一个工具。用来获得调整数据库高速缓冲区的统计信息。
状态三种:ON , READY , OFF。
改变状态,如:alter system set db_cache_advice =OFF;
5。重做日志缓冲区(redo log buffer)
用于在数据库崩溃的时候恢复数据用的。在DDL,DML操作数据前都将恢复所需的信息,即在写入数据库高速缓冲区之前,先写入这里。
6.大池(large pool)和java池(java pool)
large pool提高效率。java pool 能够编译java语言的命令。
7.内存缓冲区大小的设定。
DB_BLOCK_BUFFERS,LOG_BUFFER,SHARED_POOL_SIZE.SGA_MAX_SIZE 等等。
设置: ALTER SYSYTEM SET *******;
8.内存缓冲区信息的获取。
show sga;
select * from v$parameter where name ='sga_max_size';
还有一些进程没有看。明天看,跑步去了。