目录搜索
前言何为PostgreSQL?PostgreSQL简史格式约定更多信息臭虫汇报指导I. 教程章1. 从头开始1.1. 安装1.2. 体系基本概念1.3. 创建一个数据库1.4. 访问数据库章2. SQL语言2.1. 介绍2.2. 概念2.3. 创建新表2.4. 向表中添加行2.5. 查询一个表2.6. 表间链接2.7. 聚集函数2.8. 更新2.9. 删除章3. 高级特性3.1. 介绍3.2. 视图3.3. 外键3.4. 事务3.5. 窗口函数3.6. 继承3.7. 结论II. SQL语言章4. SQL语法4.1. 词法结构4.2. 值表达式4.3. 调用函数章5. 数据定义5.1. 表的基本概念5.2. 缺省值5.3. 约束5.4. 系统字段5.5. 修改表5.6. 权限5.7. 模式5.8. 继承5.9. 分区5.10. 其它数据库对象5.11. 依赖性跟踪章 6. 数据操作6.1. 插入数据6.2. 更新数据6.3. 删除数据章7. 查询7.1. 概述7.2. 表表达式7.3. 选择列表7.4. 组合查询7.5. 行排序7.6. LIMIT和OFFSET7.7. VALUES列表7.8. WITH的查询(公用表表达式)章8. 数据类型8.1. 数值类型8.2. 货币类型8.3. 字符类型8.4. 二进制数据类型8.5. 日期/时间类型8.6. 布尔类型8.7. 枚举类型8.8. 几何类型8.9. 网络地址类型8.10. 位串类型8.11. 文本搜索类型8.12. UUID类型8.13. XML类型8.14. 数组8.15. 复合类型8.16. 对象标识符类型8.17. 伪类型章 9. 函数和操作符9.1. 逻辑操作符9.2. 比较操作符9.3. 数学函数和操作符9.4. 字符串函数和操作符9.5. 二进制字符串函数和操作符9.6. 位串函数和操作符9.7. 模式匹配9.8. 数据类型格式化函数9.9. 时间/日期函数和操作符9.10. 支持枚举函数9.11. 几何函数和操作符9.12. 网络地址函数和操作符9.13. 文本检索函数和操作符9.14. XML函数9.15. 序列操作函数9.16. 条件表达式9.17. 数组函数和操作符9.18. 聚合函数9.19. 窗口函数9.20. 子查询表达式9.21. 行和数组比较9.22. 返回集合的函数9.23. 系统信息函数9.24. 系统管理函数9.25. 触发器函数章10. 类型转换10.3. 函数10.2. 操作符10.1. 概述10.4. 值存储10.5. UNION章11. 索引11.1. 介绍11.2. 索引类型11.3. 多字段索引11.4. 索引和ORDER BY11.5. 组合多个索引11.6. 唯一索引11.7. 表达式上的索引11.8. 部分索引11.9. 操作类和操作簇11.10. 检查索引的使用章12. Full Text Search12.1. Introduction12.2. Tables and Indexes12.3. Controlling Text Search12.4. Additional Features12.5. Parsers12.6. Dictionaries12.7. Configuration Example12.8. Testing and Debugging Text Search12.9. GiST and GIN Index Types12.10. psql Support12.11. Limitations12.12. Migration from Pre-8.3 Text Search章13. 并发控制13.1. 介绍13.2. 事务隔离13.3. 明确锁定13.4. 应用层数据完整性检查13.5. 锁和索引章14. 性能提升技巧14.1. 使用EXPLAIN14.2. 规划器使用的统计信息14.3. 用明确的JOIN语句控制规划器14.4. 向数据库中添加记录14.5. 非持久性设置III. 服务器管理章15. 安装指导15.1. 简版15.2. 要求15.3. 获取源码15.4. 升级15.5. 安装过程15.6. 安装后的设置15.7. 支持的平台15.8. 特殊平台的要求章16. Installation from Source Code on Windows16.1. Building with Visual C++ or the Platform SDK16.2. Building libpq with Visual C++ or Borland C++章17. 服务器安装和操作17.1. PostgreSQL用户帐户17.2. 创建数据库集群17.3. 启动数据库服务器17.4. 管理内核资源17.5. 关闭服务17.6. 防止服务器欺骗17.7. 加密选项17.8. 用SSL进行安全的TCP/IP连接17.9. Secure TCP/IP Connections with SSH Tunnels章18. 服务器配置18.1. 设置参数18.2. 文件位置18.3. 连接和认证18.4. 资源消耗18.5. 预写式日志18.6. 查询规划18.7. 错误报告和日志18.8. 运行时统计18.9. 自动清理18.10. 客户端连接缺省18.12. 版本和平台兼容性18.11. 锁管理18.13. 预置选项18.14. 自定义的选项18.15. 开发人员选项18.16. 短选项章19. 用户认证19.1. pg_hba.conf 文件19.2. 用户名映射19.3. 认证方法19.4. 用户认证章20. 数据库角色和权限20.1. 数据库角色20.2. 角色属性20.3. 权限20.4. 角色成员20.5. 函数和触发器章21. 管理数据库21.1. 概述21.2. 创建一个数据库21.3. 临时库21.4. 数据库配置21.5. 删除数据库21.6. 表空间章22. 本土化22.1. 区域支持22.2. 字符集支持章23. 日常数据库维护工作23.1. Routine Vacuuming日常清理23.2. 经常重建索引23.3. 日志文件维护章24. 备份和恢复24.1. SQL转储24.2. 文件系统级别的备份24.3. 在线备份以及即时恢复(PITR)24.4. 版本间迁移章25. 高可用性与负载均衡,复制25.1. 不同解决方案的比较25.2. 日志传送备份服务器25.3. 失效切换25.4. 日志传送的替代方法25.5. 热备章26. 恢复配置26.1. 归档恢复设置26.2. 恢复目标设置26.3. 备服务器设置章27. 监控数据库的活动27.1. 标准Unix工具27.2. 统计收集器27.3. 查看锁27.4. 动态跟踪章28. 监控磁盘使用情况28.1. 判断磁盘的使用量28.2. 磁盘满导致的失效章29. 可靠性和预写式日志29.1. 可靠性29.2. 预写式日志(WAL)29.3. 异步提交29.4. WAL配置29.5. WAL内部章30. Regression Tests30.1. Running the Tests30.2. Test Evaluation30.3. Variant Comparison Files30.4. Test Coverage ExaminationIV. 客户端接口章31. libpq-C库31.1. 数据库联接函数31.2. 连接状态函数31.3. 命令执行函数31.4. 异步命令处理31.5. 取消正在处理的查询31.6. 捷径接口31.7. 异步通知31.8. 与COPY命令相关的函数31.9. Control Functions 控制函数31.10. 其他函数31.11. 注意信息处理31.12. 事件系统31.13. 环境变量31.14. 口令文件31.15. 连接服务的文件31.16. LDAP查找连接参数31.17. SSL支持31.18. 在多线程程序里的行为31.19. 制作libpq程序31.20. 例子程序章32. 大对象32.1. 介绍32.2. 实现特点32.3. 客户端接口32.4. 服务器端函数32.5. 例子程序章33. ECPG - Embedded SQL in C33.1. The Concept33.2. Connecting to the Database Server33.3. Closing a Connection33.4. Running SQL Commands33.5. Choosing a Connection33.6. Using Host Variables33.7. Dynamic SQL33.8. pgtypes library33.9. Using Descriptor Areas33.10. Informix compatibility mode33.11. Error Handling33.12. Preprocessor directives33.13. Processing Embedded SQL Programs33.14. Library Functions33.15. Internals章34. 信息模式34.1. 关于这个模式34.2. 数据类型34.3. information_schema_catalog_name34.4. administrable_role_authorizations34.5. applicable_roles34.6. attributes34.7. check_constraint_routine_usage34.8. check_constraints34.9. column_domain_usage34.10. column_privileges34.11. column_udt_usage34.12. 字段34.13. constraint_column_usage34.14. constraint_table_usage34.15. data_type_privileges34.16. domain_constraints34.18. domains34.17. domain_udt_usage34.19. element_types34.20. enabled_roles34.21. foreign_data_wrapper_options34.22. foreign_data_wrappers34.23. foreign_server_options34.24. foreign_servers34.25. key_column_usage34.26. parameters34.27. referential_constraints34.28. role_column_grants34.29. role_routine_grants34.30. role_table_grants34.31. role_usage_grants34.32. routine_privileges34.33. routines34.34. schemata34.35. sequences34.36. sql_features34.37. sql_implementation_info34.38. sql_languages34.39. sql_packages34.40. sql_parts34.41. sql_sizing34.42. sql_sizing_profiles34.43. table_constraints34.44. table_privileges34.45. tables34.46. triggered_update_columns34.47. 触发器34.48. usage_privileges34.49. user_mapping_options34.50. user_mappings34.51. view_column_usage34.52. view_routine_usage34.53. view_table_usage34.54. 视图V. 服务器端编程章35. 扩展SQL35.1. 扩展性是如何实现的35.2. PostgreSQL类型系统35.3. User-Defined Functions35.4. Query Language (SQL) Functions35.5. Function Overloading35.6. Function Volatility Categories35.7. Procedural Language Functions35.8. Internal Functions35.9. C-Language Functions35.10. User-Defined Aggregates35.11. User-Defined Types35.12. User-Defined Operators35.13. Operator Optimization Information35.14. Interfacing Extensions To Indexes35.15. 用C++扩展章36. 触发器36.1. 触发器行为概述36.3. 用 C 写触发器36.2. 数据改变的可视性36.4. 一个完整的例子章37. 规则系统37.1. The Query Tree37.2. 视图和规则系统37.3. 在INSERT,UPDATE和DELETE上的规则37.4. 规则和权限37.5. 规则和命令状态37.6. 规则与触发器得比较章38. Procedural Languages38.1. Installing Procedural Languages章39. PL/pgSQL - SQL过程语言39.1. 概述39.2. PL/pgSQL的结构39.3. 声明39.4. 表达式39.5. 基本语句39.6. 控制结构39.7. 游标39.8. 错误和消息39.9. 触发器过程39.10. PL/pgSQL Under the Hood39.11. 开发PL/pgSQL的一些提示39.12. 从OraclePL/SQL 进行移植章40. PL/Tcl - Tcl Procedural Language40.1. Overview40.2. PL/Tcl Functions and Arguments40.3. Data Values in PL/Tcl40.4. Global Data in PL/Tcl40.5. Database Access from PL/Tcl40.6. Trigger Procedures in PL/Tcl40.7. Modules and the unknown command40.8. Tcl Procedure Names章41. PL/Perl - Perl Procedural Language41.1. PL/Perl Functions and Arguments41.2. Data Values in PL/Perl41.3. Built-in Functions41.4. Global Values in PL/Perl41.6. PL/Perl Triggers41.5. Trusted and Untrusted PL/Perl41.7. PL/Perl Under the Hood章42. PL/Python - Python Procedural Language42.1. Python 2 vs. Python 342.2. PL/Python Functions42.3. Data Values42.4. Sharing Data42.5. Anonymous Code Blocks42.6. Trigger Functions42.7. Database Access42.8. Utility Functions42.9. Environment Variables章43. Server Programming Interface43.1. Interface FunctionsSpi-spi-connectSpi-spi-finishSpi-spi-pushSpi-spi-popSpi-spi-executeSpi-spi-execSpi-spi-execute-with-argsSpi-spi-prepareSpi-spi-prepare-cursorSpi-spi-prepare-paramsSpi-spi-getargcountSpi-spi-getargtypeidSpi-spi-is-cursor-planSpi-spi-execute-planSpi-spi-execute-plan-with-paramlistSpi-spi-execpSpi-spi-cursor-openSpi-spi-cursor-open-with-argsSpi-spi-cursor-open-with-paramlistSpi-spi-cursor-findSpi-spi-cursor-fetchSpi-spi-cursor-moveSpi-spi-scroll-cursor-fetchSpi-spi-scroll-cursor-moveSpi-spi-cursor-closeSpi-spi-saveplan43.2. Interface Support FunctionsSpi-spi-fnameSpi-spi-fnumberSpi-spi-getvalueSpi-spi-getbinvalSpi-spi-gettypeSpi-spi-gettypeidSpi-spi-getrelnameSpi-spi-getnspname43.3. Memory ManagementSpi-spi-pallocSpi-reallocSpi-spi-pfreeSpi-spi-copytupleSpi-spi-returntupleSpi-spi-modifytupleSpi-spi-freetupleSpi-spi-freetupletableSpi-spi-freeplan43.4. Visibility of Data Changes43.5. ExamplesVI. 参考手册I. SQL命令Sql-abortSql-alteraggregateSql-alterconversionSql-alterdatabaseSql-alterdefaultprivilegesSql-alterdomainSql-alterforeigndatawrapperSql-alterfunctionSql-altergroupSql-alterindexSql-alterlanguageSql-alterlargeobjectSql-alteroperatorSql-alteropclassSql-alteropfamilySql-alterroleSql-alterschemaSql-altersequenceSql-alterserverSql-altertableSql-altertablespaceSql-altertsconfigSql-altertsdictionarySql-altertsparserSql-altertstemplateSql-altertriggerSql-altertypeSql-alteruserSql-alterusermappingSql-alterviewSql-analyzeSql-beginSql-checkpointSql-closeSql-clusterSql-commentSql-commitSql-commit-preparedSql-copySql-createaggregateSql-createcastSql-createconstraintSql-createconversionSql-createdatabaseSql-createdomainSql-createforeigndatawrapperSql-createfunctionSql-creategroupSql-createindexSql-createlanguageSql-createoperatorSql-createopclassSql-createopfamilySql-createroleSql-createruleSql-createschemaSql-createsequenceSql-createserverSql-createtableSql-createtableasSql-createtablespaceSql-createtsconfigSql-createtsdictionarySql-createtsparserSql-createtstemplateSql-createtriggerSql-createtypeSql-createuserSql-createusermappingSql-createviewSql-deallocateSql-declareSql-deleteSql-discardSql-doSql-dropaggregateSql-dropcastSql-dropconversionSql-dropdatabaseSql-dropdomainSql-dropforeigndatawrapperSql-dropfunctionSql-dropgroupSql-dropindexSql-droplanguageSql-dropoperatorSql-dropopclassSql-dropopfamilySql-drop-ownedSql-droproleSql-dropruleSql-dropschemaSql-dropsequenceSql-dropserverSql-droptableSql-droptablespaceSql-droptsconfigSql-droptsdictionarySql-droptsparserSql-droptstemplateSql-droptriggerSql-droptypeSql-dropuserSql-dropusermappingSql-dropviewSql-endSql-executeSql-explainSql-fetchSql-grantSql-insertSql-listenSql-loadSql-lockSql-moveSql-notifySql-prepareSql-prepare-transactionSql-reassign-ownedSql-reindexSql-release-savepointSql-resetSql-revokeSql-rollbackSql-rollback-preparedSql-rollback-toSql-savepointSql-selectSql-selectintoSql-setSql-set-constraintsSql-set-roleSql-set-session-authorizationSql-set-transactionSql-showSql-start-transactionSql-truncateSql-unlistenSql-updateSql-vacuumSql-valuesII. 客户端应用程序App-clusterdbApp-createdbApp-createlangApp-createuserApp-dropdbApp-droplangApp-dropuserApp-ecpgApp-pgconfigApp-pgdumpApp-pg-dumpallApp-pgrestoreApp-psqlApp-reindexdbApp-vacuumdbIII. PostgreSQL服务器应用程序App-initdbApp-pgcontroldataApp-pg-ctlApp-pgresetxlogApp-postgresApp-postmasterVII. 内部章44. PostgreSQL内部概览44.1. 查询路径44.2. 连接是如何建立起来的44.3. 分析器阶段44.4. ThePostgreSQL规则系统44.5. 规划器/优化器44.6. 执行器章45. 系统表45.1. 概述45.2. pg_aggregate45.3. pg_am45.4. pg_amop45.5. pg_amproc45.6. pg_attrdef45.7. pg_attribute45.8. pg_authid45.9. pg_auth_members45.10. pg_cast45.11. pg_class45.12. pg_constraint45.13. pg_conversion45.14. pg_database45.15. pg_db_role_setting45.16. pg_default_acl45.17. pg_depend45.18. pg_description45.19. pg_enum45.20. pg_foreign_data_wrapper45.21. pg_foreign_server45.22. pg_index45.23. pg_inherits45.24. pg_language45.25. pg_largeobject45.26. pg_largeobject_metadata45.27. pg_namespace45.28. pg_opclass45.29. pg_operator45.30. pg_opfamily45.31. pg_pltemplate45.32. pg_proc45.33. pg_rewrite45.34. pg_shdepend45.35. pg_shdescription45.36. pg_statistic45.37. pg_tablespace45.38. pg_trigger45.39. pg_ts_config45.40. pg_ts_config_map45.41. pg_ts_dict45.42. pg_ts_parser45.43. pg_ts_template45.44. pg_type45.45. pg_user_mapping45.46. System Views45.47. pg_cursors45.48. pg_group45.49. pg_indexes45.50. pg_locks45.51. pg_prepared_statements45.52. pg_prepared_xacts45.53. pg_roles45.54. pg_rules45.55. pg_settings45.56. pg_shadow45.57. pg_stats45.58. pg_tables45.59. pg_timezone_abbrevs45.60. pg_timezone_names45.61. pg_user45.62. pg_user_mappings45.63. pg_views章46. Frontend/Backend Protocol46.1. Overview46.2. Message Flow46.3. Streaming Replication Protocol46.4. Message Data Types46.5. Message Formats46.6. Error and Notice Message Fields46.7. Summary of Changes since Protocol 2.047. PostgreSQL Coding Conventions47.1. Formatting47.2. Reporting Errors Within the Server47.3. Error Message Style Guide章48. Native Language Support48.1. For the Translator48.2. For the Programmer章49. Writing A Procedural Language Handler章50. Genetic Query Optimizer50.1. Query Handling as a Complex Optimization Problem50.2. Genetic Algorithms50.3. Genetic Query Optimization (GEQO) in PostgreSQL50.4. Further Reading章51. 索引访问方法接口定义51.1. 索引的系统表记录51.2. 索引访问方法函数51.3. 索引扫描51.4. 索引锁的考量51.5. 索引唯一性检查51.6. 索引开销估计函数章52. GiST Indexes52.1. Introduction52.2. Extensibility52.3. Implementation52.4. Examples52.5. Crash Recovery章53. GIN Indexes53.1. Introduction53.2. Extensibility53.3. Implementation53.4. GIN tips and tricks53.5. Limitations53.6. Examples章54. 数据库物理存储54.1. 数据库文件布局54.2. TOAST54.3. 自由空间映射54.4. 可见映射54.5. 数据库分页文件章55. BKI后端接口55.1. BKI 文件格式55.2. BKI命令55.3. 系统初始化的BKI文件的结构55.4. 例子章56. 规划器如何使用统计信息56.1. 行预期的例子VIII. 附录A. PostgreSQL错误代码B. 日期/时间支持B.1. 日期/时间输入解析B.2. 日期/时间关键字B.3. 日期/时间配置文件B.4. 日期单位的历史C. SQL关键字D. SQL ConformanceD.1. Supported FeaturesD.2. Unsupported FeaturesE. Release NotesRelease-0-01Release-0-02Release-0-03Release-1-0Release-1-01Release-1-02Release-1-09Release-6-0Release-6-1Release-6-1-1Release-6-2Release-6-2-1Release-6-3Release-6-3-1Release-6-3-2Release-6-4Release-6-4-1Release-6-4-2Release-6-5Release-6-5-1Release-6-5-2Release-6-5-3Release-7-0Release-7-0-1Release-7-0-2Release-7-0-3Release-7-1Release-7-1-1Release-7-1-2Release-7-1-3Release-7-2Release-7-2-1Release-7-2-2Release-7-2-3Release-7-2-4Release-7-2-5Release-7-2-6Release-7-2-7Release-7-2-8Release-7-3Release-7-3-1Release-7-3-10Release-7-3-11Release-7-3-12Release-7-3-13Release-7-3-14Release-7-3-15Release-7-3-16Release-7-3-17Release-7-3-18Release-7-3-19Release-7-3-2Release-7-3-20Release-7-3-21Release-7-3-3Release-7-3-4Release-7-3-5Release-7-3-6Release-7-3-7Release-7-3-8Release-7-3-9Release-7-4Release-7-4-1Release-7-4-10Release-7-4-11Release-7-4-12Release-7-4-13Release-7-4-14Release-7-4-15Release-7-4-16Release-7-4-17Release-7-4-18Release-7-4-19Release-7-4-2Release-7-4-20Release-7-4-21Release-7-4-22Release-7-4-23Release-7-4-24Release-7-4-25Release-7-4-26Release-7-4-27Release-7-4-28Release-7-4-29Release-7-4-3Release-7-4-30Release-7-4-4Release-7-4-5Release-7-4-6Release-7-4-7Release-7-4-8Release-7-4-9Release-8-0Release-8-0-1Release-8-0-10Release-8-0-11Release-8-0-12Release-8-0-13Release-8-0-14Release-8-0-15Release-8-0-16Release-8-0-17Release-8-0-18Release-8-0-19Release-8-0-2Release-8-0-20Release-8-0-21Release-8-0-22Release-8-0-23Release-8-0-24Release-8-0-25Release-8-0-26Release-8-0-3Release-8-0-4Release-8-0-5Release-8-0-6Release-8-0-7Release-8-0-8Release-8-0-9Release-8-1Release-8-1-1Release-8-1-10Release-8-1-11Release-8-1-12Release-8-1-13Release-8-1-14Release-8-1-15Release-8-1-16Release-8-1-17Release-8-1-18Release-8-1-19Release-8-1-2Release-8-1-20Release-8-1-21Release-8-1-22Release-8-1-23Release-8-1-3Release-8-1-4Release-8-1-5Release-8-1-6Release-8-1-7Release-8-1-8Release-8-1-9Release-8-2Release-8-2-1Release-8-2-10Release-8-2-11Release-8-2-12Release-8-2-13Release-8-2-14Release-8-2-15Release-8-2-16Release-8-2-17Release-8-2-18Release-8-2-19Release-8-2-2Release-8-2-20Release-8-2-21Release-8-2-3Release-8-2-4Release-8-2-5Release-8-2-6Release-8-2-7Release-8-2-8Release-8-2-9Release-8-3Release-8-3-1Release-8-3-10Release-8-3-11Release-8-3-12Release-8-3-13Release-8-3-14Release-8-3-15Release-8-3-2Release-8-3-3Release-8-3-4Release-8-3-5Release-8-3-6Release-8-3-7Release-8-3-8Release-8-3-9Release-8-4Release-8-4-1Release-8-4-2Release-8-4-3Release-8-4-4Release-8-4-5Release-8-4-6Release-8-4-7Release-8-4-8Release-9-0Release-9-0-1Release-9-0-2Release-9-0-3Release-9-0-4F. 额外提供的模块F.1. adminpackF.2. auto_explainF.3. btree_ginF.4. btree_gistF.5. chkpassF.6. citextF.7. cubeF.8. dblinkContrib-dblink-connectContrib-dblink-connect-uContrib-dblink-disconnectContrib-dblinkContrib-dblink-execContrib-dblink-openContrib-dblink-fetchContrib-dblink-closeContrib-dblink-get-connectionsContrib-dblink-error-messageContrib-dblink-send-queryContrib-dblink-is-busyContrib-dblink-get-notifyContrib-dblink-get-resultContrib-dblink-cancel-queryContrib-dblink-get-pkeyContrib-dblink-build-sql-insertContrib-dblink-build-sql-deleteContrib-dblink-build-sql-updateF.9. dict_intF.10. dict_xsynF.11. earthdistanceF.12. fuzzystrmatchF.13. hstoreF.14. intaggF.15. intarrayF.16. isnF.17. loF.18. ltreeF.19. oid2nameF.20. pageinspectF.21. passwordcheckF.22. pg_archivecleanupF.23. pgbenchF.24. pg_buffercacheF.25. pgcryptoF.26. pg_freespacemapF.27. pgrowlocksF.28. pg_standbyF.29. pg_stat_statementsF.30. pgstattupleF.31. pg_trgmF.32. pg_upgradeF.33. segF.34. spiF.35. sslinfoF.36. tablefuncF.37. test_parserF.38. tsearch2F.39. unaccentF.40. uuid-osspF.41. vacuumloF.42. xml2G. 外部项目G.1. 客户端接口G.2. 过程语言G.3. 扩展H. The Source Code RepositoryH.1. Getting The Source Via GitI. 文档I.1. DocBookI.2. 工具集I.3. 制作文档I.4. 文档写作I.5. 风格指导J. 首字母缩略词参考书目BookindexIndex
文字

