提交大小远高于工作集

Commit size much higher than the Working Set

在我们的一个 Windows 托管 SQL 服务器数据库实例的服务器中,我可以看到一个 SQLServer.exe 进程的提交大小和工作集的巨大差异(来自资源监视器)

我知道提交大小包括使用的 RAM + 虚拟内存。我检查了服务器中 pagefile.sys 的大小,发现它只有 8GB 大。那么剩下的虚拟内存放在哪里呢?在 RAM 本身上?

请澄清

这是一个相当复杂的话题,如果你想要真正详细的答案,你可以阅读很多关于 OS 如何处理“内存”的深入而翔实的文章,比如 this old one

但是如果你想要一个执行摘要:“提交费用”可能根本没有分配到 RAM 或磁盘上!代表“虚拟地址space”的一次提交,是一种“映射”。

当一个进程“添加”到它的提交费用时,这就是真正发生的事情:它对 OS 说“你好,请使用 X 内存量”,OS说“好的,我保证你可以访问 X 内存量”。它通过在虚拟地址 space “映射”中“分配”地址 space 来实现。但是那只是一张地图。这并不意味着 实际上 已经分配了任何内存 - 无论是从 RAM 还是从磁盘!

打个比方,假设您正在预订酒店房间。你打电话给酒店说“你好,我想在这周六和周日预订一个房间”。接待员查看预订日历,发现 28 号房间是空闲的。他们告诉你“好的,我已经为你预订了这个周六和周日”。这里,接待员的日历就是“虚拟房间space”的“地图”。接待员通过更新地图向您保证了这个房间。但您尚未实际使用房间。你不在里面,none 你的包或衣服都在里面。您刚刚完成了预订。

提交费用包括您的应用程序所做的所有“预订”,操作系统是接待员。您的应用程序可能尚未使用预订的 space,但操作系统已保证您可以根据需要使用该 space。