国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄 搜尋
前言 何為PostgreSQL? PostgreSQL簡史 格式約定 更多信息 臭蟲匯報(bào)指導(dǎo) I. 教程 章1. 從頭開始 1.1. 安裝 1.2. 體系基本概念 1.3. 創(chuàng)建一個(gè)數(shù)據(jù)庫 1.4. 訪問數(shù)據(jù)庫 章2. SQL語言 2.1. 介紹 2.2. 概念 2.3. 創(chuàng)建新表 2.4. 向表中添加行 2.5. 查詢一個(gè)表 2.6. 表間鏈接 2.7. 聚集函數(shù) 2.8. 更新 2.9. 刪除 章3. 高級(jí)特性 3.1. 介紹 3.2. 視圖 3.3. 外鍵 3.4. 事務(wù) 3.5. 窗口函數(shù) 3.6. 繼承 3.7. 結(jié)論 II. SQL語言 章4. SQL語法 4.1. 詞法結(jié)構(gòu) 4.2. 值表達(dá)式 4.3. 調(diào)用函數(shù) 章5. 數(shù)據(jù)定義 5.1. 表的基本概念 5.2. 缺省值 5.3. 約束 5.4. 系統(tǒng)字段 5.5. 修改表 5.6. 權(quán)限 5.7. 模式 5.8. 繼承 5.9. 分區(qū) 5.10. 其它數(shù)據(jù)庫對(duì)象 5.11. 依賴性跟蹤 章 6. 數(shù)據(jù)操作 6.1. 插入數(shù)據(jù) 6.2. 更新數(shù)據(jù) 6.3. 刪除數(shù)據(jù) 章7. 查詢 7.1. 概述 7.2. 表表達(dá)式 7.3. 選擇列表 7.4. 組合查詢 7.5. 行排序 7.6. LIMIT和OFFSET 7.7. VALUES列表 7.8. WITH的查詢(公用表表達(dá)式) 章8. 數(shù)據(jù)類型 8.1. 數(shù)值類型 8.2. 貨幣類型 8.3. 字符類型 8.4. 二進(jìn)制數(shù)據(jù)類型 8.5. 日期/時(shí)間類型 8.6. 布爾類型 8.7. 枚舉類型 8.8. 幾何類型 8.9. 網(wǎng)絡(luò)地址類型 8.10. 位串類型 8.11. 文本搜索類型 8.12. UUID類型 8.13. XML類型 8.14. 數(shù)組 8.15. 復(fù)合類型 8.16. 對(duì)象標(biāo)識(shí)符類型 8.17. 偽類型 章 9. 函數(shù)和操作符 9.1. 邏輯操作符 9.2. 比較操作符 9.3. 數(shù)學(xué)函數(shù)和操作符 9.4. 字符串函數(shù)和操作符 9.5. 二進(jìn)制字符串函數(shù)和操作符 9.6. 位串函數(shù)和操作符 9.7. 模式匹配 9.8. 數(shù)據(jù)類型格式化函數(shù) 9.9. 時(shí)間/日期函數(shù)和操作符 9.10. 支持枚舉函數(shù) 9.11. 幾何函數(shù)和操作符 9.12. 網(wǎng)絡(luò)地址函數(shù)和操作符 9.13. 文本檢索函數(shù)和操作符 9.14. XML函數(shù) 9.15. 序列操作函數(shù) 9.16. 條件表達(dá)式 9.17. 數(shù)組函數(shù)和操作符 9.18. 聚合函數(shù) 9.19. 窗口函數(shù) 9.20. 子查詢表達(dá)式 9.21. 行和數(shù)組比較 9.22. 返回集合的函數(shù) 9.23. 系統(tǒng)信息函數(shù) 9.24. 系統(tǒng)管理函數(shù) 9.25. 觸發(fā)器函數(shù) 章10. 類型轉(zhuǎn)換 10.3. 函數(shù) 10.2. 操作符 10.1. 概述 10.4. 值存儲(chǔ) 10.5. UNION 章11. 索引 11.1. 介紹 11.2. 索引類型 11.3. 多字段索引 11.4. 索引和ORDER BY 11.5. 組合多個(gè)索引 11.6. 唯一索引 11.7. 表達(dá)式上的索引 11.8. 部分索引 11.9. 操作類和操作簇 11.10. 檢查索引的使用 章12. Full Text Search 12.1. Introduction 12.2. Tables and Indexes 12.3. Controlling Text Search 12.4. Additional Features 12.5. Parsers 12.6. Dictionaries 12.7. Configuration Example 12.8. Testing and Debugging Text Search 12.9. GiST and GIN Index Types 12.10. psql Support 12.11. Limitations 12.12. Migration from Pre-8.3 Text Search 章13. 并發(fā)控制 13.1. 介紹 13.2. 事務(wù)隔離 13.3. 明確鎖定 13.4. 應(yīng)用層數(shù)據(jù)完整性檢查 13.5. 鎖和索引 章14. 性能提升技巧 14.1. 使用EXPLAIN 14.2. 規(guī)劃器使用的統(tǒng)計(jì)信息 14.3. 用明確的JOIN語句控制規(guī)劃器 14.4. 向數(shù)據(jù)庫中添加記錄 14.5. 非持久性設(shè)置 III. 服務(wù)器管理 章15. 安裝指導(dǎo) 15.1. 簡版 15.2. 要求 15.3. 獲取源碼 15.4. 升級(jí) 15.5. 安裝過程 15.6. 安裝后的設(shè)置 15.7. 支持的平臺(tái) 15.8. 特殊平臺(tái)的要求 章16. Installation from Source Code on Windows 16.1. Building with Visual C++ or the Platform SDK 16.2. Building libpq with Visual C++ or Borland C++ 章17. 服務(wù)器安裝和操作 17.1. PostgreSQL用戶帳戶 17.2. 創(chuàng)建數(shù)據(jù)庫集群 17.3. 啟動(dòng)數(shù)據(jù)庫服務(wù)器 17.4. 管理內(nèi)核資源 17.5. 關(guān)閉服務(wù) 17.6. 防止服務(wù)器欺騙 17.7. 加密選項(xiàng) 17.8. 用SSL進(jìn)行安全的TCP/IP連接 17.9. Secure TCP/IP Connections with SSH Tunnels 章18. 服務(wù)器配置 18.1. 設(shè)置參數(shù) 18.2. 文件位置 18.3. 連接和認(rèn)證 18.4. 資源消耗 18.5. 預(yù)寫式日志 18.6. 查詢規(guī)劃 18.7. 錯(cuò)誤報(bào)告和日志 18.8. 運(yùn)行時(shí)統(tǒng)計(jì) 18.9. 自動(dòng)清理 18.10. 客戶端連接缺省 18.12. 版本和平臺(tái)兼容性 18.11. 鎖管理 18.13. 預(yù)置選項(xiàng) 18.14. 自定義的選項(xiàng) 18.15. 開發(fā)人員選項(xiàng) 18.16. 短選項(xiàng) 章19. 用戶認(rèn)證 19.1. pg_hba.conf 文件 19.2. 用戶名映射 19.3. 認(rèn)證方法 19.4. 用戶認(rèn)證 章20. 數(shù)據(jù)庫角色和權(quán)限 20.1. 數(shù)據(jù)庫角色 20.2. 角色屬性 20.3. 權(quán)限 20.4. 角色成員 20.5. 函數(shù)和觸發(fā)器 章21. 管理數(shù)據(jù)庫 21.1. 概述 21.2. 創(chuàng)建一個(gè)數(shù)據(jù)庫 21.3. 臨時(shí)庫 21.4. 數(shù)據(jù)庫配置 21.5. 刪除數(shù)據(jù)庫 21.6. 表空間 章22. 本土化 22.1. 區(qū)域支持 22.2. 字符集支持 章23. 日常數(shù)據(jù)庫維護(hù)工作 23.1. Routine Vacuuming日常清理 23.2. 經(jīng)常重建索引 23.3. 日志文件維護(hù) 章24. 備份和恢復(fù) 24.1. SQL轉(zhuǎn)儲(chǔ) 24.2. 文件系統(tǒng)級(jí)別的備份 24.3. 在線備份以及即時(shí)恢復(fù)(PITR) 24.4. 版本間遷移 章25. 高可用性與負(fù)載均衡,復(fù)制 25.1. 不同解決方案的比較 25.2. 日志傳送備份服務(wù)器 25.3. 失效切換 25.4. 日志傳送的替代方法 25.5. 熱備 章26. 恢復(fù)配置 26.1. 歸檔恢復(fù)設(shè)置 26.2. 恢復(fù)目標(biāo)設(shè)置 26.3. 備服務(wù)器設(shè)置 章27. 監(jiān)控?cái)?shù)據(jù)庫的活動(dòng) 27.1. 標(biāo)準(zhǔn)Unix工具 27.2. 統(tǒng)計(jì)收集器 27.3. 查看鎖 27.4. 動(dòng)態(tài)跟蹤 章28. 監(jiān)控磁盤使用情況 28.1. 判斷磁盤的使用量 28.2. 磁盤滿導(dǎo)致的失效 章29. 可靠性和預(yù)寫式日志 29.1. 可靠性 29.2. 預(yù)寫式日志(WAL) 29.3. 異步提交 29.4. WAL配置 29.5. WAL內(nèi)部 章30. Regression Tests 30.1. Running the Tests 30.2. Test Evaluation 30.3. Variant Comparison Files 30.4. Test Coverage Examination IV. 客戶端接口 章31. libpq-C庫 31.1. 數(shù)據(jù)庫聯(lián)接函數(shù) 31.2. 連接狀態(tài)函數(shù) 31.3. 命令執(zhí)行函數(shù) 31.4. 異步命令處理 31.5. 取消正在處理的查詢 31.6. 捷徑接口 31.7. 異步通知 31.8. 與COPY命令相關(guān)的函數(shù) 31.9. Control Functions 控制函數(shù) 31.10. 其他函數(shù) 31.11. 注意信息處理 31.12. 事件系統(tǒng) 31.13. 環(huán)境變量 31.14. 口令文件 31.15. 連接服務(wù)的文件 31.16. LDAP查找連接參數(shù) 31.17. SSL支持 31.18. 在多線程程序里的行為 31.19. 制作libpq程序 31.20. 例子程序 章32. 大對(duì)象 32.1. 介紹 32.2. 實(shí)現(xiàn)特點(diǎn) 32.3. 客戶端接口 32.4. 服務(wù)器端函數(shù) 32.5. 例子程序 章33. ECPG - Embedded SQL in C 33.1. The Concept 33.2. Connecting to the Database Server 33.3. Closing a Connection 33.4. Running SQL Commands 33.5. Choosing a Connection 33.6. Using Host Variables 33.7. Dynamic SQL 33.8. pgtypes library 33.9. Using Descriptor Areas 33.10. Informix compatibility mode 33.11. Error Handling 33.12. Preprocessor directives 33.13. Processing Embedded SQL Programs 33.14. Library Functions 33.15. Internals 章34. 信息模式 34.1. 關(guān)于這個(gè)模式 34.2. 數(shù)據(jù)類型 34.3. information_schema_catalog_name 34.4. administrable_role_authorizations 34.5. applicable_roles 34.6. attributes 34.7. check_constraint_routine_usage 34.8. check_constraints 34.9. column_domain_usage 34.10. column_privileges 34.11. column_udt_usage 34.12. 字段 34.13. constraint_column_usage 34.14. constraint_table_usage 34.15. data_type_privileges 34.16. domain_constraints 34.18. domains 34.17. domain_udt_usage 34.19. element_types 34.20. enabled_roles 34.21. foreign_data_wrapper_options 34.22. foreign_data_wrappers 34.23. foreign_server_options 34.24. foreign_servers 34.25. key_column_usage 34.26. parameters 34.27. referential_constraints 34.28. role_column_grants 34.29. role_routine_grants 34.30. role_table_grants 34.31. role_usage_grants 34.32. routine_privileges 34.33. routines 34.34. schemata 34.35. sequences 34.36. sql_features 34.37. sql_implementation_info 34.38. sql_languages 34.39. sql_packages 34.40. sql_parts 34.41. sql_sizing 34.42. sql_sizing_profiles 34.43. table_constraints 34.44. table_privileges 34.45. tables 34.46. triggered_update_columns 34.47. 觸發(fā)器 34.48. usage_privileges 34.49. user_mapping_options 34.50. user_mappings 34.51. view_column_usage 34.52. view_routine_usage 34.53. view_table_usage 34.54. 視圖 V. 服務(wù)器端編程 章35. 擴(kuò)展SQL 35.1. 擴(kuò)展性是如何實(shí)現(xiàn)的 35.2. PostgreSQL類型系統(tǒng) 35.3. User-Defined Functions 35.4. Query Language (SQL) Functions 35.5. Function Overloading 35.6. Function Volatility Categories 35.7. Procedural Language Functions 35.8. Internal Functions 35.9. C-Language Functions 35.10. User-Defined Aggregates 35.11. User-Defined Types 35.12. User-Defined Operators 35.13. Operator Optimization Information 35.14. Interfacing Extensions To Indexes 35.15. 用C++擴(kuò)展 章36. 觸發(fā)器 36.1. 觸發(fā)器行為概述 36.3. 用 C 寫觸發(fā)器 36.2. 數(shù)據(jù)改變的可視性 36.4. 一個(gè)完整的例子 章37. 規(guī)則系統(tǒng) 37.1. The Query Tree 37.2. 視圖和規(guī)則系統(tǒng) 37.3. 在INSERT,UPDATE和DELETE上的規(guī)則 37.4. 規(guī)則和權(quán)限 37.5. 規(guī)則和命令狀態(tài) 37.6. 規(guī)則與觸發(fā)器得比較 章38. Procedural Languages 38.1. Installing Procedural Languages 章39. PL/pgSQL - SQL過程語言 39.1. 概述 39.2. PL/pgSQL的結(jié)構(gòu) 39.3. 聲明 39.4. 表達(dá)式 39.5. 基本語句 39.6. 控制結(jié)構(gòu) 39.7. 游標(biāo) 39.8. 錯(cuò)誤和消息 39.9. 觸發(fā)器過程 39.10. PL/pgSQL Under the Hood 39.11. 開發(fā)PL/pgSQL的一些提示 39.12. 從OraclePL/SQL 進(jìn)行移植 章40. PL/Tcl - Tcl Procedural Language 40.1. Overview 40.2. PL/Tcl Functions and Arguments 40.3. Data Values in PL/Tcl 40.4. Global Data in PL/Tcl 40.5. Database Access from PL/Tcl 40.6. Trigger Procedures in PL/Tcl 40.7. Modules and the unknown command 40.8. Tcl Procedure Names 章41. PL/Perl - Perl Procedural Language 41.1. PL/Perl Functions and Arguments 41.2. Data Values in PL/Perl 41.3. Built-in Functions 41.4. Global Values in PL/Perl 41.6. PL/Perl Triggers 41.5. Trusted and Untrusted PL/Perl 41.7. PL/Perl Under the Hood 章42. PL/Python - Python Procedural Language 42.1. Python 2 vs. Python 3 42.2. PL/Python Functions 42.3. Data Values 42.4. Sharing Data 42.5. Anonymous Code Blocks 42.6. Trigger Functions 42.7. Database Access 42.8. Utility Functions 42.9. Environment Variables 章43. Server Programming Interface 43.1. Interface Functions Spi-spi-connect Spi-spi-finish Spi-spi-push Spi-spi-pop Spi-spi-execute Spi-spi-exec Spi-spi-execute-with-args Spi-spi-prepare Spi-spi-prepare-cursor Spi-spi-prepare-params Spi-spi-getargcount Spi-spi-getargtypeid Spi-spi-is-cursor-plan Spi-spi-execute-plan Spi-spi-execute-plan-with-paramlist Spi-spi-execp Spi-spi-cursor-open Spi-spi-cursor-open-with-args Spi-spi-cursor-open-with-paramlist Spi-spi-cursor-find Spi-spi-cursor-fetch Spi-spi-cursor-move Spi-spi-scroll-cursor-fetch Spi-spi-scroll-cursor-move Spi-spi-cursor-close Spi-spi-saveplan 43.2. Interface Support Functions Spi-spi-fname Spi-spi-fnumber Spi-spi-getvalue Spi-spi-getbinval Spi-spi-gettype Spi-spi-gettypeid Spi-spi-getrelname Spi-spi-getnspname 43.3. Memory Management Spi-spi-palloc Spi-realloc Spi-spi-pfree Spi-spi-copytuple Spi-spi-returntuple Spi-spi-modifytuple Spi-spi-freetuple Spi-spi-freetupletable Spi-spi-freeplan 43.4. Visibility of Data Changes 43.5. Examples VI. 參考手冊(cè) I. SQL命令 Sql-abort Sql-alteraggregate Sql-alterconversion Sql-alterdatabase Sql-alterdefaultprivileges Sql-alterdomain Sql-alterforeigndatawrapper Sql-alterfunction Sql-altergroup Sql-alterindex Sql-alterlanguage Sql-alterlargeobject Sql-alteroperator Sql-alteropclass Sql-alteropfamily Sql-alterrole Sql-alterschema Sql-altersequence Sql-alterserver Sql-altertable Sql-altertablespace Sql-altertsconfig Sql-altertsdictionary Sql-altertsparser Sql-altertstemplate Sql-altertrigger Sql-altertype Sql-alteruser Sql-alterusermapping Sql-alterview Sql-analyze Sql-begin Sql-checkpoint Sql-close Sql-cluster Sql-comment Sql-commit Sql-commit-prepared Sql-copy Sql-createaggregate Sql-createcast Sql-createconstraint Sql-createconversion Sql-createdatabase Sql-createdomain Sql-createforeigndatawrapper Sql-createfunction Sql-creategroup Sql-createindex Sql-createlanguage Sql-createoperator Sql-createopclass Sql-createopfamily Sql-createrole Sql-createrule Sql-createschema Sql-createsequence Sql-createserver Sql-createtable Sql-createtableas Sql-createtablespace Sql-createtsconfig Sql-createtsdictionary Sql-createtsparser Sql-createtstemplate Sql-createtrigger Sql-createtype Sql-createuser Sql-createusermapping Sql-createview Sql-deallocate Sql-declare Sql-delete Sql-discard Sql-do Sql-dropaggregate Sql-dropcast Sql-dropconversion Sql-dropdatabase Sql-dropdomain Sql-dropforeigndatawrapper Sql-dropfunction Sql-dropgroup Sql-dropindex Sql-droplanguage Sql-dropoperator Sql-dropopclass Sql-dropopfamily Sql-drop-owned Sql-droprole Sql-droprule Sql-dropschema Sql-dropsequence Sql-dropserver Sql-droptable Sql-droptablespace Sql-droptsconfig Sql-droptsdictionary Sql-droptsparser Sql-droptstemplate Sql-droptrigger Sql-droptype Sql-dropuser Sql-dropusermapping Sql-dropview Sql-end Sql-execute Sql-explain Sql-fetch Sql-grant Sql-insert Sql-listen Sql-load Sql-lock Sql-move Sql-notify Sql-prepare Sql-prepare-transaction Sql-reassign-owned Sql-reindex Sql-release-savepoint Sql-reset Sql-revoke Sql-rollback Sql-rollback-prepared Sql-rollback-to Sql-savepoint Sql-select Sql-selectinto Sql-set Sql-set-constraints Sql-set-role Sql-set-session-authorization Sql-set-transaction Sql-show Sql-start-transaction Sql-truncate Sql-unlisten Sql-update Sql-vacuum Sql-values II. 客戶端應(yīng)用程序 App-clusterdb App-createdb App-createlang App-createuser App-dropdb App-droplang App-dropuser App-ecpg App-pgconfig App-pgdump App-pg-dumpall App-pgrestore App-psql App-reindexdb App-vacuumdb III. PostgreSQL服務(wù)器應(yīng)用程序 App-initdb App-pgcontroldata App-pg-ctl App-pgresetxlog App-postgres App-postmaster VII. 內(nèi)部 章44. PostgreSQL內(nèi)部概覽 44.1. 查詢路徑 44.2. 連接是如何建立起來的 44.3. 分析器階段 44.4. ThePostgreSQL規(guī)則系統(tǒng) 44.5. 規(guī)劃器/優(yōu)化器 44.6. 執(zhí)行器 章45. 系統(tǒng)表 45.1. 概述 45.2. pg_aggregate 45.3. pg_am 45.4. pg_amop 45.5. pg_amproc 45.6. pg_attrdef 45.7. pg_attribute 45.8. pg_authid 45.9. pg_auth_members 45.10. pg_cast 45.11. pg_class 45.12. pg_constraint 45.13. pg_conversion 45.14. pg_database 45.15. pg_db_role_setting 45.16. pg_default_acl 45.17. pg_depend 45.18. pg_description 45.19. pg_enum 45.20. pg_foreign_data_wrapper 45.21. pg_foreign_server 45.22. pg_index 45.23. pg_inherits 45.24. pg_language 45.25. pg_largeobject 45.26. pg_largeobject_metadata 45.27. pg_namespace 45.28. pg_opclass 45.29. pg_operator 45.30. pg_opfamily 45.31. pg_pltemplate 45.32. pg_proc 45.33. pg_rewrite 45.34. pg_shdepend 45.35. pg_shdescription 45.36. pg_statistic 45.37. pg_tablespace 45.38. pg_trigger 45.39. pg_ts_config 45.40. pg_ts_config_map 45.41. pg_ts_dict 45.42. pg_ts_parser 45.43. pg_ts_template 45.44. pg_type 45.45. pg_user_mapping 45.46. System Views 45.47. pg_cursors 45.48. pg_group 45.49. pg_indexes 45.50. pg_locks 45.51. pg_prepared_statements 45.52. pg_prepared_xacts 45.53. pg_roles 45.54. pg_rules 45.55. pg_settings 45.56. pg_shadow 45.57. pg_stats 45.58. pg_tables 45.59. pg_timezone_abbrevs 45.60. pg_timezone_names 45.61. pg_user 45.62. pg_user_mappings 45.63. pg_views 章46. Frontend/Backend Protocol 46.1. Overview 46.2. Message Flow 46.3. Streaming Replication Protocol 46.4. Message Data Types 46.5. Message Formats 46.6. Error and Notice Message Fields 46.7. Summary of Changes since Protocol 2.0 47. PostgreSQL Coding Conventions 47.1. Formatting 47.2. Reporting Errors Within the Server 47.3. Error Message Style Guide 章48. Native Language Support 48.1. For the Translator 48.2. For the Programmer 章49. Writing A Procedural Language Handler 章50. Genetic Query Optimizer 50.1. Query Handling as a Complex Optimization Problem 50.2. Genetic Algorithms 50.3. Genetic Query Optimization (GEQO) in PostgreSQL 50.4. Further Reading 章51. 索引訪問方法接口定義 51.1. 索引的系統(tǒng)表記錄 51.2. 索引訪問方法函數(shù) 51.3. 索引掃描 51.4. 索引鎖的考量 51.5. 索引唯一性檢查 51.6. 索引開銷估計(jì)函數(shù) 章52. GiST Indexes 52.1. Introduction 52.2. Extensibility 52.3. Implementation 52.4. Examples 52.5. Crash Recovery 章53. GIN Indexes 53.1. Introduction 53.2. Extensibility 53.3. Implementation 53.4. GIN tips and tricks 53.5. Limitations 53.6. Examples 章54. 數(shù)據(jù)庫物理存儲(chǔ) 54.1. 數(shù)據(jù)庫文件布局 54.2. TOAST 54.3. 自由空間映射 54.4. 可見映射 54.5. 數(shù)據(jù)庫分頁文件 章55. BKI后端接口 55.1. BKI 文件格式 55.2. BKI命令 55.3. 系統(tǒng)初始化的BKI文件的結(jié)構(gòu) 55.4. 例子 章56. 規(guī)劃器如何使用統(tǒng)計(jì)信息 56.1. 行預(yù)期的例子 VIII. 附錄 A. PostgreSQL錯(cuò)誤代碼 B. 日期/時(shí)間支持 B.1. 日期/時(shí)間輸入解析 B.2. 日期/時(shí)間關(guān)鍵字 B.3. 日期/時(shí)間配置文件 B.4. 日期單位的歷史 C. SQL關(guān)鍵字 D. SQL Conformance D.1. Supported Features D.2. Unsupported Features E. Release Notes Release-0-01 Release-0-02 Release-0-03 Release-1-0 Release-1-01 Release-1-02 Release-1-09 Release-6-0 Release-6-1 Release-6-1-1 Release-6-2 Release-6-2-1 Release-6-3 Release-6-3-1 Release-6-3-2 Release-6-4 Release-6-4-1 Release-6-4-2 Release-6-5 Release-6-5-1 Release-6-5-2 Release-6-5-3 Release-7-0 Release-7-0-1 Release-7-0-2 Release-7-0-3 Release-7-1 Release-7-1-1 Release-7-1-2 Release-7-1-3 Release-7-2 Release-7-2-1 Release-7-2-2 Release-7-2-3 Release-7-2-4 Release-7-2-5 Release-7-2-6 Release-7-2-7 Release-7-2-8 Release-7-3 Release-7-3-1 Release-7-3-10 Release-7-3-11 Release-7-3-12 Release-7-3-13 Release-7-3-14 Release-7-3-15 Release-7-3-16 Release-7-3-17 Release-7-3-18 Release-7-3-19 Release-7-3-2 Release-7-3-20 Release-7-3-21 Release-7-3-3 Release-7-3-4 Release-7-3-5 Release-7-3-6 Release-7-3-7 Release-7-3-8 Release-7-3-9 Release-7-4 Release-7-4-1 Release-7-4-10 Release-7-4-11 Release-7-4-12 Release-7-4-13 Release-7-4-14 Release-7-4-15 Release-7-4-16 Release-7-4-17 Release-7-4-18 Release-7-4-19 Release-7-4-2 Release-7-4-20 Release-7-4-21 Release-7-4-22 Release-7-4-23 Release-7-4-24 Release-7-4-25 Release-7-4-26 Release-7-4-27 Release-7-4-28 Release-7-4-29 Release-7-4-3 Release-7-4-30 Release-7-4-4 Release-7-4-5 Release-7-4-6 Release-7-4-7 Release-7-4-8 Release-7-4-9 Release-8-0 Release-8-0-1 Release-8-0-10 Release-8-0-11 Release-8-0-12 Release-8-0-13 Release-8-0-14 Release-8-0-15 Release-8-0-16 Release-8-0-17 Release-8-0-18 Release-8-0-19 Release-8-0-2 Release-8-0-20 Release-8-0-21 Release-8-0-22 Release-8-0-23 Release-8-0-24 Release-8-0-25 Release-8-0-26 Release-8-0-3 Release-8-0-4 Release-8-0-5 Release-8-0-6 Release-8-0-7 Release-8-0-8 Release-8-0-9 Release-8-1 Release-8-1-1 Release-8-1-10 Release-8-1-11 Release-8-1-12 Release-8-1-13 Release-8-1-14 Release-8-1-15 Release-8-1-16 Release-8-1-17 Release-8-1-18 Release-8-1-19 Release-8-1-2 Release-8-1-20 Release-8-1-21 Release-8-1-22 Release-8-1-23 Release-8-1-3 Release-8-1-4 Release-8-1-5 Release-8-1-6 Release-8-1-7 Release-8-1-8 Release-8-1-9 Release-8-2 Release-8-2-1 Release-8-2-10 Release-8-2-11 Release-8-2-12 Release-8-2-13 Release-8-2-14 Release-8-2-15 Release-8-2-16 Release-8-2-17 Release-8-2-18 Release-8-2-19 Release-8-2-2 Release-8-2-20 Release-8-2-21 Release-8-2-3 Release-8-2-4 Release-8-2-5 Release-8-2-6 Release-8-2-7 Release-8-2-8 Release-8-2-9 Release-8-3 Release-8-3-1 Release-8-3-10 Release-8-3-11 Release-8-3-12 Release-8-3-13 Release-8-3-14 Release-8-3-15 Release-8-3-2 Release-8-3-3 Release-8-3-4 Release-8-3-5 Release-8-3-6 Release-8-3-7 Release-8-3-8 Release-8-3-9 Release-8-4 Release-8-4-1 Release-8-4-2 Release-8-4-3 Release-8-4-4 Release-8-4-5 Release-8-4-6 Release-8-4-7 Release-8-4-8 Release-9-0 Release-9-0-1 Release-9-0-2 Release-9-0-3 Release-9-0-4 F. 額外提供的模塊 F.1. adminpack F.2. auto_explain F.3. btree_gin F.4. btree_gist F.5. chkpass F.6. citext F.7. cube F.8. dblink Contrib-dblink-connect Contrib-dblink-connect-u Contrib-dblink-disconnect Contrib-dblink Contrib-dblink-exec Contrib-dblink-open Contrib-dblink-fetch Contrib-dblink-close Contrib-dblink-get-connections Contrib-dblink-error-message Contrib-dblink-send-query Contrib-dblink-is-busy Contrib-dblink-get-notify Contrib-dblink-get-result Contrib-dblink-cancel-query Contrib-dblink-get-pkey Contrib-dblink-build-sql-insert Contrib-dblink-build-sql-delete Contrib-dblink-build-sql-update F.9. dict_int F.10. dict_xsyn F.11. earthdistance F.12. fuzzystrmatch F.13. hstore F.14. intagg F.15. intarray F.16. isn F.17. lo F.18. ltree F.19. oid2name F.20. pageinspect F.21. passwordcheck F.22. pg_archivecleanup F.23. pgbench F.24. pg_buffercache F.25. pgcrypto F.26. pg_freespacemap F.27. pgrowlocks F.28. pg_standby F.29. pg_stat_statements F.30. pgstattuple F.31. pg_trgm F.32. pg_upgrade F.33. seg F.34. spi F.35. sslinfo F.36. tablefunc F.37. test_parser F.38. tsearch2 F.39. unaccent F.40. uuid-ossp F.41. vacuumlo F.42. xml2 G. 外部項(xiàng)目 G.1. 客戶端接口 G.2. 過程語言 G.3. 擴(kuò)展 H. The Source Code Repository H.1. Getting The Source Via Git I. 文檔 I.1. DocBook I.2. 工具集 I.3. 制作文檔 I.4. 文檔寫作 I.5. 風(fēng)格指導(dǎo) J. 首字母縮略詞 參考書目 Bookindex Index
文字