27.2. 统计收集器

PostgreSQL统计收集器是一个支持收集和汇报服务器活跃性信息的子系统。 目前,这个收集器可以给出对表和索引的访问计数,包括磁盘块的数量和独立行的项。 它还跟踪每个表中的行的总数,每个表的过去的真空和分析时间。它也可以计算用户定义的函数的调用,和在每个人的总花费的时间。

PostgreSQL还可以判断当前其它服务器进程正在执行的命令是什么。 这是一个收集过程中的独立设施。

27.2.1. 统计收集器配置

因为统计收集给查询处理增加了一些开销,所以你可以启用或禁用统计收集。这是由配置参数控制的, 通常在postgresql.conf里设置(参阅Chapter 18获取有关设置配置参数的细节)。

这个参数track_counts控制关于表和索引是否被统计。

参数track_functions实现了对用户子弟年故意函数用法的追踪。

参数track_activities控制是否监视每个服务器进程当前执行的命令字符串。

通常这些参数在postgresql.conf中设置,因此它们作用于所有服务器进程, 但是我们也可以在独立的会话里用SET命令把它们打开或者关闭。 为避免普通用户把它们的活跃性隐藏不给管理员看, 只有超级用户允许用SET命令修改这些参数。

统计收集器与后端通信通过临时文件获得需要的信息(包括autovacuum)。 这些文件存放在pg_stat_tmp子目录中。 当postmaster关闭时,一个统计数据的永久副本存放在global 子目录中。为了提高性能,stats_temp_directory参数 可以指向一个依据RAM的文件系统,降低物理I/O需求。

