PostgreSQL的默认最大连接数是100个,但是这个参数可以在服务器启动时进行设置。如果您想增加最大连接数,您还需要同时增加shared_buffers和kernel.shmmax的值,以提高数据库的缓存能力和性能。但是,增加连接数也会消耗更多的内存,所以您应该根据您的系统资源和应用需求来合理调整这个参数。如果您的应用需要大量的连接,您可以考虑使用pg_bouncer等工具来进行连接池管理。
kernel.shmmax是一个内核参数,它定义了一个Linux进程可以在其虚拟地址空间中分配的单个共享内存段的最大字节数。这个参数会影响到数据库系统(如Oracle)的性能,因为数据库系统会使用共享内存来存储SGA(共享全局区)。如果kernel.shmmax设置得太小,可能会导致数据库无法分配足够的共享内存,从而出现错误信息3。如果kernel.shmmax设置得太大,可能会导致系统的内存压力增加,从而影响其他进程的运行。因此,kernel.shmmax应该根据系统的内存大小和数据库的需求来合理设置。
设置kernel.shmmax内核参数没有一个固定的标准,它取决于您的系统的内存大小和数据库的需求。一般来说,您可以参考以下几个原则:
- 对于64位服务器,您可以使用内存的一半作为kernel.shmmax的值
- 对于32位服务器,您可以使用3GB作为kernel.shmmax的值
- kernel.shmmax应该略大于数据库的SGA(共享全局区)的大小
- kernel.shmmax不应该超过系统内存的40%,以免影响其他进程的运行
举个例子,如果您的系统是64位的,内存是16GB,数据库的SGA是4GB,那么您可以设置kernel.shmmax为8GB(16GB/2),这样既能满足数据库的需求,又能避免内存压力过大。
参考:
(1)Kernel parameter SHMALL and SHMAX - Unix & Linux Stack Exchange. https://unix.stackexchange.com/questions/298354/kernel-parameter-shmall-and-shmax
(2) Changing Kernel Parameter Values - Oracle Help Center. https://docs.oracle.com/en/database/oracle/oracle-database/19/ladbi/changing-kernel-parameter-values.html
(3) Linux shmmax and shmall - how to set correct unit?. https://stackoverflow.com/questions/52751256/linux-shmmax-and-shmall-how-to-set-correct-unit
postgresql如何配置SGA
SGA(共享全局区)是Oracle数据库的一个重要概念,它是数据库实例的一块共享内存,用于存储缓存、数据字典、SQL语句等信息。PostgreSQL数据库没有完全等同于SGA的概念,但是它也有一些参数可以用来配置数据库的内存使用和缓存策略。这些参数包括:
- shared_buffers:这个参数决定了PostgreSQL用于缓存数据和索引的内存大小。它类似于Oracle的DB_CACHE_SIZE参数。一般来说,这个参数应该设置为系统内存的10%到25%之间,但是不要超过系统内存的40%。
- work_mem:这个参数决定了每个排序或哈希操作可以使用的内存大小。它类似于Oracle的SORT_AREA_SIZE参数。如果这个参数设置得太小,可能会导致排序或哈希操作使用临时文件,从而降低性能。如果设置得太大,可能会导致系统内存不足,从而触发交换或OOM(内存溢出)。一般来说,这个参数可以根据系统内存的25%除以最大连接数来计算。
- effective_cache_size:这个参数是一个估计值,用来告诉PostgreSQL规划器操作系统可以用于缓存文件的内存大小。它类似于Oracle的DB_FILE_MULTIBLOCK_READ_COUNT参数。这个参数并不分配实际的内存,而是影响查询优化器的成本计算。一般来说,这个参数可以设置为系统内存的50%到75%之间。
以上是一些常见的和内存相关的配置参数,您还可以参考PostgreSQL文档²了解更多的细节和其他参数。
参考:
(1) Chapter 20. Server Configuration - PostgreSQL Documentation. https://www.postgresql.org/docs/current/runtime-config.html
(2) PostgreSQL: Documentation: 15: 20.1. Setting Parameters. https://www.postgresql.org/docs/current/config-setting.html
(3) How to tune PostgreSQL for memory | EDB. https://www.enterprisedb.com/postgres-tutorials/how-tune-postgresql-memory