`
thinkerAndThinker
  • 浏览: 286772 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

keep池

 
阅读更多

问题:有一张表,里面仅有几百最多不过几千条记录,而业务需要,每条都要对此表进行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池.docx

    Oracle数据库的KEEP池是Oracle 8.0及更高版本中引入的一个高级特性,它允许数据库管理员(DBA)对数据缓存进行更精细化的管理。KEEP池的主要目的是为那些经常被访问但又容易因缓存竞争而被挤出缓存的段提供一个专门的...

    数据库规范

    特别是那些较小且访问频率高的索引,将其置于SGA的buffer中keep池可以显著加快响应时间。但对于更新频繁的大表或索引,不宜放入keep池,以免频繁的写操作导致cache的污染和老化。 总之,Oracle数据库规范涉及面广,...

    oracle查询语句大全.docx

    ` 可以将表存储在特定的缓冲池中,如KEEP池,以优化小表访问。 17. **检查数据库状态**: 可以使用`V$SESSION`视图检查会话信息,`V$INSTANCE`查看实例状态,或`V$DATABASE`了解数据库状态。 以上只是Oracle查询...

    Oracle数据库规范

    2. **索引优化**:对于频繁使用的较小索引,可以直接放入buffer的keep池中以提高查询效率。对于较大或更新频繁的表或索引,则不建议放置在keep池中。 #### 六、总结 通过遵循Oracle数据库规范,不仅可以提升数据库...

    oracle命令大全

    Oracle命令大全涵盖了...`将小表放入KEEP池,提高查询性能。 以上就是Oracle命令大全中涉及的主要知识点,它们构成了Oracle数据库日常管理的基础。了解和熟练掌握这些命令,对于数据库管理员和开发人员来说至关重要。

    SQL对ORACLE优化的探讨.pdf

    2. 缓存小表全表扫描:对于适合全表扫描的小表,可以将其放入KEEP池中,加快访问速度。 3. 优化索引的使用:检查并确保Oracle正确使用了索引,以提高查询速度。 4. 优化连接方法:调整查询中的连接策略,以减少资源...

    oracle初始化参数

    KEEP池保留对象以减少I/O,而RECYCLE池则在使用后清理对象,以便重复使用内存。 13. **circuits**: 多线程服务器(MTS)中的参数,定义了可以用于网络会话的虚拟电路数量。 以上是Oracle初始化参数的一部分详解,...

    Oracle原厂数据库规范.ppt

    - 高频使用的索引可放入库缓存的keep池,提高效率。 以上是Oracle原厂数据库规范中的主要知识点,这些规范有助于优化数据库性能,减少潜在的问题,并提升整体系统效率。在实际应用中,应结合具体业务场景灵活运用...

    oracle查询语句大全.pdf

    - `ALTER TABLE xxx STORAGE (BUFFER_POOL keep)`:将表`xxx`的存储设置为KEEP池,用于优化小表访问。 17. **检查组件安装**: - 未提供具体方法,通常使用`SELECT * FROM v$option`查询数据库支持的功能,或者...

    Oracle专家白鳝 从一个案例看性能优化与系统优化.pdf

    - KEEP配置不合理:调整KEEP池设置,确保热点对象的保持。 - 跨实例查询性能不佳:采用本地镜像表,定期进行数据同步。 ### 性能问题分析 - **IO响应时间**:通过sar命令对主机磁盘进行每3秒采样,来监控主机的IO...

    SQL语句大全

    29. **将表放入Keep池** - `ALTER TABLE xxx STORAGE (BUFFER_POOL keep);` 将表xxx放置在keep缓存池中,提高其访问性能。 30. **检查已安装的Patch** - 通过检查 Oracle Inventory (`oraInventory`) 目录来...

    让Oracle跑得更快.pdf-Oracle 10g 性能分析与优化思路

    2. **缓存策略**:调整Buffer Cache和Redo Log Buffer的大小,以及利用Data Block、Shared Pool和Keep池,优化数据读取和写入速度。 四、并行处理 1. **并行查询**:Oracle 10g支持并行查询,将大任务分解为多个子...

    okhttp中连接池实现

    这些策略通常基于连接的空闲时间、服务器的Keep-Alive策略以及连接的健康状态。如果一个连接长时间未使用或者服务器已经关闭了连接,OkHttp会将其从连接池中移除,防止资源浪费。 3. **连接池的大小限制**:为了...

    Keep再度探索线下健身业务 -moonfox.pdf

    这表明Keep面临着来自其他互联网平台如抖音、B站、小红书等提供丰富健身直播和录播课程的竞争压力,用户池的维护变得越来越困难。 Keep的线上业务模式可能存在的一个问题是缺乏足够的社交互动,这可能导致用户的...

    springboot-keepalive设置测试

    总结来说,"springboot-keepalive设置测试"涉及到的关键知识点包括:Spring Boot的HTTP连接池配置,特别是与keepalive相关的`keep-alive-timeout`属性;使用Jodd HttpClient进行HTTP客户端测试,以及理解HTTP长连接...

    构建高效的python requests长连接池详解

    4. **监控和调整连接池**:定期检查连接池的状态,根据实际负载动态调整连接池大小。 5. **使用代理**:如果需要通过代理服务器进行请求,可以使用`ProxyManager`替代`HTTPAdapter`,它会为每个代理创建单独的连接...

    Vue中 key keep-alive的实现原理

    `keep-alive` 通过维护一个组件实例的缓存池来实现这一功能。 ### 2. 生命周期钩子 `keep-alive` 组件提供了两个特有的生命周期钩子: - `activated`: 当组件被激活(即重新进入可视区域)时调用,相当于组件的...

    Keep PlantsvsZombies

    4. 游戏关卡:游戏包含多个关卡,每个关卡有不同的地形和挑战,如游泳池关卡需要使用浮莲植物,屋顶关卡则需要利用投掷植物。 5. 游戏模式:除了主线关卡外,还有无尽模式、迷你游戏模式、解谜模式等,增加了游戏的...

Global site tag (gtag.js) - Google Analytics