参加了一天的Oracle 10G的SQL优化课程,自己做了一些笔记:
当sqlplus发出一个select查询后,PGA专用内存先会对这个SQL做一些处理,再到SGA的share pool里查询有没有相关的SQL 的hash key。如果有就返回内存里的数据,减少了IO的操作。如果没有,系统会解析这个SQL语法,检查相对应的权限(会扫描字典表),启动一个SQL优化的执行计划(自动判断用索引或全表扫描),执行后的数据存入SGA的DataBuffer Cache,返回一个内存指针给sqlplus。
如果在sql里有用到order by,group by ,系统会把SGA里的对应的数据Copy一份到PGA里,再对这个数据进行分类排序等。PGA的内存的设置需要有一定的考虑。如果数据很多PGA被占满,数据会被写到监时表空间(这样增加了IO的读写频率)。