17.4. 管理內(nèi)核資源

一次大型PostgreSQL安裝會(huì)很容易耗盡各種操作系統(tǒng)的資源上限。 甚至在有些系統(tǒng)上,出廠設(shè)置低得你都不用一次"大型"安裝。 如果你碰到這類問題,請(qǐng)繼續(xù)閱讀。

17.4.1. 共享內(nèi)存和信號(hào)燈

共享內(nèi)存和信號(hào)燈的正確叫法是"SystemV IPC"(還有消息隊(duì)列,不過與PostgreSQL無關(guān))。 盡管所有現(xiàn)代操作系統(tǒng)都提供這些特性,但并不是所有系統(tǒng)缺省都打開它或者有足夠的資源, 尤其是可用的RAM和數(shù)據(jù)庫應(yīng)用的需求增長。 (對(duì)于Windows移植,PostgreSQL自己提供這套機(jī)制的替換實(shí)現(xiàn), 所以大多數(shù)本條可以忽略不計(jì)。)

完全缺少這些機(jī)制的表現(xiàn)通常是在服務(wù)器啟動(dòng)時(shí)的Illegalsystemcall 錯(cuò)誤。這時(shí)除了重新配置內(nèi)核以外沒什么可做的。PostgreSQL沒它們不工作。 然而,在現(xiàn)代的操作系統(tǒng),這種情況是罕見的。