27.2.2. 查看收集到的统计信息

有一些预定义的视图可以用于显示统计收集的结果,在表Table 27-1里列出。另外,我们可以使用底层的统计函数制作自定义的视图。

在使用统计观察当前活跃性的时候,你必须意识到这些信息并不是实时更新的。 每个独立的服务器进程只是在准备进入空闲状态的时候才向收集器传送新的块和行访问计数; 因此正在处理的查询或者事务并不影响显示出来的总数。同样,收集器本身也最 多每PGSTAT_STAT_INTERVAL毫秒(缺省500,除非在编译服务器的时候修改过)发送一 次新的报告。因此显示总是落后于实际活动。但是由track_activities收集的当前查 询信息总是实时更新的。

另外一个需要着重指出的是,在请求服务器进程显示任何这些统计信息的时候, 它首先抓取收集器进程发出的最新报告,然后就拿这些数据作为所有统计视图 和函数的快照,直到它当前的事务结束。因此统计信息在当前事务的持续期间内不会改 变。类似的,每个进程的当前查询信息在该查询首次出现在事务中的时候就被收集了, 并且在整个事务过程中都显示相同的信息。这是一个特性,而不是一个臭虫,因为这样 就允许你在统计上执行几个查询并且对结果进行相关性检查而又不用担心这些数字会悄悄 的变化。但是如果你想看每个查询的最新结果,那么就要记住在事务块外面处理这些查询。 另外,你可以调用pg_stat_clear_snapshot,这将丢弃 目前交易的统计数据快照(如有)。下次使用 统计信息将导致获取一个新的快照

