据我所知(经过相当多的网上搜索).
1-如果查询的一个组件(排序、连接等)使用比我的work_mem设置更多的内存/内存,或者服务器上所有当前操作使用的总内存超过可用的OS内存,查询将开始写入磁盘。
这是真的吗?
2- Postgres (和许多其他好的DB引擎)使用内存来缓存大量数据,因此查询速度更快;因此,即使服务器没有真正需要内存,服务器也应该指示低空闲内存。因此,除了良好的DB引擎和良好的利用率之外,低空闲内存并不意味着其他任何东西。
这是真的吗?
3-如果上面的#1和#2都是真的,保存所有其他内容,如果我想要一个work_mem设置的板指示符,它的整体操作系统内存太低或者不够,我应该看看服务器空闲磁盘空间是否正在下降?
我想得对吗?
链接:
https://www.postgresql.org/docs/current/static/runtime-config-resource.html
http://patshaughnessy.net/2016/1/22/is-your-postgres-query-starved-for-memory
https://www.enterprisedb.com/monitor-cpu-and-memory-percentage-used-each-process-postgresqlppas-9
https://dba.stackexchange.com/questions/18484/tuning-postgresql-for-large-amounts-of-ram
我知道我可以设置log_temp_files并查看单个临时文件来调优work_mem设置,但我想要一个总体指标,以便在我开始研究超过work_mem设置的临时文件大小之前,确定work_mem是否太低。
我有PostgreSQL 10。
发布于 2017-11-15 19:01:19
处理查询需要采取多个步骤:
在大多数情况下,预期(step2)需要比work_mem设置更多的work_mem的计划将不会在step3中被选择。(因为“溢出到磁盘”被认为是非常昂贵的)一旦step4检测到它需要更多的work_mem,它的唯一选择就是溢出到磁盘。狗屎会发生..。至少这不依赖于操作系统的页面交换过多提交的内存。)
这些规则非常简单:
一些准则/建议:
ANALYZE the_table_name;来收集新的统计数据。监测:
https://stackoverflow.com/questions/47311485
复制相似问题