如果PostgreSQL超出了這些IPC資源的硬限制之 一的時(shí)候就會(huì)拒絕啟動(dòng),并且留下一條相當(dāng)有提示的錯(cuò)誤信息, 告訴你它碰到了什么問題以及需要為它做些什么(又見Section 17.3.1)。相關(guān)的內(nèi)核參數(shù)在不同系統(tǒng)之間有著相對(duì)固定的術(shù)語 ;Table 17-1是一個(gè)概況。不過,設(shè)置它們的方法卻多種多樣。 不過要注意的是,你可能最好重新啟動(dòng)機(jī)器,或者還要重新編譯內(nèi)核來修改這些設(shè)置。

Table 17-1. SystemVIPC參數(shù)

名稱 描述 合理取值
SHMMAX 最大共享內(nèi)存段尺寸(字節(jié)) 最少若干兆(見本文)
SHMMIN 最小共享內(nèi)存段尺寸(字節(jié)) 1
SHMALL 可用共享內(nèi)存的總數(shù)量(字節(jié)或內(nèi)存頁數(shù)) 如果是字節(jié),就和SHMMAX一樣;如果是頁數(shù),則為ceil(SHMMAX/PAGE_SIZE)
SHMSEG 每進(jìn)程最大共享內(nèi)存段數(shù)量 只需要1個(gè)段,不過缺省比這高得多。
SHMMNI 系統(tǒng)范圍最大共享內(nèi)存段數(shù)量 類似SHMSEG加上用于其它應(yīng)用的空間
SEMMNI 信號(hào)燈標(biāo)識(shí)符的最小數(shù)量(也就是套) 至少ceil((max_connections+autovacuum_max_workers)/16)
SEMMNS 系統(tǒng)范圍的最大信號(hào)燈數(shù)量 ceil((max_connections+autovacuum_max_workers)/16)*17加上用于其它應(yīng)用的空間
SEMMSL 每套信號(hào)燈最小信號(hào)燈數(shù)量 至少17
SEMMAP 信號(hào)燈映射里的記錄數(shù)量 參閱本文
SEMVMX 信號(hào)燈的最大值 至少1000,缺省通常是32767,除非被迫,否則不要修改

