高性能是每一个数据库DBA及开发人员的目标,但通常数据库性能都会因以下两个矛盾关系所限制:
● 从内存中访问数据的速度很快;而磁盘中访问数据的速度很慢。
● 内存空间有限,而通常磁盘空间是充足的。
经常出现的情况就是:共享缓存已满,新请求的数据需覆盖缓存中已经存在的部分数据,而且这种状况会因内存大小的限制频繁地发生。在某些应用下,这已成为制约数据库性能的一个严重的瓶颈。
因此,如果我们可以获得无限大的内存空间,那么数据库的性能将达到一个更高的层次,因为我们不必再为数据在内存中频繁的进出而发愁。
EnterpriseDB企业版的无限缓存(Infinite Cache)技术正是基于这样一种概念,无限缓存现在只在Linux系统中可以获得,它允许EnterpriseDB企业版通过网络访问多个廉价低端服务器的内存,作为缓存服务器。
无限缓存提供了一种"缓存刀片(cache blade)"的架构,使得用户使用低端的硬件设备即可实现缓存共享,而不需使用昂贵高端的服务器。
使用了无限缓存之后,当一个数据块第一次被读取时,数据库把它从磁盘读入共享缓存(shared buffer cache)中,同时也复制到缓存服务器上。如果在之后的一小段时间内,又有新的请求需读取这个数据块,数据库会首先从共享缓存中查找。
这样,如果此数据块被换出共享缓存,数据库还可以从多个缓存服务器上搜索,而不是立即从磁盘上读取。因为一般多个备用缓存服务器的内存,会明显比单个数据库服务器的共享缓存大很多,所以数据块从备用缓存服务器上被找到的概率也会大很多,这也使得数据的访问比从磁盘读取更高效。只有在所有的缓存服务器上都找不到请求的数据时,数据库才会从磁盘上读取。
无限缓存更强大的一点在于,所有这些操作对于应用程序而言都是透明的,也就是说程序开发人员无需在程序中进行任何额外的编码,这也是无限缓存带给我们的好处。
为了进一步增强备用缓存,无限缓存还提供了数据压缩技术。在将数据真正读入缓存服务器之前,根据系统的实际情况把数据以不同的比率进行压缩,压缩技术使得更多的数据能够存放到备用缓存中,同时也减少了网络传输的带宽。
无限缓存还允许您"预热(warm)"缓存服务器。也就是说选中的表,不管带索引的还是不带索引的,可以在应用程序启动前预先加载到备用缓存中来。如果我们预先知道应用程序将会使用哪些表,那么缓存服务器的预热将会明显地加快数据库的访问。
由于无限缓存的原理是尽可能多地将已读过的数据保存在备用缓存中,因此对于那些频繁访问某些相同数据的应用来说,无限缓存能给他们带来更多的性能提升。下图比较了两种不同的应用--一种是应用中包含了部分update操作,一种是只读的应用。对于只读应用,无限缓存带给数据库更明显的性能提升。
EnterpriseDB Infinite Cache无限缓存提供了如下的特性:
● 使用廉价的硬件设备作为缓存刀片来增加内存,控制扩展的成本。
● 对应用程序是透明的,无需任何额外编码。
● 提供了不同级别的数据压缩,以将更多的数据压入内存,也减少了网络带宽。
● 将需要的表、索引预加载到缓存中,这样在使用中不需要等待加载,便可以立即获得性能的提升。
● 提供工具来获得各个缓存的统计数据以更好地调整数据库的性能。