ddia/pg/pg-tune-memory.md
2018-02-08 14:07:06 +08:00

2.9 KiB
Raw Blame History

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)。