问题:有一张表,里面仅有几百最多不过几千条记录,而业务需要,每条都要对此表进行N(上万)次的查询操作,有什么方法可以大大缩短查询此表的响应时间?
解答(不一定是唯一方法,但是很有效):将此表放于keep池中,
keep池的数据可以只要被load进内存以后,就可以常驻内存中,哪怕使用alter system flush shared pool也不会将他们调出,这样就可以大大提高这些数据的访问速度
oracle 7 以前
alter table tab_name cache;
oracle 8 及以后
alter table tab_name storage (buffer_pool keep);
对于不常用的大表全表扫描的表保存在回收池,以便不影响其他对象正常的使用默认BUFFER池,但是在初始配置时要先设置KEEP池和回收池,他不是share pool大小的一部分,数据库启动后就不能动态的修改他。
附:keep池详细介绍(摘抄,原文作者别跟我打官司哈)
二. KeepPool 相关测试
2.1 keep基本测试
-- 查看SGA 信息
SYS@anqing2(rac2)> select * fromv$sgainfo;
NAME BYTES RES
--------------------------------------------- ---
Fixed SGA Size 1267068 No
Redo Buffers 2924544 No
Buffer Cache Size 150994944 Yes
Shared Pool Size 113246208 Yes
Large Pool Size 4194304 Yes
Java Pool Size 4194304 Yes
Streams Pool Size 8388608 Yes
Granule Size 4194304 No
Maximum SGA Size 285212672 No
Startup overhead in Shared Pool 46137344 No
Free SGA Memory Available 0
11 rows selected.
--查看 keeppool 大小
SYS@anqing2(rac2)> show parameterdb_keep_cache_size
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_keep_cache_size big integer 0
--查看db_cache_size大小
SYS@anqing2(rac2)> SELECT x.ksppinm NAME,y.ksppstvl VALUE, x.ksppdesc describ FROM SYS.x$ksppi x, SYS.x$ksppcv y WHEREx.indx = y.indx AND x.ksppinm LIKE '%__db_cache_size%';
NAME VALUE DESCRIB
--------------- --------------- ------------------------------------------------
__db_cache_size 150994944 Actual size of DEFAULT buffer pool forstandard
--手动指定keeppool
SYS@anqing2(rac2)> alter system set db_keep_cache_size=50Mscope=both sid='anqing2';
System altered.
-- 查看db_keep_cache_size和 db_cache_size 大小
SYS@anqing2(rac2)> show parameterdb_keep_cache_size
NAME TYPE VALUE
----------------------------------------------- ------------------------------
db_keep_cache_size big integer 52M
SYS@anqing2(rac2)> SELECT x.ksppinmNAME, y.ksppstvl VALUE, x.ksppdesc describ FROM SYS.x$ksppi x, SYS.x$ksppcv yWHERE x.indx = y.indx AND x.ksppinm LIKE '%__db_cache_size%';
NAME VALUE DESCRIB
-------------------------------------------------- ----------------------------
__db_cache_size 96468992 Actual size of DEFAULT buffe
-- 这个验证增加db_keep_cache_size时,db_cache_size 就会减小。
--表keep 到keepbuffer
SYS@anqing2(rac2)> create table t1 asselect * from dba_objects;
Table created.
SYS@anqing2(rac2)> alter table t1storage(buffer_pool keep);
Table altered.
--或者
SYS@anqing2(rac2)> create table t1storage(buffer_pool keep) as select * from dba_objects;
Table created.
--查看放入Keep的对象
SYS@anqing2(rac2)> select segment_name from dba_segments whereBUFFER_POOL = 'KEEP';
SEGMENT_NAME
----------------------------------------
T1
--查看表的大小
SYS@anqing2(rac2)> selectbytes/1024/1024||'M' from dba_segments where segment_name='T1';
BYTES/1024/1024||'M'
-----------------------------------------
6M
--select 全表,把数据加载到keep pool
SYS@anqing2(rac2)> set autot traceonlystat
SYS@anqing2(rac2)> select * from t1;
50261 rows selected.
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
705 consistent gets
691 physical reads
0 redo size
2116604 bytes sent via SQL*Net toclient
510 bytes received via SQL*Netfrom client
12 SQL*Net roundtrips to/fromclient
0 sorts (memory)
0 sorts (disk)
50261 rows processed
SYS@anqing2(rac2)> /
50261 rows selected.
Statistics
----------------------------------------------------------
0 recursive calls
0 db block gets
705 consistent gets
0 physical reads
0 redo size
2116604 bytes sent via SQL*Net to client
510 bytes received via SQL*Netfrom client
12 SQL*Net roundtrips to/fromclient
0 sorts (memory)
0 sorts (disk)
50261 rows processed
--第二次查询没有了物理读,数据已经刷到了keep pool 里。
--查看db_keep_cache_size实际占用空间
/* Formatted on 2011/7/2 17:15:15(QP5 v5.163.1008.3004) */
SELECT SUBSTR (SUM (b.NUMBER_OF_BLOCKS) * 8129 / 1024 / 1024, 1, 5) || 'M'Total_Size
FROM ( SELECT o.OBJECT_NAME, COUNT (*)NUMBER_OF_BLOCKS
FROMDBA_OBJECTS o, V$BHbh,dba_segments dd
WHERE o.DATA_OBJECT_ID= bh.OBJD
AND o.OWNER = dd.owner
AND dd.segment_name= o.OBJECT_NAME
AND dd.buffer_pool != 'DEFAULT'
GROUP BY o.OBJECT_NAME
ORDER BY COUNT (*)) b;
TOTAL_SIZE
-----------
9.566M
-- 取消keep
默认情况下数据是放到default pool的,所以,我们取消keep,只需要重新指定存储位置到default即可。
SYS@anqing2(rac2)> alter table t1 storage(buffer_pool default);
Table altered.
--查看keep
SYS@anqing2(rac2)> select segment_namefrom dba_segments where BUFFER_POOL = 'KEEP';
no rows selected
相关推荐
Oracle数据库的KEEP池是Oracle 8.0及更高版本中引入的一个高级特性,它允许数据库管理员(DBA)对数据缓存进行更精细化的管理。KEEP池的主要目的是为那些经常被访问但又容易因缓存竞争而被挤出缓存的段提供一个专门的...
特别是那些较小且访问频率高的索引,将其置于SGA的buffer中keep池可以显著加快响应时间。但对于更新频繁的大表或索引,不宜放入keep池,以免频繁的写操作导致cache的污染和老化。 总之,Oracle数据库规范涉及面广,...
` 可以将表存储在特定的缓冲池中,如KEEP池,以优化小表访问。 17. **检查数据库状态**: 可以使用`V$SESSION`视图检查会话信息,`V$INSTANCE`查看实例状态,或`V$DATABASE`了解数据库状态。 以上只是Oracle查询...
2. **索引优化**:对于频繁使用的较小索引,可以直接放入buffer的keep池中以提高查询效率。对于较大或更新频繁的表或索引,则不建议放置在keep池中。 #### 六、总结 通过遵循Oracle数据库规范,不仅可以提升数据库...
Oracle命令大全涵盖了...`将小表放入KEEP池,提高查询性能。 以上就是Oracle命令大全中涉及的主要知识点,它们构成了Oracle数据库日常管理的基础。了解和熟练掌握这些命令,对于数据库管理员和开发人员来说至关重要。
2. 缓存小表全表扫描:对于适合全表扫描的小表,可以将其放入KEEP池中,加快访问速度。 3. 优化索引的使用:检查并确保Oracle正确使用了索引,以提高查询速度。 4. 优化连接方法:调整查询中的连接策略,以减少资源...
KEEP池保留对象以减少I/O,而RECYCLE池则在使用后清理对象,以便重复使用内存。 13. **circuits**: 多线程服务器(MTS)中的参数,定义了可以用于网络会话的虚拟电路数量。 以上是Oracle初始化参数的一部分详解,...
- 高频使用的索引可放入库缓存的keep池,提高效率。 以上是Oracle原厂数据库规范中的主要知识点,这些规范有助于优化数据库性能,减少潜在的问题,并提升整体系统效率。在实际应用中,应结合具体业务场景灵活运用...
- `ALTER TABLE xxx STORAGE (BUFFER_POOL keep)`:将表`xxx`的存储设置为KEEP池,用于优化小表访问。 17. **检查组件安装**: - 未提供具体方法,通常使用`SELECT * FROM v$option`查询数据库支持的功能,或者...
- KEEP配置不合理:调整KEEP池设置,确保热点对象的保持。 - 跨实例查询性能不佳:采用本地镜像表,定期进行数据同步。 ### 性能问题分析 - **IO响应时间**:通过sar命令对主机磁盘进行每3秒采样,来监控主机的IO...
29. **将表放入Keep池** - `ALTER TABLE xxx STORAGE (BUFFER_POOL keep);` 将表xxx放置在keep缓存池中,提高其访问性能。 30. **检查已安装的Patch** - 通过检查 Oracle Inventory (`oraInventory`) 目录来...
2. **缓存策略**:调整Buffer Cache和Redo Log Buffer的大小,以及利用Data Block、Shared Pool和Keep池,优化数据读取和写入速度。 四、并行处理 1. **并行查询**:Oracle 10g支持并行查询,将大任务分解为多个子...
这些策略通常基于连接的空闲时间、服务器的Keep-Alive策略以及连接的健康状态。如果一个连接长时间未使用或者服务器已经关闭了连接,OkHttp会将其从连接池中移除,防止资源浪费。 3. **连接池的大小限制**:为了...
这表明Keep面临着来自其他互联网平台如抖音、B站、小红书等提供丰富健身直播和录播课程的竞争压力,用户池的维护变得越来越困难。 Keep的线上业务模式可能存在的一个问题是缺乏足够的社交互动,这可能导致用户的...
总结来说,"springboot-keepalive设置测试"涉及到的关键知识点包括:Spring Boot的HTTP连接池配置,特别是与keepalive相关的`keep-alive-timeout`属性;使用Jodd HttpClient进行HTTP客户端测试,以及理解HTTP长连接...
4. **监控和调整连接池**:定期检查连接池的状态,根据实际负载动态调整连接池大小。 5. **使用代理**:如果需要通过代理服务器进行请求,可以使用`ProxyManager`替代`HTTPAdapter`,它会为每个代理创建单独的连接...
`keep-alive` 通过维护一个组件实例的缓存池来实现这一功能。 ### 2. 生命周期钩子 `keep-alive` 组件提供了两个特有的生命周期钩子: - `activated`: 当组件被激活(即重新进入可视区域)时调用,相当于组件的...
4. 游戏关卡:游戏包含多个关卡,每个关卡有不同的地形和挑战,如游泳池关卡需要使用浮莲植物,屋顶关卡则需要利用投掷植物。 5. 游戏模式:除了主线关卡外,还有无尽模式、迷你游戏模式、解谜模式等,增加了游戏的...