Oracle 数据库 11g:
面向 DBA 和开发人员的重要新特性
作者:Arup Nanda
缓存和连接池
探究如何使用 SQL 结果缓存、PL/SQL 功能缓存和客户端缓存以及数据库驻留连接池来改善性能。
下载 Oracle 数据库 11g
SQL 结果缓存
访问内存比访问硬盘快得多,在接下来几年中,除非硬盘体系结构有重大改进,不然这一情况很可能会持续。缓存这一将数据存储于内存而非硬盘中的过程由此应运而生。缓存是 Oracle 数据库体系结构的一个基本原理,用户从缓存而非数据库所驻留的磁盘中获取数据。
在相对较小的含静态数据的表中,如 STATES、PRODUCT_CODES 等参考表,缓存的优势异乎寻常的明显。但是,假设有一个存储公司客户的大型表 CUSTOMERS。列表相对静态但不完全是,在向列表中添加或从列表中删除客户时,表极少更改。
缓存在这一情况中也有些许用武之地。但如果您要缓存该表,如何在发生变化时确保获得正确的数据?
Oracle 数据库 11g 可以解决这一问题:使用 QL 结果缓存。假设查询如下。运行它以获取执行统计信息和响应时间:
SQL> set autot on explain stat
select
state_code,
count(*),
min(times_purchased),
avg(times_purchased)
from customers
group by state_code
/
结果是:
ST COUNT(*) MIN(TIMES_PURCHASED) AVG(TIMES_PURCHASED)
-- ---------- -------------------- --------------------
NJ 1 15 15
NY 994898 0
CT 5099 0
MO 1 25 25
FL 1 3 3
5 rows selected.
Elapsed: 00:00:
Execution Plan
----------------------------------------------------------
Plan hash value: 1577413243
--------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |
--------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 5 | 30 | 1846 (25)| 00:00:23 |
| 1 | HASH GROUP BY | | 5 | 30 | 1846 (25)| 00:00:23 |
| 2 | TABLE ACCESS FULL| CUSTOMERS | 1000K| 5859K| 1495 (7)| 00:00:18 |
--------------------------------------------------------------------------------
Statistics
----------------------------------------------------------
1 recursive calls
0 db block gets
5136 consistent gets
5128 physical reads
0 redo size
760 bytes sent via to client
420 bytes received via from client
2 roundtrips to/from client
0 sorts (memory)
0 sorts (disk)
5 rows processed
几点注意事项:
解释计划说明执行了全表扫描。
共有 5,136 次连续的获取(逻辑 I/O)。
执行时间 秒。
因为表几乎没变,您可以使用提示来存储要缓存到内存中的查询结果:
select /*+ result_cache */
state_code,
count(*),
min(times_pur
java缓存和数据池 来自淘豆网m.daumloan.com转载请标明出处.