注意: 这些参数只能在数据库服务重新启动后生效。
shared_buffers
参数说明:设置GaussDB使用的共享内存大小。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。需要重新设置共享内存和信号灯。
设置原则如下:
取值范围:
temp_buffers
参数说明:设置每个数据库会话使用的LOCAL临时缓冲区的大小。
在每个会话的第一次使用临时表之前可以改变temp_buffers的值,之后的设置将是无效的。
一个会话将按照temp_buffers给出的限制,根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值,其开销只是一个缓冲区描述符的大小。当缓冲区被使用,就会额外消耗8192字节。
取值范围:
max_prepared_transactions
参数说明:设置可以同时处于"预备"状态的事务的最大数目。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。
取值范围:
work_mem
参数说明:设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY, DISTINCT 和merge joins都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。
注意:
对于复杂的查询,可能会同时并发运行好几个排序或者散列操作,每个都可以使用此参数所声明的内存量,不足时会使用临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是work_mem的好几倍。
取值范围:
maintenance_work_mem
参数说明:设置在维护性操作(比如 VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY 等)中可使用的最大的内存。
设置原则:
取值范围:
max_stack_depth
参数说明:设置GaussDB执行堆栈的最大安全深度。需要这个安全界限是因为在服务器里,并非所有程序都检查了堆栈深度,只是在可能递规的过程,比如表达式计算这样的过程里面才进行检查。
设置原则:
取值范围:
max_saved_plans
参数说明:设置服务器缓存的执行计划最大数量。该执行计划可能是在函数编译结果中的,也可能是由带提示的SELECT语句查询产生的。缓存过多的函数执行计划可能占用很大内存。将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。
取值范围:
max_catcache_tuple
参数说明:设置服务器缓存的系统表元组的最大数量。缓存过多的系统表元组可能占用很大内存。将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。
取值范围:
max_relcache_entry
参数说明:设置服务器缓存的表模式信息的最大数量。缓存过多的表模式信息可能占用很大内存。将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。
取值范围:
用于限制临时文件所占用的磁盘空间
temp_file_limit
参数说明:限制一个会话中可以使用的所有临时文件的总空间,例如排序和哈希表使用的临时文件,或游标所占用的临时文件。
此设置包括了任意时刻可以使用的临时文件的总和。
注意:
取值范围:
这些参数是否生效依赖于操作系统的设置。
max_files_per_process
参数说明:设置每个服务器进程允许同时打开的最大文件数目。如果操作系统内核强制一个合理的数目,则不需要设置。
但是在一些平台上(特别是大多数BSD系统),内核允许独立进程打开比系统真正可以支持的数目大得多得文件数。如果您发现有的“Too many open files”这样的失败现象,请尝试缩小这个设置。
取值范围:
shared_preload_libraries
参数说明:此参数用于声明一个或者多个在服务器启动的时候预先装载的共享库,多个库名字之间用逗号分隔。比如 ‘$libdir/mylib’ 会在加载标准库目录中的库文件之前预先加载mylib.so(某些平台上可能是 mylib.sl)库文件。
可以用这个方法预先装载GaussDB的存储过程库,通常是使用 ‘$libdir/plXXX’ 语法。 XXX只能是pgsql,perl,tcl,python之一。
通过预先装载一个共享库并在需要的时候初始化它,可以避免第一次使用这个库的加载时间。但是启动每个服务器进程的时间可能会增加,即使进程从来没有使用过这些库。因此建议对那些将被大多数会话使用的库才使用这个选项。
注意:
取值范围:
后端写进程的功能就是把共享缓冲区中的脏数据(指共享缓冲区中新增或者修改的内容)写入到磁盘。目的是让数据库进程在进行用户查询时可以很少或者几乎不等待写动作的发生(写动作由后端写进程完成)。
后端写进程将持续的把脏页面刷新到磁盘上,所以在检查点到来的时候,只有几个页面需要刷新到磁盘上。但是这样还是增加了I/O的总净负荷,因为以前的检查点间隔里,一个重复弄脏的页面可能只会冲刷一次,而同一个间隔里,后端写进程可能会写好几次。在大多数情况下,连续的低负荷要比周期性的尖峰负荷好。
注意:
这些参数只能在gaussdb命令行上设置或者通过gs_guc reload生效。
bgwriter_delay
参数说明:设置后端写进程写"脏"共享缓冲区之间的时间间隔。每一次,后端写进程都会为一些脏的缓冲区发出写操作(用bgwriter_lru_maxpages参数控制每次写的量),然后休眠bgwriter_delay毫秒后才再次启动。
在许多系统上,休眠延时的有效分辨率是10毫秒。因此,设置一个不是10的倍数的数值与把它设置为下一个10的倍数是一样的效果。
取值范围:
bgwriter_lru_maxpages
参数说明:设置后端写进程每次可写入磁盘的“脏”缓存区的个数。
取值范围:
说明:
bgwriter_lru_multiplier
参数说明:通过与已使用缓存区数目的乘积评估下次服务器需要的缓存区数目。
写“脏”缓存区到磁盘的数目取决于服务器最近几次使用的缓存区数目。最近的buffers数目的平均值乘以bgwriter_lru_multiplier是为了评估下次服务器进程需要的buffers数目。在有足够多的干净的、可用的缓存区之前,后端写进程会一直写“脏”缓存区的(每次写的缓存区数目不会超过bgwriter_lru_maxpages的值)。
设置bgwriter_lru_multiplier的值为1.0表示一种“实时”策略,其作用是精准预测下次写“脏”缓冲区的数目。设置为较大的值可以应对突然的需求高峰,而较小的值则可以让服务器进程执行更多的写操作。
设置较小的bgwriter_lru_maxpages和bgwriter_lru_multiplier会减小后端写进程导致的额外I/O开销,但是服务器进程必须自己发出写操作,增加了对查询的响应时间。
取值范围:
此参数的设置只针对位图索引生效。普通的索引扫描(index scan)一次只读一条索引项,使得一个PAGE有可能被多次访问,而位图索引一次性将满足条件的索引项全部取出并在内存中进行排序,然后根据取出的索引项访问表数据。
effective_io_concurrency
参数说明:设置GaussDB可以同时执行的并发磁盘I/O操作的数量。提高此数值还可以增加单个会话中的并发磁盘I/O操作的数量。
此参数的设置取决于数据库使用RAID 0或者RAID 1中的磁盘个数(而对于RAID 5,同样的磁盘个数发挥的效果有限)。在一个会话中,如果数据库经常要处理并发查询,则建议设置此参数的值较低,这样可以使磁盘阵列处于繁忙状态(对磁盘阵列的利用率高)。
对于一些特殊的系统,例如基于内存的存储系统或者磁盘阵列受总线带宽的制约,此参数的最佳设置应该是I/O可达到的最大值。
异步I/O的设置依赖于操作系统是否支持posix_fadvise功能。如果操作系统不支持此功能,则只能设置此参数的值为0,否则将出错。
注意:
取值范围: