我可以将表格固定到11G中的oracle dbms_shared_pool吗?我看到我不能在10g中做到这一点。该表有4个数字列和大约100K行,它是非常高的使用和只读(这意味着我们将不会插入或更新数据一旦准备)。
我没有找到办法,所以来这里问。另一个问题是我可以将高度使用的存储过程固定到dbms_shared_pool吗?他们的优势和劣势是什么?有必要吗?
答案 0 :(得分:4)
固定表格有点无意义。 Oracle将保留在数据库缓冲区高速缓存的MRU端大量使用的数据,因此极不可能老化。让Oracle管理这个的好处是它只保留了流行的块。也许在你的情况下,所有100K行都有不断的需求,但这会使你的情况变得异常。
如果你有11g企业版,你可以利用结果集缓存,这更加集中,可以为某些类型的查询提供惊人的性能改进。您描述的那种表格将是理想的候选者。 Find out more
这同样适用于频繁使用的程序。他们不会老去。
现在,如果您看到很多重新加载的过程,您认为应该固定您的数据库要么缺少RAM,要么没有正确分配它所拥有的RAM。
答案 1 :(得分:1)
我理解它的方式是肯定的,如果查询完全相同,每次结果缓存都是要走的路。但是,如果您在许多不同的查询中使用查找表,结果将无法使用..您将缓存整个表。然后,使用该表的任何查询都将使用内存数据,而不是IO物理读取数据。
答案 2 :(得分:0)
您可以将内存分配给“KEEP”缓冲池(参数buffer_pool_keep
),然后更改表以将其放入保持缓冲池中;只允许KEEP池中的表缓冲数据,因此如果KEEP池中只有一个表,并且你将其大小设置为10兆字节,理论上整个表可以缓存在内存中。
alter table my_number_stuff storage( bupper_pool keep);