主要看“已用时间”和“physical reads”项,前者为总用时,后者为读取硬盘的次数 发现在时间使用上和硬盘读取次数,sde_ori>sde_index_mem>sde_all_mem,但差别不大,与预期不一样,按实验前的想法,加载在内存中的图层应该会大大加快,而且sde_all_mem应该基本不需要读取硬盘才对
2.以相反的顺序重新查询
清空缓存后,重新进行实验,将查询的顺序倒过来(篇幅原因,结果就不贴了)发现结果也反过来了,时间使用上和硬盘读取次数上,都变成了sde_ori3.不清空缓存的前提下继续查询
继续实验,在不清空缓存的情况下,再运行一下对三个图层的查询语句,这时,三条语句都执行得非常快,基本都在半秒内,均如下(结果类似,这里只举一条例子):已选择984行。 已用时间: 00: 00: 01.40
统计信息 ---------------------------------------------------------- 1184 recursive calls 150 db block gets 2087 consistent gets 0 physical reads 0 redo size 42237 bytes sent via SQL*Net to client 1235 bytes received via SQL*Net from client 67 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 984 rows processed
可以看到,使用时间大大减少,而且均没有读取硬盘,这表明,设置为Keep方式加载到内存的表,也需要先进行一次读取,才会在之后加载到内存,对于普通的表,在读取时也会加载到内存,只是加载的位置不同,一个在KEEP POOL,一个在DEFAULT POOL
4.模拟大量使用之后
再进行实验,通过全表搜索某个大表 ,将原来缓存里的内容挤掉,再进行查询, 首先查原表,sde_ori COUNT(*) ---------- 984已用时间: 00: 00: 04.37
统计信息 ---------------------------------------------------- 1837 recursive calls 150 db block gets 3826 consistent gets 1378 physical reads 0 redo size 528 bytes sent via SQL*Net to client 519 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 15 sorts (memory) 0 sorts (disk) 1 rows processed
已用时间: 00: 00: 04.87
统计信息 ---------------------------------------------------- 1559 recursive calls 150 db block gets 3876 consistent gets 1181 physical reads 0 redo size 528 bytes sent via SQL*Net to client 519 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 5 sorts (memory) 0 sorts (disk) 1 rows processed
最后查全表放在内存Keep pool中的sde_all_mem COUNT(*) ---------- 984
已用时间: 00: 00: 00.20
统计信息 ---------------------------------------------------- 1184 recursive calls 150 db block gets 1132 consistent gets 5 physical reads 0 redo size 528 bytes sent via SQL*Net to client 519 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed
可以看到,主表没有放入Keep Pool的两个表,数据已经被从缓存中挤出去了,再次查询时耗时非常大,也有非常多的硬盘读取。全表放入内存Keep Pool的sde_all_mem则保持了非常高速度以及非常少的硬盘读取。说明影响空间查询的主要还是主表,索引表是否放入内存影响不大,同时,放入Keep Pool的数据,不会因为其它的查询而被挤出内存。