I. 教程
II. SQL 语言
III. 服务器管理
- 章14. 安装指导
- 章15. 在 Windows 上安装客户端
- 章16. 操作系统环境
- 章17. 服务器配置
- 章18. 数据库角色和权限
- 章19. 管理数据库
- 章21. 区域
- 章20. 用户认证
- 章22. 日常数据库维护工作
- 章23. 备份与恢复
- 章24. 高可用性与负载均衡
- 章25. 监控数据库的活动
- 章26. 监控磁盘使用情况
- 章27. 可靠性和预写式日志
- 章28. 回归测试
IV. 客户端接口
- Chapter 28. libpq - C 库
- 章29.
- Chapter 30. ecpg - 在 C 里嵌入 SQL
- Chapter 31. 信息模式
- 31.2. 数据类型
- 31.3. informationschemacatalog_name
- 31.4. applicable_roles
- 31.5. check_constraints
- 31.6. columndomainusage
- 31.7. column_privileges
- 31.8. columnudtusage
- 31.9. columns
- 31.10. constraintcolumnusage
- 31.11. constrainttableusage
- 31.12. datatypeprivileges
- 31.13. domain_constraints
- 31.14. domainudtusage
- 31.15. domains
- 31.16. element_types
- 31.17. enabled_roles
- 31.18. keycolumnusage
- 31.20. referential_constraints
- 31.21. rolecolumngrants
- 31.22. roleroutinegrants
- 31.23. roletablegrants
- 31.24. roleusagegrants
- 31.25. routine_privileges
- 31.26. routines
- 31.27. schemata
- 31.28. sql_features
- 31.29. sqlimplementationinfo
- 31.30. sql_languages
- 31.31. sql_packages
- 31.32. sql_sizing
- 31.33. sqlsizingprofiles
- 31.34. table_constraints
- 31.35. table_privileges
- 31.36. tables
- 31.37. triggers
- 31.38. usage_privileges
- 31.39. viewcolumnusage
- 31.40. viewtableusage
- 31.41. views
V. 服务器端编程
- 章33. 扩展 SQL
- 章34. 触发器
- 章35. 规则系统
- 章36. 过程语言
- 章37. PL/pgSQL - SQL 过程语言
- 章38. PL/Tcl - Tcl 过程语言
- 章39. PL/Perl - Perl 过程语言
- 章40. PL/Python - Python 过程语言
- 章41. 服务器编程接口
VI. 参考手册
- I. SQL 命令
- ABORT
- ALTER AGGREGATE
- ALTER CONVERSION
- ALTER DATABASE
- ALTER DOMAIN
- ALTER FUNCTION
- ALTER GROUP
- ALTER INDEX
- ALTER LANGUAGE
- ALTER OPERATOR
- ALTER OPERATOR CLASS
- ALTER ROLE
- ALTER SCHEMA
- ALTER SEQUENCE
- ALTER TABLE
- ALTER TABLESPACE
- ALTER TRIGGER
- ALTER TYPE
- ALTER USER
- ANALYZE
- BEGIN
- CHECKPOINT
- CLOSE
- CLUSTER
- COMMENT
- COMMIT PREPARED
- COMMIT
- COPY
- CREATE AGGREGATE
- CREATE CAST
- CREATE CONSTRAINT TRIGGER
- CREATE CONVERSION
- CREATE DATABASE
- CREATE DOMAIN
- CREATE FUNCTION
- CREATE GROUP
- CREATE INDEX
- CREATE LANGUAGE
- CREATE OPERATOR CLASS
- CREATE OPERATOR
- CREATE ROLE
- CREATE RULE
- CREATE SCHEMA
- CREATE SEQUENCE
- CREATE TABLE
- CREATE TABLE AS
- CREATE TABLESPACE
- CREATE TRIGGER
- CREATE TYPE
- CREATE USER
- CREATE VIEW
- DEALLOCATE
- DECLARE
- DELETE
- DROP OWNED
- DROP AGGREGATE
- DROP CAST
- DROP CONVERSION
- DROP DATABASE
- DROP DOMAIN
- DROP FUNCTION
- DROP GROUP
- DROP INDEX
- DROP LANGUAGE
- DROP OPERATOR CLASS
- DROP OPERATOR
- DROP ROLE
- DROP RULE
- DROP SCHEMA
- DROP SEQUENCE
- DROP TABLE
- DROP TABLESPACE
- DROP TRIGGER
- DROP TYPE
- DROP USER
- DROP VIEW
- END
- EXECUTE
- EXPLAIN
- FETCH
- GRANT
- INSERT
- LISTEN
- LOAD
- LOCK
- MOVE
- NOTIFY
- PREPARE TRANSACTION
- PREPARE
- REASSIGN OWNED
- REINDEX
- RELEASE SAVEPOINT
- RESET
- REVOKE
- ROLLBACK PREPARED
- ROLLBACK TO SAVEPOINT
- ROLLBACK
- SAVEPOINT
- SELECT
- SELECT INTO
- SET
- SET CONSTRAINTS
- SET ROLE
- SET SESSION AUTHORIZATION
- SET TRANSACTION
- SHOW
- START TRANSACTION
- TRUNCATE
- UNLISTEN
- UPDATE
- VACUUM
- II. PostgreSQL 客户端应用程序
- III. PostgreSQL 服务器应用程序
VII. 内部
- 章42. PostgreSQL 内部概貌
- 章43. 系统表
- 43.1. 概述
- 43.2. pg_aggregate
- 43.3. pg_am
- 43.4. pg_amop
- 43.5. pg_amproc
- 43.6. pg_attrdef
- 43.7. pg_attribute
- 43.8. pg_authid
- 43.9. pgauthmembers
- 43.10. pg_autovacuum
- 43.11. pg_cast
- 43.12. pg_class
- 43.13. pg_constraint
- 43.14. pg_conversion
- 43.15. pg_database
- 43.16. pg_depend
- 43.17. pg_description
- 43.18. pg_index
- 43.19. pg_inherits
- 43.20. pg_language
- 43.21. pg_largeobject
- 43.22. pg_listener
- 43.23. pg_namespace
- 43.24. pg_opclass
- 43.25. pg_operator
- 43.26. pg_pltemplate
- 43.27. pg_proc
- 43.28. pg_rewrite
- 43.29. pg_shdepend
- 43.30. pg_shdescription
- 43.31. pg_statistic
- 43.32. pg_tablespace
- 43.33. pg_trigger
- 43.34. pg_type
- 43.35. 系统视图
- 43.36. pg_cursors
- 43.37. pg_group
- 43.38. pg_indexes
- 43.39. pg_locks
- 43.40. pgpreparedstatements
- 43.41. pgpreparedxacts
- 43.42. pg_roles
- 43.43. pg_rules
- 43.44. pg_settings
- 43.45. pg_shadow
- 43.46. pg_stats
- 43.47. pg_tables
- 43.48. pgtimezoneabbrevs
- 43.49. pgtimezonenames
- 43.50. pg_user
- 43.51. pg_views
- 章44. 前/后端协议
- 章45. PostgreSQL 编码约定
- 章46. 本地语言支持
- 章47. 书写一个过程语言处理器
- 章48. 基因查询优化器
- 章49. 索引访问方法接口定义
- 章50. GiST 索引
- 章51. GIN 索引
- 章52. 数据库物理存储
- 章53. BKI 后端接口
- 章54. 规划器如何使用统计信息
VIII. 附录
17.5. 预写式日志
又见节27.3获取 WAL 调节的细节。
17.5.1. Settings
fsync
(boolean
)如果打开这个选项,那么 PostgreSQL 服务器将在好几个地方使用
fsync()
系统调用(或等价调用,参见 wal_sync_method)来确保更新已经物理上写到磁盘中。这样就保证了数据库集群将在操作系统或者硬件崩溃的情况下恢复到一个一致的状态。不过,使用
fsync
会对性能有影响:在事务提交的时候,PostgreSQL 必须等待操作系统把预写日志刷新到磁盘上。在关闭fsync
的时候,操作系统可以尽可能优化缓冲、排序和推迟写动作。这样可以显著提高性能。不过,如果系统崩溃,最后提交的几个事务的结果可能部分或者全部丢失。最糟糕的情况是可能出现不可恢复的崩溃。数据库服务器本身崩溃并不是这里的风险因素。只有操作系统级别的崩溃才会导致毁坏数据的风险。因为涉及的风险太高,
fsync
的设置没有普适的原则。有些管理员总是关闭fsync
,而其它一些只是在批量装载的时候关闭它,因为这个时候,即使出现了错误,也有明确重新开始的点,而另外一些管理员总是打开fsync
。缺省是打开fsync
,目的是最大限度的可靠性。如果你信任操作系统、硬件、工具、备份电池,你可以考虑关闭fsync
。这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。如果这个选项被关闭,那么请考虑把 full_page_writes 也关闭了。wal_sync_method
(string
)用来向磁盘强制更新 WAL 数据的方法。如果
fsync
是关闭的,那么这个设置就没有意义,因为所有更新都不会强制输出。可能的值是:open_datasync
(用带O_DSYNC
选项的open()
打开 WAL 文件)fdatasync
(每次提交的时候都调用fdatasync()
)fsync_writethrough
(每次提交的时候调用fsync()
强制写出任何磁盘写缓冲区)fsync
(每次提交的时候调用fsync()
)open_sync
(用带O_SYNC
选项的open()
写 WAL 文件)
不是在所有系统上都能使用上面四种选项。缺省是被支持的最前面一个选项。这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。full_page_writes
(boolean
)打开这个选项的时候,PostgreSQL 服务器在检查点之后对页面的第一次写入时将整个页面写到 WAL 里面。这么做是因为在操作系统崩溃过程中可能只有部分页面写入磁盘,从而导致在同一个页面中包含新旧数据的混合。在崩溃后的恢复期间,由于在 WAL 里面存储的行变化信息不够完整,因此无法完全恢复该页。把完整的页面影像保存下来就可以保证正确存储页面,代价是增加了写入 WAL 的数据量。因为 WAL 重放总是从一个检查点开始的,所以在检查点后每个页面第一次改变的时候做 WAL 备份就足够了。因此,一个减小全页面写开销的方法是增加检查点的间隔参数值。
把这个选项关闭会加快正常操作的速度,但是可能导致系统崩溃或者掉电之后的数据库损坏,它的危害类似
fsync
,只是比较小而已。如果你有减小部分页面写入风险的硬件支持(比如电池供电的磁盘控制器),或者文件系统支持(比如 ReiserFS 4),并且他们可以把风险降低到一个可以接受的低范畴,那么你可以关闭这个选项。关闭这个选项并不影响即时恢复(PITR)的 WAL 使用(参阅节23.3)。
这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。缺省是on
。wal_buffers
(integer
)放在共享内存里用于 WAL 数据的磁盘页面缓冲区的数目。缺省值为 8 。这个设置只需要大到能保存下一次事务生成的 WAL 数据即可,因为这些数据在每次事务提交时都会写入磁盘。这个值只能在服务器启动的时候设置。
增大这个参数可能导致 PostgreSQL 要求更多的 System V 共享内存,可能超过操作系统的缺省配置。必要时,参阅节16.4.1获取如何调节这些参数的信息。
commit_delay
(integer
)向 WAL 缓冲区写入记录和将缓冲区刷新到磁盘上之间的时间延迟,以微秒计。非零的延迟允许多个事务共用一个
fsync()
系统调用提交,如果系统负载足够高,那么在给出的间隔里,其它的事务可能已经准备好提交了。但是如果没有其它事务准备提交,那么这个间隔就是在浪费时间。因此,这个延迟只是在一个服务器进程写其提交日志时,至少commit_siblings
个其它事务在活跃的情况下执行。缺省是零(无延迟)。commit_siblings
(integer
)在执行
commit_delay
延迟的时候,要求最少同时打开的并发事务数目。大一些的数值会导致在延迟期间另外一个事务准备好提交的可能性增大。缺省是 5 。
17.5.2. 检查点
checkpoint_segments
(integer
)在自动的 WAL 检查点之间的最大距离,以日志文件段计(通常每个段 16MB)。缺省是 3 。这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。checkpoint_timeout
(integer
)在自动 WAL 检查点之间的最长时间,以秒计。缺省是 300 秒。这个选项只能在服务器启动的时候或者在
postgresql.conf
文件里设置。checkpoint_warning
(integer
)如果由于填充检查点段文件导致的检查点发生时间间隔接近这个参数表示的秒数,那么就向服务器日志发送一个建议增加
checkpoint_segments
值的消息。缺省是 30 秒。零则关闭警告。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。
17.5.3. 归档
archive_command
(string
)将一个完整的 WAL 文件序列归档的 shell 命令。如果这是一个空字符串(缺省),那么就关闭 WAL 归档。字符串中任何
%p
都被要归档的文件的绝对路径代替,而任何%f
都只被该文件名代替(非绝对路径都相对于集群的数据目录)。如果你需要在命令里嵌入%
字符就必须双写(%%
)。有关更多的信息,参阅节23.3.1。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。有一点很重要:这个命令必须是当且仅当成功的时候才返回零。比如:
archive_command = 'cp "%p" /mnt/server/archivedir/"%f"' archive_command = 'copy "%p" /mnt/server/archivedir/"%f"' # Windows
archive_timeout
(integer
)archive_command 仅在已完成的 WAL 段上调用。因此,如果服务器只产生很少的 WAL 流量(或产生流量的周期很长),那么在完成事务以及安全归档存储之间将有一个很长的延时。为了限制未归档数据的逗留时间,你可以强制服务器以
archive_timeout
指定的秒数为周期切换到新的 WAL 段文件。该参数等于零表示关闭此特性。注意,由于强制切换而提早关闭的归档文件仍然与完整的归档文件长度相同。因此,将archive_timeout
设为很小的值是不明智的,它将导致占用巨大的归档存储空间。将archive_timeout
设置为 60 秒左右是比较合理的。这个选项只能在服务器启动的时候或者在postgresql.conf
文件里设置。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论