gaussdb 数据库参数说明【内存、磁盘空间、内核资源、后台写进程、异步IO】【03】

1. 内存

注意: 这些参数只能在数据库服务重新启动后生效。

shared_buffers
参数说明:设置GaussDB使用的共享内存大小。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。需要重新设置共享内存和信号灯

设置原则如下:

  • 服务器内存小于1GB时,建议设置shared_buffers占用内存比例小于25%,这样可以留下更多的内存空间给操作系统调用。
  • 服务器内存大于1GB小于4GB时,建议设置shared_buffers值为系统内存的25%。
  • 服务器内存大于4GB时,建议设置shared_buffers值为内存的40%以内。不建议设置shared_buffers的值超过40%,通常设置较大的shared_buffers需要同时增加checkpoint_segments的值,因为写入大量新增、修改数据需要消耗更多的时间周期。

取值范围:

  • 整型,128kB~操作系统支持的最大值。
  • 改变BLCKSZ的值会改变最小值。
  • 默认值:32MB,如果操作系统支持的共享内存小于32MB,则在初始化数据存储区时会自动调整为操作系统支持的最大值。

temp_buffers
参数说明:设置每个数据库会话使用的LOCAL临时缓冲区的大小。

  • 在每个会话的第一次使用临时表之前可以改变temp_buffers的值,之后的设置将是无效的。

  • 一个会话将按照temp_buffers给出的限制,根据需要分配临时缓冲区。如果在一个并不需要大量临时缓冲区的会话里设置一个大的数值,其开销只是一个缓冲区描述符的大小。当缓冲区被使用,就会额外消耗8192字节。

取值范围:

  • 整型(kB)
  • 默认值:8MB

max_prepared_transactions
参数说明:设置可以同时处于"预备"状态的事务的最大数目。增加此参数的值会使GaussDB比系统默认设置需要更多的System V共享内存。

  • 当GaussDB部署为主备双机时,在备机上此参数的设置必须要高于或等于主机上的,否则无法在备机上进行查询操作。

取值范围:

  • 整型,为避免在准备步骤失败,此参数的值不能小于max_connections。
  • 默认值:10,表示关闭预备事务的特性。

work_mem
参数说明:设置内部排序操作和Hash表在开始写入临时磁盘文件之前使用的内存大小。ORDER BY, DISTINCT 和merge joins都要用到排序操作。Hash表在散列连接、散列为基础的聚集、散列为基础的IN子查询处理中都要用到。

注意
对于复杂的查询,可能会同时并发运行好几个排序或者散列操作,每个都可以使用此参数所声明的内存量,不足时会使用临时文件。同样,好几个正在运行的会话可能会同时进行排序操作。因此使用的总内存可能是work_mem的好几倍

取值范围:

  • 整型(kB)
  • 默认值:1MB

maintenance_work_mem
参数说明:设置在维护性操作(比如 VACUUM、CREATE INDEX、ALTER TABLE ADD FOREIGN KEY 等)中可使用的最大的内存。

设置原则:

  • 建议设置此参数的值大于work_mem,可以改进清理和恢复数据库转储的速度。因为在一个数据库会话里,任意时刻只有一个维护性操作可以执行,并且在执行维护性操作时不会有太多的会话。
  • 当自动清理进程运行时,autovacuum_max_workers倍数的内存将会被分配,所以此时设置maintenance_work_mem的值不应该小于work_mem。

取值范围:

  • 整型(kB)
  • 默认值:16MB

max_stack_depth
参数说明:设置GaussDB执行堆栈的最大安全深度。需要这个安全界限是因为在服务器里,并非所有程序都检查了堆栈深度,只是在可能递规的过程,比如表达式计算这样的过程里面才进行检查。

设置原则:

  • 此参数的最佳设置是等于操作系统内核允许的最大值(就是 ulimit -s 的设置)。
  • 如果设置此参数的值大于实际的内核限制,则一个正在运行的递归函数可能会导致一个独立的服务器进程崩溃。在GaussDB能够检测内核限制的操作系统上(SUSE Linux上),将自动限制设置为一个不安全的值。
  • 因为并非所有的操作都能够检测,所以建议您在此设置一个明确的值。

取值范围:

  • 整型(kB)
  • 默认值:2MB,这个值相对比较小,不容易导致系统崩溃。但是这个值可能太小了,导致无法执行复杂的函数。

max_saved_plans
参数说明:设置服务器缓存的执行计划最大数量。该执行计划可能是在函数编译结果中的,也可能是由带提示的SELECT语句查询产生的。缓存过多的函数执行计划可能占用很大内存。将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。

取值范围:

  • 整型,取值必须大于等于-1。
  • 默认值:-1,表示不限制缓存的函数执行计划的数量。

max_catcache_tuple
参数说明:设置服务器缓存的系统表元组的最大数量。缓存过多的系统表元组可能占用很大内存。将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。

取值范围:

  • 整型,取值必须大于等于-1。
  • 默认值:-1,表示不限制缓存的系统表元组的数量。

max_relcache_entry
参数说明:设置服务器缓存的表模式信息的最大数量。缓存过多的表模式信息可能占用很大内存。将此参数设置为一个合理的值,有助于减少内存占用,提升系统性能。

取值范围:

  • 整型,取值必须大于等于-1。
  • 默认值:-1,表示不限制缓存的表模式信息的数量。

2. 磁盘空间

用于限制临时文件所占用的磁盘空间

temp_file_limit
参数说明:限制一个会话中可以使用的所有临时文件的总空间,例如排序和哈希表使用的临时文件,或游标所占用的临时文件。

此设置包括了任意时刻可以使用的临时文件的总和。

