上一主题: 在不同工具上运行的 N 层应用(适合于负载均衡和故障切换)

下一主题: ORACLE 数据库组件


PGSQL64-PostgreSQL 数据库组件

PGSQL、PGSQL64:PostgreSQL 数据库组件

概览

目录

系统

类别

数据库组件

用户卷

yes

最小 内存

160 MB

操作系统

Linux

约束

no

问题/注释

咨询论坛

功能概述

重要信息! PGSQL 在 CA AppLogic 2.8+ 中不可用;请改用 PGSQL64。

PGSQL64 是基于 PostgreSQL 数据库引擎的数据库组件 (http://www.postgresql.org)。 它提供一种简便方法将数据库添加到任何应用。 PGSQL64 是一种企业级数据库组件,支持 MYSQLx 组件当前不支持的许多功能。 这些功能包括存储过程、触发器、视图和用户自定义的数据类型。

PGSQL64 在应用定义的卷(可在每个 PGSQ64L 实例上配置)上存储数据库。 PGSQL64 在空卷上启动时,将有选择性地创建一个空数据库。 无法在多个 PGSQL 实例(每 PGSQL 实例一个数据库卷)之间共享 PGSQL64 数据库卷。

PGSQL64 客户端通过 in 终端访问已配置的数据库。 通过相同的终端处理数据库请求并传回完成确认。 PGSQL64 允许任何有效的 Postgres 用户通过 in 终端访问数据库(该组件具有一个预配置的超级用户角色:标准 postgres)。 可以用 in 支持的并发连接的最大数目来配置 PGSQL64。

PGSQL64 还能够维护可通过 log 终端访问的数据库日志。 该日志可用于跟踪数据库信息和错误日志记录。 日志路径、名称、期限和内容都是可配置的。 此外,还可以启用各种数据库统计信息和调试信息,以帮助配置数据库访问模式及诊断问题/错误。

PGSQL64 通常用于通用型 Web 数据库应用(具有执行简单查询的大量用户的小型数据库)或决策支持数据库(具有执行复杂查询的少量用户的大型数据库)。

名称

最新版本

操作系统

PostgreSQL

说明

PGSQL64

2.0.2-1

CentOS 5.5

9.0.1

 

资源

资源

最小值

最大值

默认值

CPU

0.1

16

0.4

内存

160 MB

32G

512 MB

带宽

1 Mbps

2 Gbps

250 Mbps

注意:应基于两个主要因素增加内存:并发用户数和数据库大小。 通常,PGSQL 使用每 128 MB 内存可支持大约 80 个并发用户。 数据库越大,PGSQL 用于处理的内存应越大。 例如:对于 10G 数据库,PGSQL 至少应配置 1G 内存-如果超过 1G,则性能更佳。

终端

名称

目录

协议

说明

in

in

PGSQL

接收来自客户端的 PostgreSQL 数据库请求。

日志

out

CIFS

用于访问远程文件系统以存储错误日志。 如果未使用该终端,则可将其保持未连接状态。

mon

out

CCE

发送性能和资源使用统计信息。 此终端可保持未连接状态。

默认接口已启用。 它用于诊断和故障排除(通过 SSH)。 此组件的未来版本可能会禁用 SSH 访问。

用户卷

卷

说明

data

用于数据库数据存储的卷。

重要信息! 数据卷必须专用于 PGSQL 实例(不能与其他组件共享)。

属性

注意:除了文件名和路径外,PGSQL 属性都不区分大小写。

属性名

类型

说明

auto_create

字符串

当数据库不存在时是否创建它。 可能值为 yes 和 no,yes 表示创建数据库,no 表示阻止自动创建(以避免在卷损坏时意外覆盖)。 如果设置为 no 并且用户卷中不存在数据库,则组件在维护模式下启动(不启动 PostgreSQL 后台进程)。
默认值为 yes。

read_only

字符串

通过 in 终端访问的数据库是只读的。 可能值为 yes 和 no,yes 表示只读,no 表示读/写。 此属性仅供 PGSQL 用来优化数据库的性能(只读数据库不需要垃圾回收等)。
默认值为 no。

max_connections

整数

PGSQL 应通过 in 终端处理的到数据库的最大并发活动连接数。 PGSQL 在用于内存管理的高级计算中使用此值。 通常,对于每 80 个并发连接,PGSQL 需要 128 MB 内存。 一旦达到连接限制,PGSQL 便拒绝所有后续连接。
默认值为 100。

query_complexity

字符串

此属性指定用户将针对用于 PGSQL 的数据库执行的查询的常规复杂性。 可能值为:
simple-仅包括几行的简单查询(常规使用)。 大多数 Web 数据库应用都使用简单查询。
complex-包括数百行并可访问数据库中的数百万行的复杂查询(即决策支持应用或事务处理量很大的应用)。
=PGSQL= 使用查询复杂性来确定应为查询处理保留的内存量。
默认值为 simple。

sync_on_write

字符串

PGSQL 是否应等待将数据库更新以物理方式写入磁盘(主要是在提交事务时)。 可能值有 yes 和 no,yes 表示等待磁盘更新,no 表示缓存更新并在稍后写入更新,从而改进性能(延迟写入)。 将此属性设置为 yes 可能会导致性能损失,但也会确保,在组件崩溃或失败发生之后,数据库可以恢复到一致状态。 请注意,如果将数据库指定为只读,PGSQL 将自动禁用此功能并忽略此属性的值。
默认值为 yes。

时区

字符串

指定在组件中使用的时区。 如果此属性为空,则时区未经修改且保持原样。 此处提供可支持时区的列表。 默认值:空

日志记录属性

属性名

类型

说明

log_filename

字符串

数据库日志文件的文件名,相对于通过 log 终端访问的文件系统(例如:postgresql.log 表示 /mnt/log/postgresql.log,或 /pgsql_logs/postgresql.log 表示 /mnt/log/pgsql_logs/postgresql.log)。 如果为空,则禁用日志记录。 可在日志文件名中指定 %-escapes(与 Linux strftime 模式相同-有关 %-escapes 的完整列表,请参阅本主题末尾的参考部分)。 如果不使用 %-escapes,PGSQL 将附加日志文件的创建时间的新纪元。 默认值:(空)。

log_age

整数

日志文件的最长生存期;指定以分钟为单位。 在经过指定的分钟数之后,使用 log_filename 属性创建新日志文件。 如果日志文件已存在,PGSQL 将截断它;这样就允许日志循环。 设置为 0,以禁用基于时间的新日志文件的创建。
默认值为 1440(每天一个日志)。

log_size

整数

日志文件的最大大小;指定以兆字节为单位。 当日志文件达到指定大小时,使用 log_filename 属性创建新日志文件。 如果日志文件已存在,PGSQL 将截断它;这样就允许日志循环。 设置为 0,以禁用基于大小的新日志文件的创建。
默认值为 0。

log_level

字符串

数据库日志记录级别。 可能值为:
none-不记录任何内容。
error-只记录 PGSQL 检测到的错误。
warn-既记录警告又记录错误。
notice-记录警告、错误和通知。
debug-除警告、通知和错误外,还记录其他调试信息。 调试信息包括执行的 SQL 语句和数据库连接信息(建立/断开)。
默认值为 warn。

log_cmd_stats

字符串

是否在 PGSQL 中记录有关执行 SQL 命令的统计信息(以及命令开始执行的时间)。 可能值有 yes 和 no,yes 表示启用日志记录,no 表示禁用日志记录。 可以使用 PGSQL 中的 pg_stat_activity 系统视图访问统计信息。 如果设置为 no,将禁用 PGSQL 自定义计数器。
默认值为 yes。 自动真空需要统计信息日志记录。

重要信息! 如果启用了日志记录但未连接 log 终端,PGSQL 组件将无法启动。

自定义计数器

如果 log_cmd_stats 属性设置为 yes,PGSQL 组件将通过 mon 终端报告下列自定义计数器。 这些计数器属于 PostgreSQL 计数器组:

计数器名称

说明

Active processes

服务器的活动服务器进程数

Transactions committed

服务器中已提交的事务数

Rolled back

服务器中已回滚的事务数

DB Block fetch requests

服务器的磁盘块获取请求数

DB Block fetch hits

在服务器缓存中找到的磁盘块获取请求数

错误消息

在组件启动失败的情况下,系统日志可能记录以下错误消息:

错误消息

说明

错误: 无法更新 postgres.conf 配置文件,可能是由于启动卷上的磁盘空间不足。

PGSQL 无法更新 postgres.conf 配置文件。 可能的原因-启动卷已满、存在权限问题

错误: 意外的内部错误: 缺少 postgres.conf.tmpl 文件,请与 CA 技术支持联系

模板文件 postgresql.conf.tmpl 不存在或不可读,请与 CA 支持联系

错误: 无法访问指定的日志文件;请检查 log_filename 属性是否包含正确路径,log 终端是否已连接。

PGSQL 无法确定日志文件目录,可能的原因-log_filename 值无效

错误: 无法向指定的日志文件写入内容;请检查指定的日志目录是否可写。

无法向 PostgreSQL 日志文件写入内容

错误: 为 log_level 属性指定了未知日志级别

指定的 log_level 值无效,它应为以下值之一:none、error、warn、notice、debug

错误: log_cmd_stats 无法启用,因为数据库被指定为只读

log_cmd_stats 要求数据库是可读写的

错误: 无法挂接用户的数据库卷。 请确保已使用有效的文件系统格式化该卷

PGSQL 无法使用数据库文件挂接指定的卷。 请确保卷已存在并使用 ext3 文件系统进行格式化

错误: PGSQL 在维护模式下启动,因为提供的数据库卷上存在无法识别的 PostgreSQL 数据库

指定的数据库卷不包含有效数据库,auto_create 设置为“no”。 组件将在维护模式下启动

错误: 无法在提供的数据库卷上创建新数据库。 有关该故障的更多详细信息,请参阅 PGSQL 中的 /var/log/appliance/log 文件

PGSQL 无法清空数据库目录或创建新数据库目录

错误: 无法启动 PostgreSQL 服务器。 有关该故障的更多详细信息,请参阅 PGSQL 中的 /var/log/appliance/log 日志文件

PGSQL 无法启动 PostgreSQL 服务器,请参阅 /var/log/pgstartup.log 和 /var/log/appliance/log 了解详细信息

错误: 已指定 log_filename,但未连接 log 终端。

log_filename 属性不为空,但未连接 PGSQL 的 log 终端

错误: 已指定 log_filename,但未挂接日志设备。

log_filename 属性不为空,但 PGSQL 无法访问日志记录设备。 可能的原因是 PGSQL 在 NAS 之前启动

显示板消息

当遇到需要用户注意的严重错误时,PGSQL 会将如下消息记录到网格的显示板:

消息

说明

数据卷容量不到可用磁盘空间的 5%

PGSQL 组件上数据卷的可用磁盘空间少于 5%。 建议增加卷的大小。

数据卷容量不到可用磁盘空间的 1%

PGSQL 组件上数据卷的可用磁盘空间少于 1%。 需要立即引起注意;可能发生数据丢失。

当可用磁盘空间量降到阈值以下时,只记录这些消息一次。

性能

PGSQL 性能在很大程度上受 sync_on_write、log_filename 和 log_cmd_stats 属性值的影响。 将 fsync、日志记录和统计信息全部禁用(sync_on_write=no、log_filename=""、log_cmd_stats=no)可以实现最佳性能。 下表包含在启用和禁用这些功能时实现的示例 pgbench 测试结果(以 tps(每秒事务次数)为单位进行指定)。 pgbench 是 PostgreSQL 随附的一个实用工具,用于度量数据库的性能。

pgbench 测试配置

已启用

已禁用

1 个客户端,100 次请求

40-70 tps

650 tps

10 个客户端,100 次请求

60-90 tps

1100 tps

100 个客户端,100 次请求

70-110 tps

1200 tps

简单的双层应用(Web 数据库应用)

下图显示 PGSQL 组件在面向执行简单查询的很多用户的双层 Web 应用中的典型用法:

简单的双层应用(Web 数据库应用)

正在使用的组件:

客户端请求到达 usr 网关。 网关会将请求转发到 Web 服务器,后者处理请求。 当 srv 上的脚本(例如:Perl 或 PHP)需要访问永久数据时,它会通过 db 终端使用 dbase 组件。

在此示例中,用于 dbase 的数据库不是只读的,可能有许多用户通过 srv 访问该数据库来执行简单查询。 因此,dbase 配置为使用 256M 内存。 此外,该数据库不保留任何数据库错误日志文件(未连接 log 终端)。

示例属性配置:

属性名

值

说明

auto_create

yes

如果数据卷为空,则创建数据库。

read_only

no

数据库不是只读的,可以进行修改。

query_complexity

simple

用户通常执行简单查询。

sync_on_write

yes

等待将数据库更新以物理方式写入磁盘。

注意:还必须在 dbase 上配置数据卷,必须在网站上配置内容卷。 要创建可在此处使用的应用卷,请参阅《网格用户指南》。

可扩展的双层应用(Web 数据库应用)

下图显示 PGSQL 组件在双层 Web 应用中的典型用法,其中数据库用于在负载均衡的多个 Web 服务器之间共享状态和数据(面向许多执行简单查询的用户)。 此外,此示例有一个单独的用于维护的输入,管理员通过该输入可以登录并访问用于维护的数据库;此示例还有一个可供管理员登录并查看 PostgreSQL 错误日志的输入。

可扩展的双层应用(Web 数据库应用)

正在使用的组件:

客户端请求到达 usr 网关。 网关会将请求转发到 webs 负载均衡器,后者将请求定向到 Web 服务器中的一个(srv1 或 srv2)。 当 Web 服务器上的脚本(例如:Perl 或 PHP)需要访问永久数据时,它们会通过其 db 终端使用 dbase 组件。

dbase 数据库会通过 log 终端将其错误日志写入 logs 组件。 此外,管理员还可以通过 logs 组件的 log 网关登录并查看数据库错误日志文件(以及 Web 服务器日志文件)。

此外,管理员还可以通过 admin 服务器的 maint 网关在 SSH 上登录。 从 admin 服务器中,管理员可以访问 dbase 数据库中的统计信息或更改数据库架构。 例如:admin 服务器可以通过 gway 网关访问 Internet,以下载库或数据库架构的较新版本。

在此示例中,用于 dbase 的数据库不是只读的,可能有许多用户通过 Web 服务器访问该数据库来执行简单查询。 因此,dbase 配置为使用 256M 内存。 此外,该数据库还配置为保留一个星期的日志文件,每天一个文件(在每星期之后,将覆盖日志文件)。

示例属性配置:

属性名

值

说明

auto_create

yes

如果数据卷为空,则创建数据库。

read_only

no

数据库不是只读的,可以进行修改。

query_complexity

simple

用户通常执行简单查询。

sync_on_write

yes

等待将数据库更新以物理方式写入磁盘。

log_filename

dblog.%a

要在日志数据卷上存储的错误日志文件的名称-每天一个文件。

log_age

1440

每个日志文件适用于一天,例如 dblog.Mon。

log_level

error

错误日志记录级别。

注意:

简单的双层应用(决策支持系统)

下图显示 PGSQL 组件在为对大小是数 GB 的大型数据库执行复杂查询的几个用户实现决策支持系统的双层 Web 应用中的典型用法:

简单的双层应用(决策支持系统)

正在使用的组件:

客户端请求到达 usr 网关。 网关会将请求转发到 srv 服务器,后者处理请求。 当 srv 上的脚本(例如:Perl 或 PHP)需要访问永久数据时,它会通过 db 终端使用 dbase 组件。 dbase 组件配置为在由 logs 公开的共享的根目录内存储其日志文件。

使用浏览器,管理员可连接到 admin 网关来查看 PostgreSQL 日志文件。 admin 网关将请求转发给日志 NAS 组件。

在此示例中,用于 dbase 的数据库不是只读的,用户可能通过 srv 访问该数据库来执行复杂查询(访问数百万行的大型查询)。 因此,dbase 应配置为使用 1536 MB 的内存。 此外,该数据库还配置为保留一个星期的日志文件,每天一个文件(在每星期之后,将覆盖日志文件)。

示例属性配置:

属性名

值

说明

auto_create

yes

如果数据卷为空,则创建数据库。

max_connections

25

数据库限制为 25 个并发用户。

read_only

no

数据库不是只读的,可以进行修改。

query_complexity

complex

用户通常执行复杂查询。

sync_on_write

yes

等待将数据库更新以物理方式写入磁盘。

log_filename

dblog.%a

要在日志数据卷上存储的错误日志文件的名称-每天一个文件。

log_age

1440

每个日志文件适用于一天,例如 dblog.Mon。

log_level

error

错误日志记录级别。

注意:还必须在 dbase 组件和 logs 组件上配置数据卷。

简单的双层应用(Web 只读数据库应用)

PGSQL 组件的不太常见的用法是使用只读数据库的双层 Web 应用。 除了数据库为只读(不允许进行任何修改)之外,这与前面的简单应用示例相同。 重要的是,设置 PGSQL 的参数,以便它在将要关闭只读数据库不需要的各种 PostgreSQL 功能时使用只读数据库,这样会提高性能(数据库自动真空处理、数据库修改统计信息,等等)。

示例属性配置:

属性名

值

说明

auto_create

no

数据卷上的数据库应已存在。

read_only

yes

数据库是只读的,不允许修改。

query_complexity

simple

用户通常执行简单查询。

log_filename

dblog.%a

要在日志数据卷上存储的错误日志文件的名称-每天一个文件。

log_age

1440

每个日志文件适用于一天,例如 dblog.Mon。

log_level

error

错误日志记录级别。

调试数据库应用

PGSQL 公开属性,以允许使用参数化的日志文件 (log_filename) 来调试数据库。 例如:在您需要跟踪 SQL 语句、了解执行 SQL 语句所花费的时间、了解 SQL 语句的失败原因等时,这是很有用的。 调试信息包括:

为了调试数据库,通常配置下列属性:

属性名

值

说明

log_level

debug

调试日志记录级别。

log_cmd_stats

yes

日志 SQL 命令统计信息(计时、处理、执行等)。

调试信息存储在可通过 log 终端访问的错误日志中,或可通过 PostgreSQL 统计信息视图之一来访问:http://www.postgresql.org/docs/8.3/static/monitoring-stats.html。

说明

请注意下列各项:

此组件中使用的第三方开源软件

除了在组件基类(LUX64 是 PGSQL64 的基类)中发现的软件之外,还使用了下列第三方开源软件。

软件

版本

已修改

许可

注释

libgcrypt

1.4.4-5.el5

No

GPLv2

不适用

libgpg-error

1.4-2

No

GPLv2

不适用

libxslt

1.1.17-2.el5_2.2

No

GPLv2

不适用

postgresql

9.0.1-1PGDG

No

BSD

不适用

postgresql-libs

9.0.1-1PGDG

No

BSD

不适用

postgresql-server

9.0.1-1PGDG

No

BSD

不适用

postgresql-test

9.0.1-1PGDG

No

BSD

不适用

samba-client

3.0.28-1.el5_2.1

No

GPLv3

不适用

samba-common

3.0.28-1.el5_2.1

No

GPLv3

不适用