按页面我的意思是:
https://dev.mysql.com/doc/internals/en/innodb-page-structure.html
这些16KB的MySQL页面能否在内存或磁盘中碎片化?意思是,如果我们获取磁盘映像或内存映像,是否有可能将这16KB页面碎片化?这意味着如果我拍摄MySQL文件夹的图片,这16KB页面会连续出现,还是其中一些会碎片化?
还是MySQL以不被碎片化的方式实现它们?如果可以,怎么办?
答案 0 :(得分:2)
与MySQL或InnoDB相比,这更多是文件系统或操作系统问题。 InnoDB正在写入文件,并且文件系统确实有可能将写入的内容分段到单个16 KiB InnoDB页面,以使其在物理磁盘上不连续。但是,对于现代服务器和SSD存储,无论如何,这种情况基本上都会在基础媒体上100%发生。
至少我通常不关心它。
答案 1 :(得分:1)
(在您类似的问题中,我已经讨论过磁盘的长度。在这里我将讨论RAM。)
也许在二十年前,超过一半的CPU已移至与“物理”地址不同的“虚拟”地址。为实现此目的,硬件人员实施了一种“转换”机制,该机制将程序使用的32位(或64位)虚拟地址映射为访问RAM的物理地址。这是在硬件中较低的级别上完成的。当物理地址交换到磁盘或尚未分配给用户程序时,随硬件一起处理异常。
制造商大多将页面大小定为4KB,以保证翻译的准确性。就是说低12位(2 ^ 12 = 4K)通过未翻译的转换被馈送;高位被映射(通过片上查找表,由RAM中的阵列支持)从虚拟到物理。每次访问内存都会完成此操作(可能在引导过程中除外)。
通过这种机制,用户程序可以完全不了解RAM中4KB页面的位置以及它们是否分散。
底线:忘记内存映像。碎片实际上不是问题。
另一方面,交换可能是个问题。我认为MySQL和InnoDB的设计假设是RAM中的所有内容都保留在RAM中。请注意,它们是如何努力缓存数据块,索引块,表定义等的。因此,请不调整MySQL以使系统需要交换。