注意:

  • SQL 查询执行时使用的临时表空间不在此限制。

取值范围:

  • 整型(kB)
  • 默认值:-1,表示没有限制

3. 内核资源

这些参数是否生效依赖于操作系统的设置。

max_files_per_process
参数说明:设置每个服务器进程允许同时打开的最大文件数目。如果操作系统内核强制一个合理的数目,则不需要设置。

但是在一些平台上(特别是大多数BSD系统),内核允许独立进程打开比系统真正可以支持的数目大得多得文件数。如果您发现有的“Too many open files”这样的失败现象,请尝试缩小这个设置。

取值范围:

  • 整型
  • 默认值:1000

shared_preload_libraries
参数说明:此参数用于声明一个或者多个在服务器启动的时候预先装载的共享库,多个库名字之间用逗号分隔。比如 ‘$libdir/mylib’ 会在加载标准库目录中的库文件之前预先加载mylib.so(某些平台上可能是 mylib.sl)库文件。

可以用这个方法预先装载GaussDB的存储过程库,通常是使用 ‘$libdir/plXXX’ 语法。 XXX只能是pgsql,perl,tcl,python之一。

通过预先装载一个共享库并在需要的时候初始化它,可以避免第一次使用这个库的加载时间。但是启动每个服务器进程的时间可能会增加,即使进程从来没有使用过这些库。因此建议对那些将被大多数会话使用的库才使用这个选项。

注意:

  • 如果被声明的库不存在,GaussDB服务将会启动失败。
  • 每一个支持GaussDB的库都有一个特殊的标记用于保证兼容性。因此,不支持GaussDB的库不能用这种方法加载。

取值范围:

  • 字符串
  • 默认值:空

4. 后台写进程

后端写进程的功能就是把共享缓冲区中的脏数据(指共享缓冲区中新增或者修改的内容)写入到磁盘。目的是让数据库进程在进行用户查询时可以很少或者几乎不等待写动作的发生(写动作由后端写进程完成)。

后端写进程将持续的把脏页面刷新到磁盘上,所以在检查点到来的时候,只有几个页面需要刷新到磁盘上。但是这样还是增加了I/O的总净负荷,因为以前的检查点间隔里,一个重复弄脏的页面可能只会冲刷一次,而同一个间隔里,后端写进程可能会写好几次。在大多数情况下,连续的低负荷要比周期性的尖峰负荷好。

注意
这些参数只能在gaussdb命令行上设置或者通过gs_guc reload生效。

bgwriter_delay
参数说明:设置后端写进程写"脏"共享缓冲区之间的时间间隔。每一次,后端写进程都会为一些脏的缓冲区发出写操作(用bgwriter_lru_maxpages参数控制每次写的量),然后休眠bgwriter_delay毫秒后才再次启动。

在许多系统上,休眠延时的有效分辨率是10毫秒。因此,设置一个不是10的倍数的数值与把它设置为下一个10的倍数是一样的效果。

取值范围:

  • 整型(毫秒)
  • 默认值:200

bgwriter_lru_maxpages
参数说明:设置后端写进程每次可写入磁盘的“脏”缓存区的个数。

取值范围:

  • 整型,0~1000
  • 默认值:100

说明:

  • 此参数设置为0表示禁用后端写功能,禁用后端写功能不会对checkpoints产生影响。

bgwriter_lru_multiplier
参数说明:通过与已使用缓存区数目的乘积评估下次服务器需要的缓存区数目。

写“脏”缓存区到磁盘的数目取决于服务器最近几次使用的缓存区数目。最近的buffers数目的平均值乘以bgwriter_lru_multiplier是为了评估下次服务器进程需要的buffers数目。在有足够多的干净的、可用的缓存区之前,后端写进程会一直写“脏”缓存区的(每次写的缓存区数目不会超过bgwriter_lru_maxpages的值)。

设置bgwriter_lru_multiplier的值为1.0表示一种“实时”策略,其作用是精准预测下次写“脏”缓冲区的数目。设置为较大的值可以应对突然的需求高峰,而较小的值则可以让服务器进程执行更多的写操作。

设置较小的bgwriter_lru_maxpages和bgwriter_lru_multiplier会减小后端写进程导致的额外I/O开销,但是服务器进程必须自己发出写操作,增加了对查询的响应时间。

取值范围:

  • 浮点型
  • 默认值:2.0

5. 异步IO

此参数的设置只针对位图索引生效。普通的索引扫描(index scan)一次只读一条索引项,使得一个PAGE有可能被多次访问,而位图索引一次性将满足条件的索引项全部取出并在内存中进行排序,然后根据取出的索引项访问表数据。

effective_io_concurrency
参数说明:设置GaussDB可以同时执行的并发磁盘I/O操作的数量。提高此数值还可以增加单个会话中的并发磁盘I/O操作的数量。

此参数的设置取决于数据库使用RAID 0或者RAID 1中的磁盘个数(而对于RAID 5,同样的磁盘个数发挥的效果有限)。在一个会话中,如果数据库经常要处理并发查询,则建议设置此参数的值较低,这样可以使磁盘阵列处于繁忙状态(对磁盘阵列的利用率高)。

对于一些特殊的系统,例如基于内存的存储系统或者磁盘阵列受总线带宽的制约,此参数的最佳设置应该是I/O可达到的最大值。

异步I/O的设置依赖于操作系统是否支持posix_fadvise功能。如果操作系统不支持此功能,则只能设置此参数的值为0,否则将出错。

注意:

  • 设置较高的值将会导致额外的CPU开销,建议通过实验来得到最佳设置。

取值范围:

  • 整型,1~1000
  • 默认值:1

你可能感兴趣的:(GaussDB)