PostgreSQL 中的内存调整

postgresql.conf 中的设置

为方便将大量数据加载到 PostgreSQL 数据库中,可能需要增大 postgresql.conf 文件中的 shared_buffers 值和 max_locks_per_transaction 值。

shared_buffers

参数 shared_buffers 用于指定共享内存缓冲区所占用的内存量。PostgreSQL 文档指出,出于对性能的考虑,所用的设置可能需要大于最小值 128 KB 要大,或者是 max_connections 的设置值的 16 倍。对于生产装置,建议将 shared_buffers 设置为使用几十兆字节。

当加载大量数据时,您很可能需要将 shared_buffers 设置为大于默认值 32 MB。更改了 postgresql.conf 文件中的此参数后,必须重新启动数据库群集。

max_locks_per_transaction

max_locks_per_transaction 值指示可以同时锁定的数据库对象的数量。大多数情况下,默认值 64 即可满足需求。但是,当一次性加载大量数据集(例如,几千个)时,事务的并行对象锁定数量可超过 64 个。

并发锁定与数据集数量之间并不是一对一的关系,也就是说,如果您要加载 3,000 个数据集,并不需要将 max_locks_per_transaction 增加到 3,000。在进行批量加载前,先将该值增加到 100 即可。

如果更改参数 max_locks_per_transaction 的值,必须重新启动服务器。

增加以上任一参数的值都有可能导致数据库所需的共享内存大于 UNIX 操作系统 (OS) 的可用内存。有关如何增加 OS 共享内存设置的信息,请参阅 PostgreSQL 文档中的“管理内核资源”。

提高 SQL 空间查询性能

如果将系统环境变量 ST_GEOMETRY_OUTPUT_FORMAT 设置为输出 ST_Geometry 类型,而不是扩展的熟知文本 (WKT) 表示,则在执行返回业务表的 ST_Geometry 空间列的 SQL 查询时,可能会提高查询性能。

默认情况下,ST_GEOMETRY_OUTPUT_FORMAT 被设置为 TYPE,这意味着将返回十六进制表示。创建可用的地理数据库备份时需要该设置。如果想提高 SQL 查询的性能,应将此变量更改为 ST_GEOMETRY。如果因为需要执行大量的空间 SQL 查询而设置此变量,请确保在查询完成后将其删除,然后重新启动 PostgreSQL 数据库群集。

应在运行 PostgreSQL 的计算机上设置此变量。

对于 Linux OS,为要发出 SQL 查询的 shell 设置此变量。对于 bash shell,其语法如下:

ST_GEOMETRY_OUTPUT_FORMAT=ST_GEOMETRY

对于 csh shell,其语法为:

setenv ST_GEOMETRY_OUTPUT_FORMAT ST_GEOMETRY

在 Windows 上,将在系统属性中创建一个系统环境变量。

变量名称:ST_GEOMETRY_OUTPUT_FORMAT

变量值:ST_GEOMETRY

设置了该变量后,必须重新启动 PostgreSQL 数据库群集。


3/7/2012