我有一台 64GB RAM 和 PostgreSQL 9.2 的服务器。上面有一个只有 4GB 的小型数据库“A”,大约每小时查询一次,还有一个大约 60GB 的大数据库“B”,每秒查询 40-50 次!
正如预期的那样,Linux 和 PostgreSQL 用更大的数据库数据填充 RAM,因为它被更频繁地访问。
我现在的问题是对小型数据库“A”的查询很关键,必须在 <500 毫秒内运行。日志文件显示了每天需要超过 3 秒的查询。如果我手动执行它们,它们也只需要 10 毫秒,所以我的索引很好。
所以我猜想,当 PostgreSQL 必须从磁盘加载小型数据库索引的块时,就会发生这些长跑者。
我已经有某种“缓存预热器”脚本,它每秒对小型数据库重复“SELECT * FROM x ORDER BY y”查询,但它浪费了大量的 CPU 能力,只会稍微改善一下情况。
还有更多想法如何告诉 PostgreSQL 我真的希望那个小型数据库“粘”在内存中吗?