假设我有一个小的postgres数据库(〈500mb),我有一个读密集型的应用程序,99%的请求都是读。有没有办法告诉Postgres将所有表加载到RAM中,这样它就可以更快地进行选择。我认为Oracle和SQL Server都有这种功能。
我在我的本地机器上做了一些测试,我有一个有500条记录的表,Java HashMap花了2ms,sql select花了12000 ms,显然java HashMap更快,因为它在同一个进程中,但有没有办法加快sql查询postgres中的小表?谢谢
for (int i = 0; i < 100_000; i++) {
//1) select * from someTable where id = 10
// 2) get from Java HashMap by key
}
1条答案
按热度按时间fkaflof61#
PostgreSQL会自动将数据缓存在RAM中,你所要做的就是将
shared_buffers
设置为至少和你的数据库一样大,那么所有的数据只需要读取一次,并且会一直缓存在RAM中。如果要降低阅读数据所导致的初始速度慢,请设置
shared_preload_libraries = 'pg_prewarm,pg_stat_statements'
。我怀疑您报告的过度缓慢不是数据库的缓慢,而是网络滞后或低效查询。
pg_stat_statements
将帮助分析您的数据库工作负载。