在达到 1GB 后,数据库文件大小不再更新
你们好 达到 1GB 后在 holddb 中的文件大小更新存在问题(它发生在文件重映射时). 这个问题在主版本中仍然存在. 以下是技术细节(在开始前,我想说,我的OS页面Size,在Windows 64比特机上等于4.096字节): 当螺栓db需要分配新的"junk"来存储文件时,这种方法被称为: ! [immagine] (https://user-images.githubusercontent.com/6648129/36090559-14e7b03c-0fe1-11e8-832d-002d8673ff98.png) (中文(简体) ). 如您所见,当需要增加存储文件时,称为"mmap"方法,并带有最小大小再分配参数. 内部"mmap"被称作"mmapSize"的方法,它根据通过的最低一个参数计算出新存储文件大小: [immagine] (https://user-images.githubusercontent.com/6648129/36090740-d2c1add8-0fe1-11e8-969a-286b158e74ee.png) (中文(简体) ). 从我的红色评论中可以看出,“放大”内有两种不同的计算方法。 第一个根据此规则, 根据最小大小参数计算出新商店大小 : 2^15 = 32.768 字节 2^16 = 65.536 字节 2^17 = 131.072 字节 2^18 = 262.144 字节 2^19 = 524.288 字节 2^20 = 1.048.576 字节 2^21 = 2.097.152 字节 2^22 = 4.194.304 字节 2^23 = 8.388.608 字节 2^24 = 16.777.216 字节 2^25 = 33.554.432 字节 2^26 = 67.108.864 字节 2^27 = 134.217.728 字节 2^28 = 268.435.456 字节 2^29 = 536.870.912 字节 2^30 = 1.073.741.824 字节 这个方法很有效 问题开始于第二种计算方法控制再映射大小时,因为1GB被达到时作为参数传递的最低尺寸为"1.073.741.824",而不是因为我所期望的数值大于"1.073.741.824". 因此,当达到1GB时,简单的mmapSize返回与参数(1.073.741.824)相同的最小大小,因为以下代码: ![immagine] (https://user-images.githubusercontent.com/6648129/36091008-9c11d41a-0fe2-11e8-8080-871cf08016c8.png) (中文(简体) ). 永远无法到达。
你能确认一下吗?
P.s.:我想在gitea项目上提及这个错误:https://GitHub.com/go-gitea/gitea/issues/3457
内容来源: boltdb/bolt