最重要的共享內(nèi)存參數(shù)是SHMMAX(以字節(jié)記的共享內(nèi)存段可擁有的最大尺寸)。 如果你收到來自shmget的類似"Inval idargument"這樣的錯(cuò)誤信息, 那么很有可能是你超過限制了。要求的共享內(nèi)存段數(shù)量與若干個(gè) PostgreSQL配置參數(shù)相關(guān),如Table 17-2所示。 (任何錯(cuò)誤消息,你可能會(huì)包括分配請(qǐng)求失敗的確切大小。) 因此,作為一種臨時(shí)的解決方法,你可以降低這些設(shè)置來繞過失敗。 雖然它有可能獲得PostgreSQL運(yùn)行2MB的SHMMAX的, 你需要相當(dāng)可接受的性能??扇≡O(shè)置在數(shù)百兆到幾千兆字節(jié)。

有些系統(tǒng)對(duì)系統(tǒng)里面共享內(nèi)存的總數(shù)(SHMALL)還有限制。 請(qǐng)注意這個(gè)數(shù)值必須足夠大,大到PostgreSQL 加上其它使用共享內(nèi)存段的應(yīng)用的總和。注意:SHMALL 在很多系統(tǒng)上是用頁面數(shù),而不是字節(jié)數(shù)來計(jì)算的。

