还有另外一个功能特性是Advanced Compression。一种写入数据的方式,使得数据占据更少的空间,Advanced Compression能够减少存储费用,减少内存和网络带宽,甚至提高查询性能。通过替换重复值,Advanced Compression节约了存储空间。换句话说,Advanced Compression并没有真正压缩数据,只是将数据库标准化。你的数据越重复,你使用Advanced Compression就越成功。另外,因为Advanced Compression工作在数据库块级,压缩比取决于数据表中数据的顺序。
除了能够在磁盘上存储更多的数据,Advanced Compression还能提高I/O性能。因为更多的数据压缩到更少的空间,更容易满足数据库查询。从物理角度来说,数据库从硬盘上读入的数据越少,获取数据库的数据就会更快。
因此Advanced Compression将会提高某些查询的性能,并不是全部的查询。它将减少一些数据的储存空间的需求,并不是所有的数据都是如此。另外,即使是同样的数据,总压缩比也会不同,取决于数据的重复度和数据的顺序(索引)。
我在两个单独的数据库上测试了Advanced Compression。第一个测试案例:数据库数据来自TPC-C 基准测试,模拟联机事务处理的真实环境。在第二个测试案例:数据库数据是由Oracle 联机事务处理表压缩工具(OLTP Table Compression Test Kit)提供的。
这时候,我想你已经猜想Advanced Compression由于数据表和数据的不同而有不同的表现,事实上你的猜想是对的,我的两个测试结果的确如此。Oracle测试工具(Oracle Test Kit)提供的两个数据表不仅仅压缩到原始大小的1/4,并且查询性能有了很大的提高,甚至也提高了写操作的速度。而TCP-C数据库表压缩的不是很好,是原始大小的15%到57%不等,并且也没有看到查询或者写操作性能的提高。
很自然,我的测试结果,Oracle自己的测试结果,以及你的测试结果都不会相同。当然你的压缩结果也会根据表的不同而不同,有时候差别还会非常大。需要注意的是对数据表做修改会导致压缩比的变化。如果商业报告变化(事实上经常发生),你就需要对你的数据表排序,这样就会使得压缩比大量下降。更坏的情况是,你或许突然发现你的磁盘空间不够了。
需要注意的是,Advanced Compression也增加了系统资源的成本。当我给TCP-C基准测试进行读测试时,我将所有类似的数据集合在一起,然后进行查询。我期待聚合类似的数据会提高扫描性能。但是,这种情况并没有发生。因此除非你充分测试,用你的真实生产数据,你可能能得到令人惊喜的结果。
对于能够正确管理Advanced Compression、使用很成功、并且维护的很好的数据库管理员来说,Advanced Compression就会是一个巨大的帮助,但是它也会平时的操作带来了复杂度,你应该谨慎。在你执行之前,你需要做大量的回归测试,保证你的应用程序和以前一样工作正常。
总之,Oracle 11g 增加了许多新的功能特性,非常有用的当属真实环境应用程序测试(Real Application Testing)功能特性。其它诸多功能加以利用,会给极大减轻平时工作负担。