Table 27-1. 标准统计视图

视图名字 描述
pg_stat_activity 每个服务器进程一行,显示:数据库OID、数据库名、进程ID、用户OID、用户名、客户的地址和端口号,服务器进程, 当前交易、当前查询等待状态、当前查询开始执行的时间、进程启动的时间、进程的等待状态和文字当前查询。。报告当前查询相关信息的各个字段只有在打开track_activities参数 的时候才可用。另外,这些列是唯一可见的,如果检查视图的用户是一个超级用户或、拥有相同进程的用户。
只有一行,通过后台写进程来显示集群范围内的统计数据: 预计检查点的数量,要求的检查点,检查点写入的缓冲区和清理扫描, 以及后台写进程停滞一个清理扫描的时间(因为需要写很多缓冲区)。 同时还包括共享缓冲池的统计数据,包括后台进程写入的缓冲区( 也就是说,不是通过后台写进程)以及分配的总缓冲区。  
pg_stat_database 每个数据库一行, 显示:数据库OID、数据库名、与该数据库连接的活跃服务器进程数、 已提交的事务总数、已回滚的事务总、已读取的磁盘块总数、缓冲区命中总数 (在缓冲区中找到所需要的块,从而避免读取块的动作)。返回插入,抓取,更新,删除的列数。
pg_stat_all_tables 当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、发起的 顺序扫描总数、顺序扫描抓取的活数据行(liverow)的数目、发起的索引扫描的总数 (属于该表的所有索引)、索引扫描抓取的活数据行的数目、插入的行总数、更新的行总数 、删除的行总数、数行更新,它们是热(即,没有单独的索引更新), 活的和死行数,上次手动清理该表的时间、上次由autovacuum自动清理该表的时间、 上次手动分析该表的时间、上次由autovacuum自动分析该表的时间。
pg_stat_sys_tables pg_stat_all_tables一样,但只显示系统表。
pg_stat_user_tables pg_stat_all_tables一样,但只显示用户表。
pg_stat_all_indexes 当前数据库的每个索引一行,显示:表OID、索引OID、模式名、表名、索引名、 使用了该索引的索引扫描总数、索引扫描返回的索引记录数、使用该索引的简 单索引扫描抓取的活表(livetable)中数据行数。
pg_stat_sys_indexes pg_stat_all_indexes一样,但只显示系统表上的索引。
pg_stat_user_indexes pg_stat_all_indexes一样,但只显示用户表上的索引。
pg_statio_all_tables 当前数据库中每个表一行(包括TOAST表),显示:表OID、模式名、表名、 从该表中读取的磁盘块总数、缓冲区命中次数、该表上所有索引的磁盘块读取总数、 该表上所有索引的缓冲区命中总数、在该表的辅助TOAST表(如果存在)上的磁盘块读取总数、 在该表的辅助TOAST表(如果存在)上的缓冲区命中总数、TOAST表的索引的磁盘块读 取总数、TOAST表的索引的缓冲区命中总数。
pg_statio_sys_tables pg_statio_all_tables一样,但只显示系统表。
pg_statio_user_tables pg_statio_all_tables一样,但只显示用户表。
pg_statio_all_indexes 当前数据库中每个索引一行,显示:表OID、索引OID、模式名、 表名、索引名、该索引的磁盘块读取总数、该索引的缓冲区命中总数。
pg_statio_sys_indexes 和pg_statio_all_indexes一样,但只显示系统表。
pg_statio_user_indexes 和pg_statio_all_indexes一样,但只显示用户表。
pg_statio_all_sequences 当前数据库中每个序列对象一行,显示:序列OID、模式名、序列名、序列的磁盘读取总数、序列的缓冲区命中总数。
pg_statio_sys_sequences pg_statio_all_sequences一样,但只系统序列。因为目前没有定义系统序列,所以这个视图总是空的。
pg_statio_user_sequences 和pg_statio_all_sequences一样,但只显示用户序列。
pg_stat_user_functions 对于所有跟踪功能,函数的OID,模式,名称,数量 通话总时间,和自我的时间。自我时间是 在函数本身所花费的时间量,总时间包括 它调用函数所花费的时间。时间值以毫秒为单位。

