oracle一些需要了解的东西

本次将会学习数据库一些基本的知识(你需要了解的)
共享池--SGA
共享池是oracle缓存程序数据的地方。执行过的每一句sql语句在共享池中都存在解析后的内容。
    也就是说在解析每一句sql之前,oracle都会检查库高速缓存是否拥有相同的语句,如果有oracle直接从缓存中
    读取而不是再解析一次。非常好的是对于你运行plsql情况也是这样。就算不管有多少个用户执行相同的sql语句
    oracle通常都会解析一次,然后共享。高速缓存区是有内存限制的,它内部有一个算法,会让新的sql覆盖不常用的,
    和很久之前的sql,就像栈(这段话里的栈都是一个代名词不是真正的栈,不敢误导了,这个例子也不准确)一样,不同的是他可以把最
    近使用的放到栈前举个例子现在栈(大小为5)里有12345,这五个这时我们用了下5sql,再输入一个6sql,这时栈里的解析数据位65123.
    所以为了高效实用共享池,尽量不要写那种独立的sql。
库高速缓存
    就是上面说的执行每一句sql语句就是他必须解析并载入到库高速缓存中,库高速缓存是共享池用来保存之前已经解析
    过的语句的区域。如果oracle取之前解析的信息并重用这种解析是软解析,如果该语句之前没被执行过,那么将执行所有
    的工作来为当前的语句生成振兴计划,并将它存在缓存中以便将来重用,这种解析是硬解析。
    硬解析相对软解析要复杂很多,oracle要收集所有信息。为得到所需信息,oracle需要对数据字典进行一连串的查询。
    打个比方(真实数据)0.060374和0.000095,前者是硬解析后者是软解析。
    select * from v$sql查看高速缓存的数据
完全相同的语句
    有时候高速缓存会存相同的sql那是由于你可能这个加注释那个没加等等。。。
缓冲区缓存(SGA)
查询转换
    就是当我们写一个查询语句到执行计划的开发过程之前会进行一个查询转换,也就是说你写的sql并不一定是执行计划
    的sql,当然如果你的sql是最优的除外,不然查询转换器会对你的sql进行优化举个简单的例子
    select * fron ak001 where ac011 in (select ac002 from where ak002)转换器会修改为
    select a.* from ak001 a,ak002 b where a.ac011=b.ac002

    你可以通过NO_QUERY_TRANSFORMATION提示来查看是否转换

最近没时间看就先不更新了


    
    
    
    
    
    
    

猜你喜欢

转载自blog.csdn.net/lihuihao2/article/details/79020013