我在同一台机器上有两个名为PostgreSQL -1和data-2的数据库。这两个数据库都保留了40 GB的数据,机器上可用的总内存是68 GB。
我启动了data-1和data-2,并运行了几个查询来遍历它们的所有数据。然后,我关闭了data-1,并继续对data-2发出查询。由于某些原因,操作系统仍然在其页高速缓存中保留数据1的大部分页面,并为数据2的文件保留大约35 GB的RAM。结果,我对-2\f25 data-2 \f6的查询一直命中磁盘。
我正在用fincore检查页面缓存的使用情况。当我对data-2运行表扫描查询时,我看到data-2的页面被逐出并以循环方式放回缓存中。data-1的页面没有任何变化,尽管它们已经有几天没有被接触过了。
有人知道为什么data-1的页面没有从页面缓存中清除吗?我对你认为可能与问题有关的各种建议持开放态度。
这是亚马逊上的一个EC2 m2.4xlarge实例,内存为68 GB,没有交换空间。内核版本为:
$ uname -r
3.2.28-45.62.amzn1.x86_64
编辑-1:
似乎没有NUMA配置:
$ dmesg | grep -i numa
[ 0.000000] No NUMA configuration found
编辑-2:
我使用Linux内核源码树中的page-types工具来监控页面缓存状态。从结果中我得出结论:
data-1 pages are in state : referenced,uptodate,lru,active,private
data-2 pages are in state : referenced,uptodate,lru,mappedtodisk
发布于 2012-11-20 20:30:12
看看您在/dev/cpusets
中配置的cpusets。如果这里有多个目录,那么就有多个cpusets,并且可能有多个内存节点。
cpusets机制详细记录在这里:http://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html
https://stackoverflow.com/questions/13469638
复制相似问题