针对每个索引的统计对于判断哪个索引得到使用以及它们的效果非常有用

PostgreSQL8.1开始,索引既可以直接使用,也可以通过"位图扫描"使用。 在位图扫描中,多个索引的输出可以通过AND或者OR规则合并;所以,在使用索引的时候, 很难把独立的堆(表)行抓取和指定的索引抓取结合起来。因此,位图扫描增大它使用 的pg_stat_all_indexes计数。并且它还增加为表使用的 idx_tup_fetch计数,但是它并不影 响pg_stat_all_indexes. idx_tup_fetch

Note: PostgreSQL8.1之前, idx_tup_read idx_tup_fetch计数实际上 总是一样的。现在即使是不考虑位图扫描,它们也可能是不同的,因为 idx_tup_read记录从索引检索的记录条目,而 idx_tup_fetch记录从表中抓取的活行数; 如果有已经失效的或者还未提交的行通过索引扫描找出来,后者将会小一些。

Thepg_statio_系列视图在判断缓冲区效果的时候特别有用。在实际磁盘读取‘ 远比缓冲命中小的时候,这个缓冲基本满足所有读要求,因此不需要进行内核调 用。但是,这些统计并未给出所有信息。由于PostgreSQL处理磁盘的方式,不 在PostgreSQL缓冲区中的数据可能仍然驻留在内核的I/O缓存中,因此仍然可 能不必经过物理读取。对获取PostgreSQL的I/O行为的更多细节感兴趣的用户 可以结合使用PostgreSQL的统计收集器和可以分析内核I/O处理的操作系统工 具来获取更多细节。