不太可能出問題的是共享內(nèi)存段的最小尺寸(SHMMIN), 對(duì)PostgreSQL來說大約是500kB左右(通常只是1), 而系統(tǒng)范圍(SHMMNI)或每進(jìn)程(SHMSEG) 最大共享內(nèi)存段數(shù)量不應(yīng)該會(huì)產(chǎn)生問題,除非你的系統(tǒng)把它們?cè)O(shè)成零。

PostgreSQL每個(gè)允許的連接使用一個(gè)信號(hào)燈(max_connections), 以16個(gè)為一套。每套信號(hào)燈還包含第17個(gè)信號(hào)燈, 它里面存儲(chǔ)一個(gè)"magicnumber",以檢測(cè)和其它應(yīng)用使用的信號(hào)燈集沖突。 系統(tǒng)里的最大信號(hào)燈數(shù)目是由SEMMNS設(shè)置的, 因此這個(gè)值應(yīng)該至少和max_connectionsautovacuum_max_workers設(shè)置一樣大, 并且每16個(gè)連接還要另外加一個(gè)(參閱Table 17-1里面的公式)。參數(shù)SEMMNI 決定系統(tǒng)里一次可以存在的信號(hào)燈集的數(shù)目。因此這個(gè)參數(shù)至少應(yīng)該 為ceil((max_connections+autovacuum_max_workers)/16)。 降低允許的連接數(shù)目是一個(gè)臨時(shí)的繞開失敗的方法,這個(gè)啟動(dòng)失敗通常被 來自函數(shù)semget的錯(cuò)誤響應(yīng)"Nospaceleftondevice"搞得很讓人迷惑。

