# PostgreSQL Memory Tunning

— effective_cache_size(integer)

设置计划程序关于可用于单个查询的磁盘高速缓存的有效大小的假设。 这是估算使用指数成本的因素; 更高的值使得更有可能使用索引扫描，更低的值使得更有可能使用顺序扫描。 当设置这个参数时，你应该考虑PostgreSQL的共享缓冲区和内核磁盘缓存中将用于PostgreSQL数据文件的部分。 另外，考虑到不同表上的并发查询的预期数量，因为它们将不得不共享可用空间。 此参数对PostgreSQL分配的共享内存大小没有影响，也不会保留内核磁盘缓存; 它仅用于估计目的。 系统也不会假定数据在查询之间保留在磁盘缓存中。 默认值是4千兆字节（4GB）。

25% ~ 40%  mem



`shared_buffers` (`integer`)

设置数据库服务器将使用的共享内存缓冲区量。默认通常是 128 兆字节（`128MB`），但是如果你的内核设置不支持（在initdb时决定），那么可以会更少。这个设置必须至少为 128 千字节（`BLCKSZ`的非默认值将改变最小值）。不过为了更好的性能，通常会使用明显高于最小值的设置。

如果有一个专用的 1GB 或更多内存的数据库服务器， 一个合理的`shared_buffers`开始值是系统内存的 25%。 即使很大的`shared_buffers`有效， 也会造成一些工作负载， 但因为PostgreSQL同样依赖操作系统的高速缓冲区， 将`shared_buffers`设置为超过 40% 的RAM不太可能比一个小点值工作得更好。 为了能把对写大量新的或改变的数据的处理分布在一个较长的时间段内， `shared_buffers`更大的 设置通常要求对`max_wal_size`也做相应增加。

如果系统内存小于 1GB，一个较小的 RAM 百分数是合适的，这样可以为操作系统留下足够的空间。 同时，在 Windows 上，`shared_buffers`设置得较大也不一定有效。你会发现保持相对低的设置并且更多使用操作系统高速缓存会得到更好的结果。Windows 上可用的`shared_buffers`值通常是从 64MB 到 512 MB。



`effective_cache_size` (`integer`)

设置规划器对一个单一查询可用的有效磁盘缓冲区尺寸的假设。这个参数会被考虑在使用一个索引的代价估计中，更高的数值会使得索引扫描更可能被使用，更低的数值会使得顺序扫描更可能被使用。在设置这个参数时，你还应该考虑PostgreSQL的共享缓冲区以及将被用于PostgreSQL数据文件的内核磁盘缓冲区。另外，还要考虑预计在不同表上的并发查询数目，因为它们必须共享可用的空间。这个参数对PostgreSQL分配的共享内存尺寸没有影响，它也不会保留内核磁盘缓冲，它只用于估计的目的。系统也不会假设在查询之间数据会保留在磁盘缓冲中。默认值是 4吉字节（`4GB`）。