`
thinkerAndThinker
  • 浏览: 276306 次
  • 性别: 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

    KEEP池的使用十分简单,设置DB_KEEP_CACHE_SIZE的值大于0,就可以将其他对象的BUFFER_POOL参数设置为KEEP了。

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

    现在开发的缓存刷新系统,对于性能还是有些敏感的,我后面会给出最优的http长连接池构建方式。 老生常谈: python下的httpclient库哪个最好用? 我想大多数人还是会选择requests库的。原因么?也就是简单,易用! ...

    SimpleHttpServer-IOCP模型作为高性能IO模型.zip

    ## 说明 IOCP模型作为高性能IO模型,线程本地内存池,文件缓存,...[] Keep-Alive处理 [] SOCKET哈希到线程处理? 4. HTTP响应书写 [] 与HTTP请求关联 5. HTTP文件传输 [] TransmitFile 6. 统计模块 [x] 基础

    数据库参数设置技术手册

    4.1 BUFFER_POOL_KEEP 4 4.2 CPU_COUNT 4 4.3 DB_BLOCK_BUFFERS 4 4.4 DB_BLOCK_SIZE 5 4.5 DB_FILE_MULTIBLOCK_READ_COUNT 5 4.6 GLOBAL_NAMES 5 4.7 INSTANCE_NAME 5 4.8 LICENSE_MAX_SESSIONS 5 4.9 LICENSE_MAX_...

    requests-2.22.0.tar.gz

    最新版requests模块。 ... 用python编写。 比urllib2模块更简洁。...Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际...requests会自动实现持久连接keep-alive

    bleach-log-server:跟踪热水浴缸或游泳池的漂白剂水平

    漂白日志服务器跟踪热水浴缸或游泳池的漂白剂水平用法 bleach-log-server OPTIONS Keep track of bleach levels in a hot tub or a pool. This command starts the server. -d --datadir Store log data in this ...

    Blender插件开发-HTTP 客户端

    Requests允许您非常容易的发送HTTP/1.1请求,无需手动向URL添加查询字符串,也不需要对表单数据进行格式编码。由于使用了urllib3,Keep-alive和HTTP 连接池的功能是100%自动化的。

    python爬虫入门教程--优雅的HTTP库requests(二)

    requests 实现了 HTTP 协议中绝大部分功能,它提供的功能包括 Keep-Alive、连接池、Cookie持久化、内容自动解压、HTTP代理、SSL认证等很多特性,下面这篇文章主要给大家介绍了python爬虫入门中关于优雅的HTTP库...

    ORACLE DBA 手册

    调整JAVA池缓冲区 26 PRE_PAGE_SGA 27 LOCK_SGA 27 use_indirect_data_buffers 28 pga_aggregate_target: 28 SGA_TARGET 28 调整表空间 30 避免动态空间管理Oracle数据库增长空间是就以区的单位扩展的,区由块组成,...

    Python爬虫requests库教程(附案例)

    Requests 是一个为人类设计的简单而优雅的 HTTP 库。requests 库是一个原生的 HTTP 库,比 urllib3 ...相对于 urllib3 库, requests 库拥有完全自动化 Keep-alive 和 HTTP 连接池的功能。requests 库包含的特性如下。

    Python之渗透测试笔记(五) ——Requests模块

    Requests模块Requests模块简介Request...Keep-Alive & 连接池 国际化域名和 URL 带持久 Cookie 的会话 浏览器式的 SSL 认证 自动内容解码 基本/摘要式的身份认证 优雅的 key/value Cookie 自动解压 Unicode 响应体 HTT

    python爬虫入门教程–优雅的HTTP库requests(二)

    前言 urllib、urllib2、urllib3、httplib、httplib2 都是和 HTTP 相关的 Python 模块,看名字就觉得很... ... requests 实现了 HTTP 协议中绝大部分功能,它提供的功能包括 Keep-Alive、连接池、Cookie持久化、内容自动解

    Python requests模块基础使用方法实例及高级应用(自动登陆,抓取网页源码)实例详解

    1、Python requests模块说明 ... 用python编写。 比urllib2模块更简洁。 Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动...requests会自动实现持久连接keep-alive 2、Python requests

    android_external_koush_ion

    通过 HTTP 连接的连接池/重用:keep-alive 如果服务器有多个 IP 地址,则使用来自服务器的最佳/最稳定的连接 饼干 查看收到的标头 请求的分组和取消 下载进度回调 支持 file:/、http(s):/ 和 content:/ URI 请求...

    Oracle 数据库优化实战心得总结

    1.优化应用程序和业务逻辑,这个是最重要的。 2.数据库设计阶段范式和反范式的灵活应用。一般情况下,对于频繁访问但是... 2)尽量使用相同的或非常类似的SQL语句进行查询,这样不仅充分利用SQL共享池中的已经分析的语

    操作系统(内存管理)

    /* Keep going until we have searched all allocated space */ while(current_location != last_valid_address) { /* current_location and current_location_mcb point * to the same address. However, ...

    内存管理内存管理内存管理

    文中将为您提供如何管理内存的细节,然后将进一步展示如何手工管理内存,如何使用引用计数或者内存池来半手工地管理内存,以及如何使用垃圾收集自动管理内存。 为什么必须管理内存 内存管理是计算机编程最为基本的...

    c3p0-0.9.5.1.zip

    数据库连接池的架c3p0

    spring-cloud-gateway-sample:示例Spring Cloud Gateway应用程序

    keep-aliveContent-Length: 257Content-Type: application/jsonDate: Fri, 13 Oct 2017 15:36:12 GMTExpires: 0Pragma: no-cacheServer: meinheld/0.6.1Via: 1.1 vegurX-Content-Type-Options: nosniffX-Frame-...

    2017最新大数据架构师精英课程

    47_mysql数据源连接池 48_NIO" d% v1 P# ~3 S/ L 49_NIO程序- u5 T2 a5 N" {! @8 q4 c 50_Vmware安装-client centos7机安装2 Q. l/ r7 y) ^% n8 |4 _. k 51_centos文件权限-常用命令 52_网络静态ip-NAT连接方式-YUM...

Global site tag (gtag.js) - Google Analytics