其它查看统计的方法可以通过书写使用底层统计访问函数的查询来设置, 这些底层统计访问函数和标准视图里使用的是一样的。这些函数在Table 27-2 中列出。针对某个数据库进行访问的函数接受一个数据库OID为参数来标 识需要报告哪个数据库。每个表和每个索引的功能 表或索引的OID。函数调用统计函数采取一个函数的OID。请注意这些函数只能看到在当前数据库里的表和索引。针 对某个服务器进行访问的函数接受一个服务器进程号, 其范围从1到当前活跃服务器的数目。

Table 27-2. 统计访问函数

函数 返回类型 描述
pg_stat_get_db_numbackends(o id) integer 处理该数据库活跃的服务器进程数目
pg_stat_get_db_xact_commit(o id) bigint 数据库中已提交事务数量目
pg_stat_get_db_xact_rollback(o id) bigint 数据库中回滚的事务数量
pg_stat_get_db_blocks_fetched(o id) bigint 数据库中磁盘块抓取请求的总数
pg_stat_get_db_blocks_hit(o id) bigint 为数据库在缓冲区中找到的磁盘块抓取请求的总数
pg_stat_get_db_tuples_returned(o id) bigint 为数据库返回的Tuple数
pg_stat_get_db_tuples_fetched(o id) bigint 为数据库中获取的Tuple数
pg_stat_get_db_tuples_inserted(o id) bigint 在数据库中插入Tuple数
pg_stat_get_db_tuples_updated(o id) bigint 在数据库中更新的Tuple数
pg_stat_get_db_tuples_deleted(o id) bigint 数据库中删除Tuple数
pg_stat_get_numscans(o id) bigint 如果参数是一个表,那么就是顺序扫描读取的行数目, 如果参数是一个索引,那么就是返回的索引行的数目。
pg_stat_get_tuples_returned(o id) bigint 如果参数是一个表,那么就是顺序扫描读取的行数目,如果参数是一个索引,那么就是返回的索引行的数目。
pg_stat_get_tuples_fetched(o id) bigint 如果参数是一个表,那么就是位图扫描抓取的行数目,如果参数是一个索引,那么就是用简单索引扫描抓取的行数目。
pg_stat_get_tuples_inserted(o id) bigint 插入表中的行数量
pg_stat_get_tuples_updated(o id) bigint 在表中已更新的行数量,包括热更新
pg_stat_get_tuples_deleted(o id) bigint 从表中删除的行数量
pg_stat_get_tuples_hot_updated(o id) bigint 热更新的行数表
pg_stat_get_live_tuples(o id) bigint 活行数表
pg_stat_get_dead_tuples(o id) bigint 死行数表
pg_stat_get_blocks_fetched(o id) bigint 表或者索引的磁盘块抓取请求的数量
pg_stat_get_blocks_hit(o id) bigint 在缓冲区中找到的表或者索引的磁盘块请求数目
pg_stat_get_last_vacuum_time(o id) timestamptz 用户在该表上最后一次启动清理的时间
pg_stat_get_last_autovacuum_time(o id) timestamptz autovacuum守护进程在该表上最后一次启动清理的时间
pg_stat_get_last_analyze_time(o id) timestamptz 用户在该表上最后一次启动分析的时间
pg_stat_get_last_autoanalyze_time(o id) timestamptz autovacuum守护进程在该表上最后一次启动分析的时间
pg_backend_p id() integer 当前会话的服务器进程的进程ID
pg_stat_get_activity(integer) setofrecord 返回一个关于带有特殊PID号的后台进程的记录信息,或者是每个 活动的后台进程的记录(如果声明了NULL)。 返回结果是pg_stat_activity视图中的一个子集。
pg_stat_get_function_calls(o id) bigint 函数已被调用次数
pg_stat_get_function_time(o id) bigint 总挂钟时间花费在功能,在微秒的。包括 在这个函数调用所花费的时间。
pg_stat_get_function_self_time(o id) bigint 只有在此功能所花费的时间。在所谓的功能所花费的时间 被排除在外。
pg_stat_get_backend_ idset() setofinteger 设置当前活动的服务器进程数(从1到 活动服务器进程的数量)。看在文本中使用的例子。
pg_stat_get_backend_p id(integer) integer 给定的服务器进程的PID
pg_stat_get_backend_db id(integer) o id 给定的服务器进程的数据库ID
pg_stat_get_backend_user id(integer) o id 给定的服务器进程的用户ID
pg_stat_get_backend_activity(integer) text 给定服务器进程的当前活动查询,仅在调用者是超级用户或被查询会话的用户, 并且打开track_activities的时候才能获得结果。
pg_stat_get_backend_waiting(integer) boolean 如果给定服务器进程在等待某个锁,并且调用者是超级用户或被查询会话的用户, 并且打开track_activities的时候才返回真。
pg_stat_get_backend_activity_start(integer) timestampwithtimezone 给定服务器进程当前正在执行的查询的起始时间,仅在调用者是超级用户或被查询会话的用户, 并且打开track_activities的时候才能获得结果。
pg_stat_get_backend_xact_start(integer) timestampwithtimezone 给定的服务进程当前正在执行的事务的开始时间,但只有 当权用户是超级用户或正在被插叙的会话的相同用户(同时 ,开启track_activities)才可以使用。
pg_stat_get_backend_start(integer) timestampwithtimezone timezone给定服务器进程启动的时间,如果当前用户不是超级用户或被查询的后端的用户,则返回NULL。
pg_stat_get_backend_client_addr(integer) inet 连接到给定服务器进程的客户端IP地址。如果是通过Unix域套接字连接的则返回NULL。 如果当前用户不是超级用户或被查询会话的用户,也返回NULL。
pg_stat_get_backend_client_port(integer) integer 连接到给定服务器进程的客户端IP端口。如果是通过Unix域套接字连接的则返回-1。 如果当前用户不是超级用户或被查询会话的用户,也返回NULL。
pg_stat_get_bgwriter_timed_checkpoints() bigint 后台写进程开启定时检查点的时间(因为 checkpoint_timeout时间已经过期了)
pg_stat_get_bgwriter_requested_checkpoints() bigint 后台写进程开启基于后端请求的检查点的时间,因为已经超过了checkpoint_segments 或因为已经执行了CHECKPOINT
pg_stat_get_bgwriter_buf_written_checkpoints() bigint 在检查点期间后台写进程写入的缓冲区数目。
pg_stat_get_bgwriter_buf_written_clean() bigint 为日常清理脏块,后台写进程写入的缓冲区数目。
pg_stat_get_bgwriter_maxwritten_clean() bigint 后台写进程停止清理扫描的时间,因为 已经写入了更多的缓冲区(相比bgwriter_lru_maxpages 参数声明的缓冲区数)。
pg_stat_get_buf_written_backend() bigint 后端进程写入的缓冲区数,因为它们需要分配一个新的缓冲区。
pg_stat_get_buf_alloc() bigint 分配的总缓冲区数。
pg_stat_clear_snapshot() void 忽略当前的统计快照。
pg_stat_reset() void 为当前数据库重置统计计数器为0(需要超级用户权限)。
pg_stat_reset_shared(text) void 为当前数据库集群重置共享统计计数器为0(需要超级用户权限)。 调用pg_stat_reset_shared('bgwriter')将所有 pg_stat_bgwriter显示的值置为0。
pg_stat_reset_single_table_counters(o id) void 为当前数据库中的一个表或索引重置统计为0(需要超级用户权限)。
pg_stat_reset_single_function_counters(o id) void 为当前数据库中的一个函数重置统计为0(需要超级用户权限)。

Note: pg_stat_get_blocks_fetched减去pg_stat_get_blocks_hit就是为该表、索引、数据库而调用 内核read()函数的数目;不过实际的物理读取的数目通常比较低, 因为还有内核级的缓冲。*_blks_read用减法统计列获取减去结果

后端ID的所有功能,访问有关后端的信息索引数,除了pg_stat_get_activity,这是由PID功能。 pg_stat_get_backend_ idset函数提供了为每个活跃服务器进程生成一行的便捷方法。 比如,要显示所有服务器进程的PID和它们的当前查询:

SELECTpg_stat_get_backend_p id(s.backend id)ASprocp id,
pg_stat_get_backend_activity(s.backend id)AScurrent_query
FROM(SELECTpg_stat_get_backend_ idset()ASbackend id)ASs;

上一篇:下一篇: