在学习PostgreSQL时,发现默认的Page大小为8k,一直不明白其设定原因。在读到Michael Ralph Stonebraker的《Architecture of a Database System》,知道了“The Five-Minute Rule”,于是在这里和大家分享一下。
1987年,Jim Gray[1]和Gianfranco Putzolu推出了的5分钟法则,以权衡内存和I / O容量。他们的计算将使用内存芯片和磁盘驱动器的适当价格,将保存一条记录(或页面)的成本与每次访问该记录(或页面)时执行磁盘I / O的成本进行比较。他们的规则的名称是指访问之间的收支平衡时间间隔。如果更频繁地访问记录(或页面),则应将其保存在内存中;否则,它应该保留在磁盘上并在需要时读取。
根据当时的价格和Tandem设备的性能特征,Gray和Putzolu发现保存1KB记录的RAM的价格大约等于每400个访问该记录所需的磁盘驱动器的(部分)价格。秒,他们四舍五入到五分钟。收支平衡间隔大约与记录大小成反比。Gray和Putzolu为100字节的记录花了1个小时,为4 KB页面花了2分钟。
- PagesPerMBofRAM:表示内存每兆字节的Page数,如果page size = 4KB,则该值为1MB/(4KB/page) = 256 page/MB。
- AccessesPerSecondPerDisk:每块磁盘每秒支持的大IO请求数,如下表所示为250Page/(Second*Disk)。
- (PagesPerMBofRAM /AccessesPerSecondPerDisk):表示1兆的空间通过磁盘访问的方式所需要的秒数。256/200 = 1.25(Second*Disk)/MB,表示1兆字节需要1.25个盘秒来完成(类似工作任务按人月来做单位)。
- PricePerDiskDrive:表示一块磁盘的成本,如下表所示为48$/disk。
- PricePerMBofRAM:表示每兆内存的代价,如下表所示为50$/(2048)=0.024$/MB。
- PricePerDiskDrive/ PricePerMBofRAM:表示用来买磁盘的钱可以买多少兆内存。48/0.024=2000MB /disk。
- 整个公式表示用磁盘读取的耗费时间界限,2000MB *1.25=2500second,合41min。如果一条数据的访问周期低于41分钟,则应该放在内存中,否则应该放在磁盘中。
对于这个公式我们可以这样理解。
1MB 存放在内存中的代价是0.024$/MB,1MB数据使用一次相当于花0.024$换来的。
1MB 存放在硬盘中的代价是 1.25 (second*disk)/MB *48($/disk) / 1个访问周期 = 1.25 *48/2500= 0.024$,1MB数据放在硬盘中,2500秒访问一次,花0.024$。
如果访问周期小于2500秒,放在硬盘中的代价大,周期大于5100秒,放在硬盘中就赚了。
后来在1997年又发布了《The Five-Minute Rule Ten Years Later, and Other Computer Storage Rules of Thumb》。再次验证了法则的有效性。
当时的各项参数参考值,假设page为4kb:
- PagesPerMBofDRAM = 256 pages/MB (i.e., 8KB pages)
- AccessesPerSecondPerDisk = 64 access/sec/disk
- PricePerDiskDrive = 2000 $/disk (9GB + controller)
- PricePerMBofDRAM = 15 $/MB_DRAM
超过了5分钟法则,而改为8kb,则为:
符合5分钟法则,则此时建议为8kb大小的page。
在2007年,图灵奖[2]获得者的Jim Gray,出海后失踪,至此下落不明,无人能联系到他。而在2009年,Gianfranco Putzolu基于原有的内容推出了《The Five-Minute Rule 20 Years Later》。随着在传统的硬盘和RAM内存的鸿沟之间出现了闪存,五分钟规则现在可以运用到对于今天磁盘比较合适的大页上面,可以应用到它们的快速传输带宽上面,也可以应用到闪存盘上面,这些闪存盘具有小页,很适合快速访问。闪存填补了RAM内存和磁盘之间的鸿沟,在许多方面:访问代价,访问延迟,传输带宽,空间密度和能耗。因此,在未来,闪存会大量应用在操作系统、文件系统和数据库系统中,迫切需要研究合适的系统体系架构。在这些系统中利用闪存的基本的软件体系架构,被称为“扩展缓冲池”和扩展磁盘。
按照上述参数,目前的建议大小为:
如果磁盘还想维持5分钟法则的话,则需要设置page为64kb。
而如果是SSD的话,则page应设为:
如果磁盘还想维持5分钟法则的话,则需要设置page为8kb[3]。
综上所述,目前在磁盘环境下其实应该重新考虑页面大小,比如64kb。而在SSD环境下,8kb还是可以保证5分钟法则的。同时,5分钟法则仅仅是从成本方面考虑,如果在不考虑成本的情况下,追求极限性能,这个就需要通过优化实现了,比如根据业务情况调整页面大小,加大缓存,优化算法等等。
参考
- ^https://en.wikipedia.org/wiki/Jim_Gray_(computer_scientist)
- ^因在数据库和事务处理研究和实现方面的开创性贡献而获得1998年图灵奖
- ^在这里本次结果大约为438s,和400有一定差距