我们有一些很少执行的 SQL 查询。
一段时间后第一次运行它们大约需要 2 分钟,第二次调用仅需要 800 毫秒。
我发现当我重启 postgres 时查询仍然很快。只有当我用以下命令清除 inode 缓存时
echo 3 > /proc/sys/vm/drop_caches
查询又变慢了。所以我开始观察查询过程中加载了哪些文件:
inotifywait -mr ~postgres/data/*
首次登录时会进行多次:
/var/lib/pgsql/data/base/16414/ ACCESS 119232
这是一个1GB的文件:
-rwxr-xr-x 1 postgres postgres 1,0G 22. Mär 09:53 /var/lib/pgsql/data/base/16414/119232
我认为这是一个包含表索引的文件
是否有可能
- 找出哪些文件包含索引
- 强制操作系统将文件保存在缓存中?