有時(shí)候還可能有必要增大SEMMAP,使之至少按照SEMMNS配置。 這個(gè)參數(shù)定義信號(hào)燈資源映射的尺寸,可用的每個(gè)連續(xù)的信號(hào)燈塊在這個(gè)映射中存放一條記錄。 每當(dāng)一套信號(hào)燈被釋放,那么它要么會(huì)加入到該映射中一條相連的已釋放塊的入口中, 要么注冊(cè)成一條新的入口。如果映射填滿了碎片,那么被釋放的信號(hào)燈就丟失了(除非重啟)。 因此信號(hào)燈空間的碎片時(shí)間長了會(huì)導(dǎo)致可用的信號(hào)燈比應(yīng)該有的信號(hào)燈少。

SEMMSL參數(shù)決定一套信號(hào)燈里可以有多少信號(hào)燈, 對(duì)于PostgreSQL而言應(yīng)該至少是17。

許多設(shè)置與"semaphoreundo"(信號(hào)燈恢復(fù))有關(guān), 比如SEMMNUSEMUME,這些不影響PostgreSQL。

AIX

Atleastasofversion5.1,itshouldnotbenecessarytodo anyspecialconfigurationforsuchparametersas SHMMAX,asitappearsthisisconfiguredto allowallmemorytobeusedassharedmemory.Thatisthe sortofconfigurationcommonlyusedforotherdatabasessuch asDB/2.

Itmight,however,benecessarytomodifytheglobal ulimitinformationin /etc/security/limits,asthedefaulthard limitsforfilesizes(fsize)andnumbersof files(nofiles)mightbetoolow.

BSD/OS

共享內(nèi)存. 缺省時(shí)只支持4MB的共享內(nèi)存。請(qǐng)記住共享內(nèi)存是不能分頁的; 它是鎖在RAM里面的。要增加系統(tǒng)支持的共享緩沖區(qū)數(shù)目, 向內(nèi)核配置文件里增加下面的行:

options"SHMALL=8192"
options"SHMMAX=\(SHMALL*PAGE_SIZE\)"

SHMALL以4KB頁為單位計(jì)算,所以1024頁面代表4M共享內(nèi)存。 所以上面的東西把共享內(nèi)存區(qū)域增加到32MB。對(duì)于運(yùn)行4.3或者更新版本的, 你可能需要增大KERNEL_VIRTUAL_MB,超過缺省的248。 做完上面的修改之后,編譯內(nèi)核并重啟。

信號(hào)燈. 你可能還需要增加信號(hào)燈的數(shù)量;系統(tǒng)缺省的總數(shù)60只能允許大概 50個(gè)PostgreSQL連接。 在內(nèi)核配置文件里設(shè)置你需要的值,比如:

options"SEMMNI=40"
options"SEMMNS=240"

FreeBSD

缺省設(shè)置只適合于很小的安裝(比如,缺省SHMMAX是32MB)。 我們可以用sysctlloader接口來修改。 下面的參數(shù)可以用sysctl設(shè)置:

$sysctl-wkern.ipc.shmall=32768
$sysctl-wkern.ipc.shmmax=134217728
$sysctl-wkern.ipc.semmap=256

要想讓這些設(shè)置重啟后有效,修改/etc/sysctl.conf文件。

如果用sysctl,那么剩下的信號(hào)燈設(shè)置是只讀的, 但是信號(hào)燈可以在啟動(dòng)的時(shí)候,在loader提示符下設(shè)置:

(loader)setkern.ipc.semmni=256
(loader)setkern.ipc.semmns=512
(loader)setkern.ipc.semmnu=256

類似的,這些東西可以在/boot/loader.conf 中保存,以便重啟之后依然有效。

你可能還想配置內(nèi)核,把共享內(nèi)存裝載到RAM里,避免他們被交換到交換分區(qū)中。 這些可以通過使用sysctl設(shè)置 kern.ipc.shm_use_phys來實(shí)現(xiàn)。

如果通過啟用sysctlsecurity.jail.sysvipc_allowed 運(yùn)行在FreeBSDjail中,那么必須將postmaster 以不同操作系統(tǒng)的用戶身份運(yùn)行在不同的jail中。這樣有助于增強(qiáng)安全性, 因?yàn)樗乐沽朔莚oot用戶干擾不同jail中的共享內(nèi)存或信號(hào)燈, 并且允許PostgreSQLIPC清理代碼功能。在FreeBSD6.0及之后的版本中, IPC清理代碼并不能正確偵測(cè)在其它jail中的進(jìn)程,因此無法防止其它 jail中的postmaster進(jìn)程占用相同的端口。

FreeBSD4.0之前的版本類似NetBSDOpenBSD(見下文)。

NetBSD
OpenBSD

