Chinaunix首页 | 论坛 | 博客
  • 博客访问: 394269
  • 博文数量: 120
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 1266
  • 用 户 组: 普通用户
  • 注册时间: 2008-04-16 16:04
文章分类

全部博文(120)

文章存档

2011年(4)

2010年(10)

2009年(38)

2008年(68)

我的朋友

分类:

2009-01-12 15:41:56

SAP的数据库表可以在应用服务器这一层进行缓存。缓存可以降低数据库的负载,减少访问数据库的次数,而且访问应用服务器上的缓存数据比访问数据库上的数据要快。
 
缓存表有专门的数据库接口访问机制。如果系统执行了NATIVE SQL语句,将会绕过这个机制,不会使用SAP系统的数据表缓存。因为,建议不要对缓存表使用NATIVE SQL语句,会造成数据库中的数据和缓存中的数据不一致。并不是每个OPEN SQL语句读缓存表的时候都是读的缓存数据,如SELECT ... BYPASSING BUFFER。
 
如果一个数据表在几个应用服务器上都缓存了,假如A应用服务器上的一个程序更新了缓存表上的一些数据,这些更改数据会被登记到数据库的DDLOG表中,B应用服务器每隔一段时间都会去读这个表,如果发现了相关的条目已经发生改变,这些缓存的内容就会被标记为已经过时。下次访问缓存表的这些数据时,就会通过数据库接口直接去读数据库并加载到缓存里面,因此B应用服务器该缓存表上的内容被更新了。
 
缓存的更新时间可以通过参数rdisp/bufreftime来配置。
 
有三种类型的缓存:
1,Full buffering(Resident buffering):当表的任意一条数据首次被访问的时候,整个表的数据都被加载到缓存。一般来说,表越小,读的越多写的越少的情况下比较适合这个类型的buffering。
 
2,Generic buffering:当某条数据首次被访问的时候,所有跟这条数据generic key一样的记录都会被加载到缓存中。所谓generic key就是左对齐的主键的一部分,永远比主键的个数少。一般跟client相关的表,如果是这种缓存类型,client字段是generic key的一部分。client相关的full buffering类型的表同时会自动generic buffering,client字段就是generic key.语言相关的表通常也是generic buffering,generic key一般是从第一个主键到语言这个字段的所有字段。一般来说,一个表的generic区域经常需要被处理,这个区域适合被当做generic key,同时这个表比较适合generic buffering。
 
3,Single-Record buffering:一般是通过主键读取。比较适合表比较大,但是经常读取的数据比较少,经常用select Single语句的时候。所有不通过select Single语句的访问会绕过buffer而直接访问数据库。
 
只有那些读的很多,写的很少或者短暂的数据不一致影响不大的数据库才可以被buffer。改变非常频繁的表不要buffer。
阅读(1151) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~