易截截图软件、单文件、免安装、纯绿色、仅160KB

Oracle执行SQL语句的过程

当我们提交一条sql语句时,oracle会做哪些操作呢?
Oracle会为每个用户进程分配一个服务器进程:service process(实际情况应该区分专用服务器和共享服务器),当service process接收到用户进程提交的sql语句时,服务器进程会对sql语句进行语法和词法分析。
名词解释:
语法分析:语句本身正确性。
词法分析:对照数据字典中检查表,索引,视图和用户权限。
检查通过后,服务器进程会将sql语句转变为ascii码,并通过一个hash函数将ascii码生成出一个hash值,服务器进程会到share pool中查询此hash是否存在,如果存在,服务器进程会从sharepool中读取已经解析好的语句来执行;如果不存在,则需要做以下步骤:生成执行计划和生成执行编码(请理解何为执行计划)。解析完成后,Oracle会将sql语句本身代码、hash值、编译代码、执行计划和所有与该语句相关的统计数据存放到sharepool中。
注意:
1 尽量写相同的sql语句,因为即使是from语句中table顺序的变化、查询字段位置的变化,甚至只是大小写的不同,都会促使oracle重新做一次硬解析。
2 增大share_pool_size可以保留更多的缓存在内存中的sql语句执行计划,也意味着共享sql的可能性的增大。
在生成编译代码后,service process会试图从db_buffer中读取是否存在相关的缓存数据。
下面我们分两种情况来说明:
1 db_buffer中不包含内存数据:service process会首先在表的头部请求一些行锁,申请成功后,将这些行所在的第一个block读入db_buffer。此时如果db_buffer空闲空间不足,则会触发写操作—DBWr。如果db_buffer剩余的空间不够存储新数据,就会触发DBWr进程,将db_buffer中脏数据写入数据文件。腾出来的空间写入新数据。
   注意: db_block是oracle最小的逻辑单位,即使我们所要求的数据只是一个block所包含的众多行中的一行或几行,我们仍然需要将整个block读入db_buffer。db_block的大小可以设置为8k的整数倍,并且可以针对不同的表空间设置不同的db_block_size的大小,一般建议在select多的表上将db_block_size设置大一些,而dml操作多的表上设置的小一些。
2 DBWr是写数据进程,触发DBWr进程的事件除了db_buffer空间不够外,ckpt进程也是触发DBWr的事件。
补充:
1 段是oracle最小的拓展单位。
2 ckpt进程:检查点进程。将scn写入日志文件,控制文件,数据文件头,数据块头部。触发ckpt进程的事件有alter system checkpoint,alter tablespace offl


相关文档:

SQL Server 2000安装挂起的处理

关于SQL安装被挂起的修复大家可能都遇到过当SQL被删除后需要重新安装时,进入安装界面就会出现SQL错误提示: 从前的安装程序操作使安装程序操作挂起,需要重新启动计算机
然而这些都是白费劲,不管你重新启动多少次也都无济于事,下面我就讲讲怎样能够解除安装或升级时文件被挂起的操作。
点击 开始 运行 输入:regedit ......

SQL Server 索引结构及其使用(一)

SQL Server 索引结构及其使用(一)
一、深入浅出理解索引结构
  实际上,您可以把索引理解为一种特殊的目录。微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引、簇集索引)和非聚集索引(nonclustered index,也称非聚类索引、非簇集索引)。下面,我们举例来说明一下聚集索引和非聚集索引的 ......

SQL Server 索引结构及其使用(二)

SQL Server 索引结构及其使用(二)
作者:freedk
一、深入浅出理解索引结构
改善SQL语句
  很多人不知道SQL语句在SQL SERVER中是如何执行的,他们担心自己所写的SQL语句会被SQL SERVER误解。比如:
select * from table1 where name=''zhangsan'' and tID > 10000
和执行:
select * from table1 where tID > ......

SQL递归查询部门

create function [dbo].[DeptTree](@initDeptCode  varchar(10))/*定义函数c_tree,输入参数为初始节点DeptCode*/
returns @t table(DeptCode varchar(10),UpDeptCode  varchar(10),lev int)/*定义表t用来存放取出的数据*/
begin
  declare @i int/*标志递归级别*/
  set @i=1
  insert @t ......

SQL Server中各个系统表的作用

 
sysaltfiles            主数据库              保存数据库的文件
syscharsets        主数据库        &nb ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号