shared_buffers (integer)
设置数据库服务器将使用的共享内存缓冲区量。默认通常是128 兆字节(128MB),但是如果你的内核设置不支持(在initdb时决定),那么可以会更少。这个设置必须至少为 128 千字节(BLCKSZ的非默认值将改变最小值)。不过为了更好的性能,通常会使用明显高于最小值的设置。如果有一个专用的 1GB 或更多内存的数据库服务器,一个合理的shared_buffers开始值是系统内存的 25%。即使较大的shared_buffers有效,也会造成一些工作负载,但因为TeleDB同样依赖操作系统的高速缓冲区,将shared_buffers设置为超过 40% 的RAM不太可能比一个小点值工作得更好。为了能把对写大量新的或改变的数据的处理分布在一个较长的时间段内,shared_buffers更大的设置通常要求对max_wal_size也做相应增加。如果系统内存小于 1GB,一个较小的 RAM 百分数是合适的,这样可以为操作系统留下足够的空间。
huge_pages (enum)
启用/禁用巨型内存页面的使用。可用的值是 try(默认)、on、和off。当前,只有 Linux 上支持这个特性。在其他系统上这个参数被设置为try时,它会被忽略。巨型页面的使用会导致更小的页面表以及花费在内存管理上的 CPU 时间更少,从而提高性能。 当huge_pages被设置为try时,服务器将 尝试使用巨型页面,如果失败则会转回去使用正常的分配。如果设置为 on,使用巨型页面失败会阻止服务器启动。如果设置为 off,则不会使用巨型页面。
temp_buffers (integer)
设置每个数据库会话使用的临时缓冲区的最大数目。这些都是会话的本地缓冲区,只用于访问临时表。默认是8 兆字节(8MB)。这个设置可以在独立的会话内部被改变,但是只有在会话第一次使用临时表之前才能改变; 在会话中随后企图改变该值是无效的。一个会话将按照temp_buffers给出的限制根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值, 其开销只是一个缓冲区描述符,或者说temp_buffers每增加一则增加大概 64 字节。不过,如果一个缓冲区被实际使用,那么它就会额外消耗 8192 字节(或者BLCKSZ字节)。
max_prepared_transactions (integer)
设置可以同时处于“prepared”状态的事务的最大数目(见PREPARE TRANSACTION)。把这个参数设置 为零(这是默认设置)将禁用预备事务特性。这个参数只能在服务器启动时设置。如果你不打算使用预备事务,可以把这个参数设置为零来防止意外创建预备事务。如果你正在使用预备事务,你将希望把max_prepared_transactions至少设置为max_connections一样大,因此每一个会话可以有一个预备事务待处理。当运行一个后备服务器时,这个参数必须至少与主服务器上的一样大。否则,后备服务器上将不会执行查询。
work_mem (integer)
指定在写到临时磁盘文件之前被内部排序操作和哈希表使用的内存量。该值默认为四兆字节(4MB)。注意对于一个复杂查询, 可能会并行运行好几个排序或者哈希操作;每个操作都会被允许使用这个参数指定的内存量,然后才会开始写数据到临时文件。同样,几个正在运行的会话可能并发进行这样的操作。因此被使用的总内存可能是work_mem值的好几倍,在选择这个值时一定要记住这一点。ORDER BY、DISTINCT和归并连接都要用到排序操作。哈希连接、基于哈希的聚集以及基于哈希的IN子查询处理中都要用到哈希表。
maintenance_work_mem (integer)
指定在维护性操作(例如VACUUM、CREATE INDEX和ALTER TABLE ADD FOREIGN KEY)中使用的 最大的内存量。其默认值是 64 兆字节(64MB)。因为在一个数据库会话中,一个时刻只有一个这样的操作可以被执行,并且一个数据库安装通常不会有太多这样的操作并发执行, 把这个数值设置得比work_mem大很多是安全的。 更大的设置可以改进清理和恢复数据库转储的性能。注意当自动清理运行时,可能会分配最高达这个内存的 autovacuum_max_workers倍,因此要小心不要把该默认值设置得太高。通过独立地设置autovacuum_work_mem 可能会对控制这种情况有所帮助。
replacement_sort_tuples (integer)
当要被排序的元组数比这个数字小时,排序将会使用替换选择而不是快速排序来产生其第一个输出。在内存受限的环境中这可能会有用,这种环境中被输入到大型排序操作中的元组具有很强的物理逻辑关联。注意,这不包括具有逆相关的输入元组。替换选择算法可能会产生一次不需要合并的长时间运行,其中使用默认策略会导致很多次运行并且必须被合并来产生最终的有序输出。这可以允许排序操作更快完成。默认是150,000 个元组。注意,更高的值通常不会更有效,并且可能产生反效果,因为优先队列对于可用的 CPU 高速缓存的尺寸很敏感,然而默认策略会使用一种高速缓存透明算法运行。这种性质允许默认的排序策略自动且透明地利用可用的 CPU 高速缓存。把maintenance_work_mem设置为其默认值通常会阻止工具命令外部排序(例如CREATE INDEX用来构建 B-树索引的排序)使用替换选择排序,除非外部元组非常宽。
autovacuum_work_mem (integer)
指定每个自动清理工作者进程能使用的最大内存量。其默认值为-1,表示转而使用 maintenance_work_mem的值。当运行在其他上下文环境中时,这个设置对VACUUM的行为没有影响。
max_stack_depth (integer)
指定服务器的执行堆栈的最大安全深度。这个参数的理想设置是由内核强制的实际栈尺寸限制(ulimit -s所设置的或者本地等价物),减去大约一兆字节的安全边缘。需要这个安全边缘是因为在服务器中并非所有例程都检查栈深度,只是在关键的可能递规的例程(例如表达式计算)中才进行检查。默认设置是两兆字节(2MB),这个值相对比较小并且不可能导致崩溃。但是,这个值可能太小了,以至于无法执行复杂的函数。只有超级用户可以修改这个设置。把max_stack_depth参数设置得高于实际的内核限制将意味着一个失控的递归函数可能会导致一个独立的后端进程崩溃。 在TeleDB能够检测内核限制的平台上,服务器将不允许把这个参数设置为一个不安全的值。不过,并非所有平台都能提供该信息,所以我们还是建议你在选择值时要小心。
dynamic_shared_memory_type (enum)
指定服务器应该使用的动态共享内存实现。可能的值是posix(用于使用 shm_open分配的 POSIX 共享内存)、sysv (用于通过shmget分配的 System V 共享内存)、 windows(用于 Windows 共享内存)、mmap (使用存储在数据目录中的内存映射文件模拟共享内存)以及none(禁用 这个特性)。并非所有平台上都支持所有值,平台上第一个支持的选项就是其默认值。 在任何平台上mmap选项都不是默认值,通常不鼓励使用它,因为操作系统会 反复地把修改过的页面写回到磁盘上,从而增加了系统的I/O负载。不过当 pg_dynshmem目录被存储在一个 RAM 盘时或者没有其他共享内存功能可用时, 它还是有用的。