編譯內(nèi)核時(shí)需要把選項(xiàng)SYSVSHMSYSVSEM打開(缺省是打開的)。 共享內(nèi)存的最大尺寸是由選項(xiàng)SHMMAXPGS(以頁計(jì))決定的。 下面顯示了一個(gè)如何在NetBSD上設(shè)置這些參數(shù)的例子 (OpenBSD使用的是option):

optionsSYSVSHM
optionsSHMMAXPGS=4096
optionsSHMSEG=256

optionsSYSVSEM
optionsSEMMNI=256
optionsSEMMNS=512
optionsSEMMNU=256
optionsSEMMAP=256

你可能希望將共享內(nèi)存鎖在RAM中以避免它們被交換出去, 我們可以用sysctl設(shè)置 kern.ipc.shm_use_phys來實(shí)現(xiàn)這個(gè)目的。

HP-UX

缺省設(shè)置看來對(duì)普通安裝是足夠的了。對(duì)于HP-UX10, SEMMNS的出廠缺省是128,可能對(duì)大的數(shù)據(jù)庫站點(diǎn)來說太小了。

IPC可以在System AdministrationManager(SAM)下面的Kernel Configuration->ConfigurableParameters配置。 配置完了以后選擇CreateANewKernel選項(xiàng)。

Linux

缺省最大段是32MB,對(duì)于僅夠很小PostgreSQL安裝。 1頁總是4096字節(jié)除了在非通常內(nèi)核配置使用了"hugepages"( 使用getconfPAGE_SIZE檢驗(yàn))。缺省限制8GB,這個(gè)經(jīng)常是足夠的,不是總是這樣。 )

通過sysctl接口修改設(shè)置的共享內(nèi)存大小。比如,允許到16GB:

$sysctl-wkernel.shmmax=17179869184
$sysctl-wkernel.shmall=4194304

你可以把這些設(shè)置放到/etc/sysctl.conf里,在重啟后保持有效

老版本里可能沒有sysctl程序, 但是同樣的改變可以通過操作/proc文件系統(tǒng)來做:

$echo17179869184>/proc/sys/kernel/shmmax
$echo4194304>/proc/sys/kernel/shmall

其余的默認(rèn)值是相當(dāng)夠用的大小,通常不需要更改。

MacOSX

在OSX10.3及以后的版本里,可以創(chuàng)建一個(gè)名為/etc/sysctl.conf的文件, 包含如下變量及相應(yīng)的值:

kern.sysv.shmmax=4194304
kern.sysv.shmmin=1
kern.sysv.shmmni=32
kern.sysv.shmseg=8
kern.sysv.shmall=1024

注意,在版本的OSX里所有五個(gè)共享內(nèi)存參數(shù)必須都在 /etc/sysctl.conf中設(shè)置,否則將會(huì)被忽略。

還要注意最近版本的OSX將拒絕把SHMMAX 的數(shù)值設(shè)置為非4096的倍數(shù)。

在這個(gè)平臺(tái)上,SHMALL是用4KB頁來度量的。

在較舊的OSX版本,你修改的共享內(nèi)存參數(shù),將需要重啟生效。像10.5在運(yùn)行中除了SHMMNI外都能修改, 使用sysctl。但仍然最好通過/etc/sysctl.conf設(shè)置你首選值,所以在重啟后將保留這些值。

/etc/sysctl.conf這個(gè)文件只在OSX10.3.9及之后的版本遵循使用。如果你運(yùn)行在10.3.x之前版本時(shí),你必須編輯 /etc/rc文件并且通過下面的命令修改這些值:

sysctl-wkern.sysv.shmmax
sysctl-wkern.sysv.shmmin
sysctl-wkern.sysv.shmmni
sysctl-wkern.sysv.shmseg
sysctl-wkern.sysv.shmall

請(qǐng)注意OSX系統(tǒng)更新會(huì)寫覆蓋/etc/rc文件,所以,你應(yīng)想到每個(gè)更新后重做這些編輯。

在OSX10.2和較早版本,在/System/Library/StartupItems/SystemTuning/SystemTuning文件里編輯這些命令替換。

SCOOpenServer

缺省配置時(shí),只允許每段512KB共享內(nèi)存。要增大設(shè)置, 首先進(jìn)入/etc/conf/cf.d目錄。 要顯示當(dāng)前以字節(jié)記的SHMMAX,運(yùn)行

./configure-ySHMMAX

設(shè)置SHMMAX的新值:

./configureSHMMAX=value

這里value是你想設(shè)置的以字節(jié)記的新值。 設(shè)置完SHMMAX以后重新編譯內(nèi)核

./link_unix

andreboot.

Solaris

至少到版本2.6為止,共享內(nèi)存段的缺省最大設(shè)置對(duì)PostgreSQL 來說是太低了。相關(guān)的設(shè)置可以在/etc/system里面修改,例如:

setshmsys:shminfo_shmmax=0x2000000
setshmsys:shminfo_shmmin=1
setshmsys:shminfo_shmmni=256
setshmsys:shminfo_shmseg=256

setsemsys:seminfo_semmap=256
setsemsys:seminfo_semmni=512
setsemsys:seminfo_semmns=512
setsemsys:seminfo_semmsl=32

你要重啟系統(tǒng)令修改生效。

又見http://sunsite.uakom.sk/sunworldonline/swol-09-1997/swol-09-ins idesolaris.html 獲取關(guān)于Solaris里面的共享內(nèi)存的信息。

UnixWare

UnixWare7上,缺省配置里的最大共享內(nèi)存段是512kB。 要顯示SHMMAX的當(dāng)前值,運(yùn)行:

/etc/conf/bin/  idtune-gSHMMAX

就會(huì)顯示當(dāng)前缺省的最小和最大值。 要給SHMMAX設(shè)置一個(gè)新值,運(yùn)行:

/etc/conf/bin/  idtuneSHMMAXvalue

value是你想設(shè)置的新值(單位:字節(jié))。 設(shè)置完SHMMAX后,重建內(nèi)核

/etc/conf/bin/  idbuild-B

然后重啟。

Table 17-2. PostgreSQL共享內(nèi)存的使用

使用 近似共享內(nèi)存所需要的字節(jié)數(shù)(8.3)
連接數(shù) (1800+270*max_locks_per_transaction)*max_connections
自動(dòng)清理工作者數(shù) (1800+270*max_locks_per_transaction)*autovacuum_max_workers
準(zhǔn)備事務(wù) (770+270*max_locks_per_transaction)*max_prepared_transactions
共享磁盤緩沖區(qū)大小 (block_size+208)*shared_buffers
WAL緩沖區(qū)大小 (wal_block_size+8)*wal_buffers
必需的固定空間大小 770kB

17.4.2. 資源限制

