台式机休眠了怎么唤醒无操作黑屏后(没休眠)再点亮屏幕响应时间很慢,4-5秒左右屏幕才会点亮,请问是什么原因?

Mysql的innodb缓冲池管理
我的图书馆
Mysql的innodb缓冲池管理
在数据库数据处理中, 缓冲在改善性能方面扮演着很重要的角色, 为了保证性能, innodb 维护了自己的缓冲池。 文章大体介绍一下innodb缓冲区实现和管理策略。在innodb中,需要用到数据页(需要保存到磁盘的数据)均是从这个缓冲池里分配出来的, 因此,可以说,缓冲池在对innodb的性能有很大的影响。几个基本的概念AWE:地址窗口化扩展,允许在 32 位版本的 Windows 操作系统上使用 4 GB 以上的物理内存。最多可支持 64 GB 的物理内存。更多信息请看 /view/1390438.htm; innodb是支持AWE内存管理的Frame;帧,16K的虚拟地址空间, 在缓冲池的管理上,整个缓冲区是是以大小为16k的frame(可以理解为数据块)为单位来进行的,frame是innodb中页的大小。Page: 页,16K的物理内存, page上存的是需要保存到磁盘上的数据, 这些数据可能是数据记录信息, 也可以是索引信息或其他的元数据等;Control Block:控制块,对于每个frame, 有一个block, block上的信息是专门用于进行frame控制的管理信息, 但是这些信息不需要记录到磁盘,而是根据读入数据块在内存中的状态动态生成的, 主要包括: 1. 页面管理的普通信息,互斥锁, 页面的状态, awe(windows平台上awe机制的管理信息)等 2. 脏回写(flush)管理信息3. lru控制信息 4. 快速查找的管理信息, 为了便于快速的超找某一个block或frame, 缓冲区里面的block被组织到一些hash表中; 缓冲区中的block的数量是一定得, innodb缓冲区对所管理的block用lru策略进行替换。互斥访问缓冲池的整个缓冲区有一个数据结构buf_pool进行管理和控制, 有一个专门的mutex保护着, 这个mutex是用来保护buf_pool这个控制结构中的数据域的, 并不保护缓冲区中的数据frame以及用于管理的block, 缓冲区里block或者frame中的访问是由专门的读写锁来保护的, 每个block/frame有一个。在5.1以前, 每个block是没有专门的mutex保护的,如果需要进行互斥保护,直接使用缓冲区的mutex, 结果导致很高的争用; 5.1以后,每个block有一个mutex对其进行保护, 从而在很大程度上解缓了对buf_pool的mutex的争用。缓冲池管理用到的几个重要的列表在缓冲区的管理中, 有几个重要的block列表(双向链表):LRU列表: 用来进行lru管理的列表, 列表里的每个block所控制的数据都是当前有效的数据;列表中的block基本是按照访问的顺序排列的;最近被访问的放在最前面, 最先被方位的放在最后;lru列表中维护中维护了一个LRU_old, 大概指向整个列表的倒数3/8左右, 当增加一个新的block(主语与最近被访问的block的区别)进来的时候, 把新的块刚好放到这个点附近, 具体是前还是后取决于这个LRU_old目前的位置, 这么做的目的是使新增加进来的block放到一个合适的位置, 不至于放到最先(最近被使用过)或最后(最老)flush列表: 列表block是那些所管理的数据被修改但是还没有更新到磁盘的脏frame, 根据修改的先后顺序排列的block列表, 最老的放最后。innodb起来后, 主线程会定期去检查缓冲区中可用空闲block的数量的比例, 一旦大于srv_max_buf_pool_modified_pct(90%), 就会试图把一些脏页flush到磁盘;除了主线程会定期做这个事情外,工作线程在进行数据操作时 ,如果发现没有如果的block, 也会通过flush一些脏页来腾出空间。free list, 所有空闲block的列表, 当需要分配一个block时, 从中取出一个block。awe_LRU_free_mapped: 用于方便awe的block列表, 这些block所管理的page已经映射到了frame(物理内存有对应的虚拟内存空间),其中的元素必定也处于free列表或lru列表中。 这个列表会在当分配一个awe页面时用到。adaptive hash search: 缓冲区中的页面是通过双向列表的方式组织起来的, 如果需要查找根据页号查找某个页面block的话, 速度不会快,尤其是数据块多的时候; 为了加速查找过程,在用双向列表组织block的时候,也采用了adaptive hash的数据组织, hash的键值(key)是页号(数据页在所在表空间的编号), 这个在一定程度上能加速block的查找, 但是当以awe方式管理内存的话,这种hash查找方式不会启用当读入页面的时候, 首先需要找到一个可用的block, 这个block或者来自于free list或者lru- 在读入数据块的时候, block会加上排他锁以防止其他线程再次使用这个block,会在block中标记出这个块正处于io状态, 然后把io请求加入到io调用请求对列; 完成读入操作时, 再释放block上的拍它锁更新io状态。数据页面的读取写入缓冲池中的数据基本是采用同步aio的方式,这里的同步aio的意思是: 工作线程发出读或写请求后,请求会被放到一个读写请求队列中,由专门的io线程负责写盘和读盘,而工作线程则等待io的完成,注意, 这里是等待完成,而不会放弃执行,因而称作为同步aio.提前读(预读)机制为了优化数据读入性能, 缓冲区读入采取了提前读的机制(当然,这个机制可以配置成不激活),当然, 提前读的机制是基于数据局部性的原理来的,这就是为什么采用取值过于随机的字段作为主键会导致性能降低的原因之一:过于随机的主键会导致提前读不起作用, 而且会导致更多的换页行为; 这个预读取对于上层的功能如索引管理是透明的,对于上层的功能来说, 需要提供的信息是需要读取的页是否有后继页和前置页。 有两种预读机制: 线性预读和随机预读线性预读: 当第一读缓冲区中某一个已经存在(注意,这里必须是已经存在于缓冲区额数据块)的数据块时, 会检查这个数据块是不是处于所谓的线性预读区域(比如, 区域大小是64, 当前读入的也是100,那么所在的预读区域是65 ~ 128),如果是, 则统计一下这个区域中目前没有被访问过的页面,如果数量多于预读机制设定的预读数量,则放弃本次预读, 这个其实是检查目前的区域是否还有大量的页面没有被访问过, 如果是的话, 自然没有必要去做预读了; 否则, 取得读取页面的后继页和前置页(按照数据页的自然顺序?,然后检查后继页或者前置页是否是一个新区域的边界,如果是, 则发出读取该区域里面的数据页面的异步请求。随机读: 当读取一个页面时, 根据所读取页的位置计算出该页面所在的随机预读区域, 区域的计算也基于设定的区域页面数量来计算的(如前面关于线性预读的例子), 然后根据lru对列的信息计算该区域中有多少块最近被访问到了, 如果被访问的数量达到一定的额度(这个额度是根据预读区域的大小计算出来的, 5 + 预读区域大小 / 8),则预读取该区域中目前还没有读取到缓冲区的块.show innodb status&中关于buffer pool的输出Buffer pool size 262144&整个缓冲池中的页的数量,&包括flush列表中的和flush列表中的,以及被分配出去的页的数量Free buffers 0&&&&&&&&&&&free列表中的页的数量Database pages 258053&&&&分配出去,&正在被使用页的数量Modified db pages 37491&flush列表中的数量Pending reads 0&&&&&&&&&&发出了请求但没有完成的io读个数Pending writes: LRU 0, flush list 0, single page 0&发出了请求但没有完成的io读个数在各个列表上的体现Pages read , created 251137, written ,&从磁盘上读取出来的页数,&在内存中建立了页面但是没有从磁盘上读取出来的页面数以及写入了的页面数9.79 reads/s, 0.31 creates/s, 6.00&在刚过去的时间间隔里,&平均每秒的读取数和新建数Buffer pool hit rate 999 / 1000&&&&&&&命中率,&缓冲区中读到的页&/&总共发出的读页数与缓冲池相关的状态变量及含义| Innodb_buffer_pool_pages_data&&&&&&分配出去,&正在被使用页的数量| Innodb_buffer_pool_pages_dirty&&&&&脏页但没有被flush除去的页面数| Innodb_buffer_pool_pages_flushed&&&&&已经flush的页面数| Innodb_buffer_pool_pages_free&&&&&&&&当前空闲页面数| Innodb_buffer_pool_pages_latched&&&&&当前被锁住的页面数| Innodb_buffer_pool_pages_misc&&&&&&&&用于管理功能的页面数,&如adaptive hash等| Innodb_buffer_pool_pages_total&&&&缓冲区总共的页面数| Innodb_buffer_pool_read_ahead_rnd&&&&&随机预读的次数| Innodb_buffer_pool_read_ahead_seq&线性预读的次数| Innodb_buffer_pool_read_requests&总共从缓冲池中缓存的页面中读取出的页数| Innodb_buffer_pool_reads&&&&&&&&&&&&&从磁盘上一页一页的读取的页数,从缓冲池中读取页面,&但缓冲池里面没有,&就会从磁盘读取| Innodb_buffer_pool_wait_free&&&&&&&&缓冲池等待空闲页的次数,&当需要空闲块而系统中没有时,&就会等待空闲页面| Innodb_buffer_pool_write_requests&缓冲池总共发出的写请求次数| Innodb_data_fsyncs&&&&&&&&&&&&&&&&&&&&总共完成的fsync次数| Innodb_data_pending_fsyncs&&&&&&&&&&&innodb当前等待的fsync次数| Innodb_data_pending_reads&&&&&&&&&&innodb当前等待的读的次数| Innodb_data_pending_writes&&&&&&&&&&&innodb当前等待的写的次数| Innodb_data_read&&&&&&&&&&&&&&&&&&&&&&&|&&&&总共读入的字节数| Innodb_data_reads&&&&&&&&&&&&&&&&&&&&&&innodb完成的读的次数| Innodb_data_writes&&&&&&&&&&&&&&&&&&&innodb完成的写的次数| Innodb_data_written&&&&&&&&&&&&&&&&&总共写出的字节数关于缓冲池的关键的配置变量innodb_buffer_pool_size:&缓冲池的大小
TA的最新馆藏[转]&4360人阅读
数据库DB2(61)
DB2 缓冲池调优Bufferpools
缓冲池是内存中的一块存储区域,用于临时读入和更改页(包含表行或索引项)。缓冲池的用途是为了提高数据库系统的性能。从内存访问数据要比从磁盘访问数据快得多。因此,数据库器需要从磁盘读取或写入磁盘的次数越少,性能就越好。对一个或多个缓冲池进行配置之所以是调优的最重要方面,是因为连接至数据库的应用程序的大多数数据(不包括大对象和长字段数据)操作都在缓冲池中进行。
缺省情况下,应用程序使用缓冲池 IBMDEFAULTBP,它是在创建数据库时创建的。当 SYSCAT.BUFFERPOOLS 目录表中该缓冲池的 NPAGES 值为 -1 时, 数据库配置参数 BUFFPAGE 控制着缓冲池的大小。否则会忽略 BUFFPAGE 参数,并且用 NPAGES 参数所指定的页数创建缓冲池。
对于仅使用一个缓冲池的应用程序,将 NPAGES 更改成 -1,这样 BUFFPAGE 就可以控制该缓冲池的大小。这使得更新和报告缓冲池大小以及其它 DB2 数据库配置参数变得更加方便。
确保可以使用数据库配置中的 BUFFPAGE 参数来控制缓冲池大小之后,将该参数设置成合适的值。根据数据库的大小和应用程序的性质将该参数设置成一个合理的大值,这种做法很安全。通常,该参数的缺省值非常小,可能满足不了要求。请考虑下列情况:
一开始,如果您的机器上有足够大的内存,请将 BUFFPAGE 设置成 40000 个页(160 MB),或者等于机器总内存的 10%。&
对于大型 OLTP 数据库,在保持系统稳定的同时为缓冲池留出尽可能多的内存。一开始,先尝试使用 1.6 GB 的内存,然后尝试用更多内存。&
如何更改该参数
运行下面这个脚本,以便:&
验证目录值&
启用数据库配置参数 BUFFPAGE&
更新所有数据库的 BUFFPAGE 值。&
db2 -v connect to DB_NAME
db2 -v select * from syscat.bufferpools
db2 -v alter bufferpool IBMDEFAULTBP size -1
db2 -v connect reset
db2 -v update db cfg for dbname using BUFFPAGE bigger_value
db2 -v terminate
要确定数据库的缓冲池大小是否由 BUFFPAGE 参数所决定,请运行:
db2 -v connect to DB_NAME
db2 -v SELECT * from SYSCAT.BUFFERPOOLS
db2 -v connect reset
db2 -v terminate
检查结果。如果每个缓冲池都有一个为“-1”的 NPAGES 值,那么缓冲池大小是由数据库配置中的 BUFFPAGE 参数控制的。
要确定缓冲池大小是否足够大,请在运行应用程序时收集数据库和/或缓冲池的快照。类似于下面的脚本为您提供这些所需的信息:
db2 -v update monitor switches using bufferpool on
db2 -v get monitor switches
db2 -v reset monitor all
-- run your application --
db2 -v get snapshot for all databases & snap.out
db2 -v get snapshot for dbm && snap.out
db2 -v get snapshot for all bufferpools && snap.out
db2 -v reset monitor all
db2 -v terminate
请确保您在断开数据库连接之前发出“db2 -v get snapshot”。当最后一个应用程序与数据库断开连接时,该数据库停止运行,同时所有快照统计信息将会丢失。要确保一直存在使数据库处于正常运行状态的连接,请使用下列方法之一:
在收集快照的窗口中保持一个单独的连接。&
使用 DB2 ACTIVATE DATABASE 命令。
在数据库快照或缓冲池快照的快照输出中,查找下列“logical reads”和“physical reads”,这样就可以计算出缓冲池命中率,它可以帮助您调优缓冲池:
-- Related lines from a sample of bufferpool snapshots --
Buffer pool
logical reads = 702033
Buffer pool data physical reads = 0
Buffer pool data writes = 414
Buffer pool index logical reads = 168255
Buffer pool index physical reads = 0
缓冲池命中率表明数据库管理器不需要从磁盘装入页(即该页已经在缓冲池中)就能处理页请求的时间百分比。缓冲池的命中率越高,使用磁盘 I/O 的频率就越低。按如下计算缓冲池命中率:
(1 - ((buffer pool data physical reads + buffer pool index physical reads) /
(buffer pool data logical reads + pool index logical reads))
这个计算考虑了缓冲池高速缓存的所有页(索引和数据)。理想情况下,该比率应当超过 95%,并尽可能接近 100%。要提高缓冲池命中率,请尝试下面这些方法:
增加缓冲池大小。&
考虑分配多个缓冲池,如果可能的话,为每个经常被访问的大表所属的表空间分配一个缓冲池,为一组小表分配一个缓冲池,然后尝试一下使用不同大小的缓冲池以查看哪种组合会提供最佳性能。&
如果已分配的内存不能帮助提高性能,那么请避免给缓冲池分配过多的内存。应当根据取自测试环境的快照信息来决定缓冲池的大小。
缓冲池命中率
这个比率说明了为页面请求提供服务时,数据库管理器不需从磁盘装入页(即该页已经在缓冲池中)就能处理页请求的时间百分比。
BPHR = (1 - ((缓冲池数据物理读 + 缓冲池索引物理读) /
(缓冲池数据逻辑读 + 缓冲池索引逻辑读) ) ) * 100%
索引命中率
这个比率表明了可以在缓冲池中找到的页面能够满足的对索引页的所有读请求所占的百分比。
IHR = (1 - (缓冲池索引物理读 / 缓冲池索引逻辑读) ) ) * 100%
数据命中率
这个比率说明了可以在缓冲池中找到的页面能够满足的对数据页的所有读请求所占的百分比。
DHR = (1 - (缓冲池数据物理读 / 缓冲池数据逻辑读) ) ) * 100%
缓冲池命中率大于 80% 被认为是理想的。对于 OLTP 系统来说,该值的理想情况是尽可能接近于 100% (索引命中率更是如此)。
要提高缓冲池的命中率,可以增加缓冲池的大小,也可以考虑分配多个缓冲池,可以为每个经常访问的具有自己的表空间的大型表使用一个缓冲池,也可以为一组小型表使用一个缓冲池。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:207697次
积分:2630
积分:2630
排名:第12045名
原创:44篇
转载:109篇
评论:18条
(2)(1)(1)(2)(3)(2)(1)(1)(1)(2)(1)(1)(2)(1)(1)(1)(1)(6)(2)(4)(4)(1)(5)(4)(13)(4)(4)(3)(2)(9)(1)(5)(7)(3)(3)(2)(1)(1)(8)(11)(26)Sybase数据库中数据高速缓存配备详解
发布时间: 14:52:57
编辑:www.fx114.net 我要评论
本篇文章主要介绍了"Sybase数据库中数据高速缓存配备详解",主要涉及到Sybase数据库中数据高速缓存配备详解方面的内容,对于Sybase数据库中数据高速缓存配备详解感兴趣的同学可以参考一下。
Sybase数据库中数据高速缓存配备详解Sybase数据库中数据高速缓存配置详解
主要配置存储过程sp_cacheconfig语法:sp_cacheconfig cache_name, "size[P|K|M|G]" [,mixed|logonly] [,strict|relaxed] [,"cache_partition=[1|2|4|8|16|32|64]"]缓存大小最小为512K缓冲池大小分为三种:2K,4K,16K缓存使用功能上分为:缺省数据高速缓存(2K,16K),User_Table_Cache(2K,16K),Log_Cache(2K,4Kw)常用的命令:sp_cacheconfig 创建或删除命名缓冲区,改变缓冲区的大小或类型 sp_poolconfig 创建或删除I/O缓冲池,并改变其大小 sp_bindcache 将数据库或数据库对象捆绑到缓冲区 sp_unbindcache 从一个缓冲区中取消对指定对象或数据库的捆绑 sp_unbindcache_all 从一个缓冲区中取消所有对象的捆绑 sp_helpcache 报告有关数据缓冲区的小结信息,并显示捆绑于缓冲区的数据库和对象 sp_cachestrategy 报告有关为表,索引设置的缓冲区策略,禁止或重新允许先提或MSYBASE内存和缓冲区管理(rekcah0):sp_logiosize 为日志改变默认的I/O大小 sp_spaceused 估计表和索引大小或有关数据库使用的空间量的信息 sp_estspace 估计表和索引的大小,给出表包含的行的数目 sp_help 报告表将捆绑于哪个缓冲区 sp_helpindex 报告索引将捆绑于哪个缓冲区 sp_helpdb 报告数据库将捆绑于哪个缓冲区 setshowplanon 报告有关用于查询的I/O大小和缓冲区的应用策略 setstatisticsioon 报告为查询进行的读操作数量 setprefetch on/off 允许或禁止某个会话的预先提取 具体配置操作:给默认高速缓存配置缓存大小:sp_cacheconfig "default data cache","20M"分配缓冲池,默认是分配在2K缓冲池:sp_poolconfig "default data cache" , "10M","16K" 创建新的高速缓存并分配大小,缺省为mixed:sp_cacheconfig "test_data_cache","8M"16K缓冲池清洗区配置:sp_poolconfig "test_data_cache" ,"16K" , "wash=720K"set fmtonly offsp_cacheconfig查看缓存信息:Cache Name&&&&&&&&&&&&&&&&&&&& Status&&& Type&&&& Config Value Run Value&&& ----------&&&&&&&&&&&&&&&&&&&& ------&&& ----&&&& ------------ ---------&&& default data cache&&&&&&&&&&&& Active&&& Default&&&&& 20.00 Mb&&&& 20.00 Mb test_data_cache&&&&&&&&&&&&&&&&&&&& Active&&& Mixed&&&&&&&& 8.00 Mb&&&&& 8.00 Mb IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb&& 2048 Kb&&&&& 0.00 Mb&&&& 10.00 Mb&&&& 10&&&&& && 16 Kb&& 2048 Kb&&&& 10.00 Mb&&&& 10.00 Mb&&&& 10&&&&& IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb&& 1638 Kb&&&&& 0.00 Mb&&&&& 8.00 Mb&&&& 10&& 其中Type有三种值:Default,Mixed,Logonly分配3M给4K缓冲池:sp_poolconfig "test_data_cache","3M","4K"分配3M给16K缓冲池:sp_poolconfig "test_data_cache","3M","16K"sp_cacheconfig "test_data_cache" 查看缓存信息:Cache Name&&&&&&&&&&&&&&&&&&&& Status&&& Type&&&& Config Value Run Value&&& ----------&&&&&&&&&&&&&&&&&&&& ------&&& ----&&&& ------------ ---------&&& test_data_cache&&&&&&&&&&&&&&&&&&&& Active&&& Mixed&&&&&&&& 8.00 Mb&&&&& 8.00 Mb IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb&&& 408 Kb&&&&& 0.00 Mb&&&&& 2.00 Mb&&&& 10&&&&& &&& 4 Kb&&& 612 Kb&&&&& 3.00 Mb&&&&& 3.00 Mb&&&& 10&&&&& && 16 Kb&&& 608 Kb&&&&& 3.00 Mb&&&&& 3.00 Mb&&&& 10 && 清除4K缓冲池分配的空间:sp_poolconfig "test_data_cache", "0", "4K" sp_cacheconfig "test_data_cache" 查看缓存信息:Cache Name&&&&&&&&&&&&&&&&&&&& Status&&& Type&&&& Config Value Run Value&&& ----------&&&&&&&&&&&&&&&&&&&& ------&&& ----&&&& ------------ ---------&&& test_data_cache&&&&&&&&&&&&&&& Active&&& Mixed&&&&&&&& 8.00 Mb&&&&& 8.00 Mb IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb&& 1024 Kb&&&&& 0.00 Mb&&&&& 5.00 Mb&&&& 10&&&&& && 16 Kb&&& 608 Kb&&&&& 3.00 Mb&&&&& 3.00 Mb&&&& 10& && 清除16K缓冲池分配的空间:sp_poolconfig "test_data_cache", "0", "16K" sp_cacheconfig "test_data_cache" 查看缓存信息:Cache Name&&&&&&&&&&&&&&&&&&&& Status&&& Type&&&& Config Value Run Value&&& ----------&&&&&&&&&&&&&&&&&&&& ------&&& ----&&&& ------------ ---------&&& test_data_cache&&&&&&&&&&&&&&& Active&&& Mixed&&&&&&&& 8.00 Mb&&&&& 8.00 Mb IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb&& 1638 Kb&&&&& 0.00 Mb&&&&& 8.00 Mb&&&& 10&&&&& 清除2K缓冲池分配的空间不可行的,默认的清除不掉,而删除test_data_cache高速缓存可用命令:sp_cacheconfig "test_data_cache","0" 再用sp_cacheconfig查看时没有test_data_cache高速缓存了。&&&&&& 创建新的日志高速缓存并分配大小:sp_cacheconfig "test_log_cache","6M",logonly日志缓存大小不能大于最大内存大小,否则报错:Server Message:& Number& 5861, Severity& 16Procedure 'sp_cacheconfig', Line 1087:The current 'max memory' value '33792', is not sufficient to change the parameter 'User Defined Cache' to '0'. 'max memory' should be greater than 'total logical memory' '34987' required for the configuration. 用sp_cacheconfig "test_log_cache" 查看缓存信息:Cache Name&&&&&&&&&&&&&&&&&&&& Status&&& Type&&&& Config Value Run Value&&& ----------&&&&&&&&&&&&&&&&&&&& ------&&& ----&&&& ------------ ---------&&& test_log_cache&&&&&&&&&&&&&&&& Active&&& Log Only&&&&& 6.00 Mb&&&&& 6.00 Mb IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb&& 1228 Kb&&&&& 0.00 Mb&&&&& 6.00 Mb&&&& 10&&&&& 将数据库或数据库对象捆绑到缓冲区:sp_bindcache 可以将数据库,表,索引,text对象或Image对象绑定到数据缓存。只有系统管理员才能执行。sp_bindcache "test_data_cache" , "dbname" 解除绑定在Master库中执行:sp_unbindcache "test_data_cache" , "dbname" 查看缓存绑定信息:sp_helpcache Cache Name&&&&&&&&&&&&&&& Config Size&&&& Run Size&&&&&& Overhead------------------------ -------------&& ----------&&&& ----------&& The sort for Worktable1 is done in Serial&& default data cache&&&&&&&& 20.00 Mb&&&&&& 20.00 Mb&&&&&&& 1.48 Mbtest_data_cache&&&&&&&&&&& 10.00 Mb&&&&&& 10.00 Mb&&&&&&& 0.75 Mb Memory Available For&&&&& Memory ConfiguredNamed Caches&&&&&&&&&&&&& To Named Caches--------------------&&&&&& ----------------& 30.01 Mb&&&&&&&&&&&&&&&&&&& 30.00 Mb ------------------ Cache Binding Information: ------------------
Cache Name&&&&&&&&&& Entity Name&&&&&&&&&&&&&&& Type&&&&&&&&&&&&&& Index Name&&&&&&&&&&&&&&&&&&& Status----------&&&&&&&&&& -----------&&&&&&&&&&&&&&& ----&&&&&&&&&&&&&& ----------&&&&&&&&&&&&&&&&&&& ------test_data_cache&&&&& dbname&&&&&&&&&&&&&&&&&&&& database&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& V 其中,Status为V——有效,为I——无效一般情况下,将高速缓存空间分配部分给16K缓冲池,在执行SQL时在速度上得到很大提升。在事务密集型环境中,事务日志配置4K缓冲池时性能最佳。查看日志高速缓存的日志IO大小:值可以为2,4,8,16Ksp_logiosizeThe transaction log for database 'DBNAME' will use I/O size of 2 Kbytes.改为16K的日志IO大小:sp_logiosize "16"Log I/O size is set to 16 Kbytes.The transaction log for database 'DBNAME' will use I/O size of 16 Kbytes. 数据高速缓存查询比较:在两个ASE 12.5.4版本数据库Sybase-A和Sybase-B下测试select count(*) from table1记录条数为6859650 set showplan onset fmtonly offsp_cacheconfig--Sybase-ACache Name&&&&&&&&&&&&&&&&&&&& Status&&& Type&&&& Config Value Run Value&&& ----------&&&&&&&&&&&&&&&&&&&& ------&&& ----&&&& ------------ ---------&&& default data cache&&&&&&&&&&&& Active&&& Default&&& 1500.00 Mb&& 1500.00 Mb IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb 122880 Kb&&&&& 0.00 Mb&& 1500.00 Mb&&&& 10&&&&& --Sybase-BCache Name&&&&&&&&&&&&&&&&&&&& Status&&& Type&&&& Config Value Run Value&&& ----------&&&&&&&&&&&&&&&&&&&& ------&&& ----&&&& ------------ ---------&&& default data cache&&&&&&&&&&&& Active&&& Default&&&& 900.00 Mb&&& 900.00 Mb IO Size& Wash Size Config Size& Run Size&&&& APF Percent -------& --------- -----------& --------&&&& ----------- &&& 2 Kb 143360 Kb&&&&& 0.00 Mb&&& 700.00 Mb&&&& 10&&&&& && 16 Kb& 40960 Kb&&& 200.00 Mb&&& 200.00 Mb&&&& 10&&&&& --Sybase-Aset showplan onset statistics io onset statistics time onselect count(*) from& table1 Using I/O Size 2 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. 第一次执行:Parse and Compile Time 0. SQL Server cpu time: 0 ms.Table: table1 scan count 1, logical reads: (regular=20688 apf=0 total=20688), physical reads: (regular=20183 apf=482 total=20665), apf IOs used=479 Total writes for this command: 36
Execution Time 51. SQL Server cpu time: 5100 ms.& SQL Server elapsed time: 4373 ms.(1 row affected)第二次执行:Parse and Compile Time 0. SQL Server cpu time: 0 ms.Table: table1 scan count 1, logical reads: (regular=20688 apf=0 total=20688), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Total writes for this command: 0
Execution Time 38. SQL Server cpu time: 3800 ms.& SQL Server elapsed time: 3300 ms.(1 row affected)--Sybase-Bset showplan onset statistics io onset statistics time onselect count(*) from& table1 Using I/O Size 16 Kbytes for index leaf pages. With LRU Buffer Replacement Strategy for index leaf pages. 第一次执行:Parse and Compile Time 0. SQL Server cpu time: 0 ms.Table: table1 scan count 1, logical reads: (regular=30248 apf=0 total=30248), physical reads: (regular=6017 apf=0 total=6017), apf IOs used=0 Total writes for this command: 0
Execution Time 14. SQL Server cpu time: 1400 ms.& SQL Server elapsed time: 1416 ms.(1 row affected)第二次执行:Parse and Compile Time 0. SQL Server cpu time: 0 ms.Table: table1 scan count 1, logical reads: (regular=30248 apf=0 total=30248), physical reads: (regular=0 apf=0 total=0), apf IOs used=0 Total writes for this command: 0
Execution Time 10. SQL Server cpu time: 1000 ms.& SQL Server elapsed time: 1076 ms.(1 row affected)可以看出:两库使用的缓冲池大小不一样,高速缓存替换策略都LRU(最先使用),配置16K的缓冲池大小的在第一次执行时physical reads次数比2K的要少一倍以上,而logical reads次数比2K的要多一些,但总体查询时间16K缓冲池的发费要少得差不多三倍。
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:

我要回帖

更多关于 台式机休眠了怎么唤醒 的文章

 

随机推荐