Unix類系統(tǒng)強(qiáng)制了許多資源限制,這些限制可能干擾PostgreSQL 服務(wù)器的運(yùn)行。這里尤其重要是對(duì)每個(gè)用戶的進(jìn)程數(shù)目的限制、每個(gè)進(jìn)程打開文件數(shù)目、 以及每個(gè)進(jìn)程可用的內(nèi)存。這些限制中每個(gè)都有一個(gè)"硬"限制和 一個(gè)"軟"限制。實(shí)際使用的是軟限制,但用戶可以自己修改成 最大為硬限制的數(shù)目。而硬限制是只能由root用戶修改的限制。 系統(tǒng)調(diào)用setrlimit負(fù)責(zé)設(shè)置這些參數(shù)。 shell的內(nèi)建命令ulimit(Bourneshells)或 limit(csh)就是用于在命令行上控制資源限制的。 在BSD衍生的系統(tǒng)上,/etc/login.conf 文件控制在登錄時(shí)對(duì)各種資源設(shè)置什么樣的限制數(shù)值。 參閱操作系統(tǒng)文檔獲取細(xì)節(jié)。相關(guān)的參數(shù)是maxproc, openfilesdatasize。比如:

default:\
...
:datasize-cur=256M:\
:maxproc-cur=256:\
:openfiles-cur=256:\
...

-cur是軟限制,后面附加-max就可以設(shè)置硬限制。)

內(nèi)核通常也有一些系統(tǒng)范圍的資源限制。

  • Linux上,/proc/sys/fs/file-max 決定內(nèi)核可以支持的最大文件數(shù)。你可以通過往該文件寫入一個(gè)不同的數(shù)值修改此值, 或者在/etc/sysctl.conf里增加一個(gè)賦值。 每個(gè)進(jìn)程的最大打開文件限制是在編譯內(nèi)核的時(shí)候固定的; 參閱/usr/src/linux/Documentation/proc.txt獲取更多信息。

PostgreSQL服務(wù)器每個(gè)連接都使用一個(gè)進(jìn)程, 所以你應(yīng)該至少允許和連接數(shù)相同的進(jìn)程數(shù),再加上系統(tǒng)其它部分所需要的數(shù)目。 通常這個(gè)并不是什么問題,但如果你在一臺(tái)機(jī)器上運(yùn)行多個(gè)服務(wù)器,資源使用可能就會(huì)緊張。

打開文件數(shù)目的出廠缺省設(shè)置通常設(shè)置為"社會(huì)友好"數(shù)值, 就是說允許許多用戶共存一臺(tái)機(jī)器,而不會(huì)導(dǎo)致系統(tǒng)資源使用的不當(dāng)比例。 如果你在一臺(tái)機(jī)器上運(yùn)行許多服務(wù)器,這也許就是你想要的,但是在特殊的服務(wù)器上, 你可能需要提高這個(gè)限制。

問題的另外一邊,一些系統(tǒng)允許獨(dú)立的進(jìn)程打開非常多的文件; 如果不止幾個(gè)進(jìn)程這么干,那系統(tǒng)范圍的上限就很容易達(dá)到。如果你發(fā)現(xiàn)這樣的現(xiàn)像, 并且不想修改系統(tǒng)范圍的限制,你就可以設(shè)置PostgreSQL的 max_files_per_process配置參數(shù)來限制打開文件數(shù)的消耗。

17.4.3. Linux內(nèi)存過量

在Linux2.4以及之后的版本里,缺省的虛擬內(nèi)存的行為不是對(duì) PostgreSQL最優(yōu)的。原因在于內(nèi)核實(shí)現(xiàn)內(nèi)存 過量的方法,如果其它進(jìn)程的內(nèi)存請(qǐng)求導(dǎo)致系統(tǒng)用光虛擬內(nèi)存,那么內(nèi)核可能會(huì)終止 PostgreSQL服務(wù)器進(jìn)程。

如果發(fā)生了這樣的事情,你會(huì)看到像下面這樣的內(nèi)核信息 (參考你的系統(tǒng)文檔和配置,看看在哪里能看到這樣的信息):

OutofMemory:Killedprocess12345(postgres).

這表明postgres因?yàn)閮?nèi)存壓力而終止了。 盡管現(xiàn)有的數(shù)據(jù)連接將繼續(xù)正常運(yùn)轉(zhuǎn),但是新的連接將無法接受。 要想恢復(fù),你應(yīng)該重啟PostgreSQL。

一個(gè)避免這個(gè)問題的方法是在一臺(tái)你確信不會(huì)因?yàn)槠渌M(jìn)程而耗 盡內(nèi)存的機(jī)器上運(yùn)行PostgreSQL。 如果內(nèi)存資源緊張,增加交換空間的操作系統(tǒng)可以幫助避免這個(gè)問題,因?yàn)?內(nèi)存不足(OOM)的殺手是只有當(dāng)物理內(nèi)存和調(diào)用交換空間用盡。

在Linux2.6及以后的版本里,一個(gè)更好的解決方法是修改內(nèi)存的行為, 這樣它就不會(huì)再"過量"內(nèi)存。 雖然此設(shè)置不會(huì)阻止OOMkiller被調(diào)用 干脆,它會(huì)降低的機(jī)會(huì)顯著,因此將導(dǎo)致更強(qiáng)大的系統(tǒng)行為。 這是通過用sysctl選取一個(gè)嚴(yán)格的過提交模式實(shí)現(xiàn)的:

sysctl-wvm.overcommit_memory=2

或者在/etc/sysctl.conf里放一個(gè)等效的條目。 你可能還希望修改相關(guān)的vm.overcommit_ratio設(shè)置。 詳細(xì)信息請(qǐng)參閱內(nèi)核文檔的Documentation/vm/overcommit-accounting文件。

另一種方法,可以使用或不改變vm.overcommit_memory, 要將postmaster進(jìn)程的特定進(jìn)程的oom_adj值設(shè)置為-17,從而保證不會(huì)成為OOM殺手的目標(biāo)。 最簡單的方法這樣來執(zhí)行

echo-17>/proc/self/oom_adj

在postmaster的啟動(dòng)腳本之前調(diào)用postmaster。 請(qǐng)注意必須以root身份,完成此操作,或它將沒有任何影響;所以一個(gè)擁有root權(quán)限的啟動(dòng)腳本最容易做這事。 如果這樣做,你可能還要將-DLINUX_OOM_ADJ=0添加到CFLAGS編譯PostgreSQL。 這樣將導(dǎo)致postmaster子進(jìn)程以通常oom_adj值為0的運(yùn)行,所以O(shè)OM殺手在需要的時(shí)候以它們作為目標(biāo)。

Note: 有些供應(yīng)商的Linux2.4內(nèi)核有著早期2.6使用過量的sysctl。 不過,在沒有相關(guān)代碼的內(nèi)核里設(shè)置vm.overcommit_memory為2.4只會(huì)讓事情更糟, 而不是更好。我們建議你檢查一下實(shí)際的內(nèi)核源代碼(參閱文件mm/mmap.c 里面的vm_enough_memory函數(shù)),核實(shí)一下這個(gè)是在你的版本里存在的, 然后再在2.4內(nèi)核里使用這個(gè)特性。文檔文件overcommit-accounting 的存在不能當(dāng)作是這個(gè)特性存在的證明。如果有問題,請(qǐng)?jiān)儐柲愕膬?nèi)核供應(yīng)商的專家。

上一篇: 下一篇: