顯示具有 系統管理與安全性 標籤的文章。 顯示所有文章
顯示具有 系統管理與安全性 標籤的文章。 顯示所有文章

2008-09-26

PostgreSQL 伺服器效能調校精靈(工具)

EnterpriseDB

是眾多全球專注在提供 PostgreSQL 資料庫商業化產品,
及其 PostgreSQL 資料技術服務公司之一的全球性企業.

調校 PostgreSQL 伺服器的效能, 不是一般人可以短時間學習的 ...

EnterpriseDB 伺服器效能調校精靈
EnterpriseDB (PostgreSQL商業化產品) ,
該工具由 EnterpriseDB 公司提供給 PostgreSQL 使用者,
利用該公司 EnterpriseDB 公司的 Dynatune 技術,
依據您的硬體資源與您選用資料庫系統的用途,
來協助配置您的 PostgreSQL 伺服器的主要設定檔

  • postgresql.conf
當中融入了 EnterpriseDB 對 PostgreSQL 的資深技術與經驗.

註: PgAdmin III 的專案主持人與 PostgreSQL 眾多的開發者,
目前仍為 EnterpriseDB 的員工.




在本月 PostgreSQL 進行安全性更新的同時 ...
若您是使用 Windows 版本 8.3 的使用者,
且也一並安裝了
Application Stack Builder 2.0 (應用程序堆疊建構器)

並勾選了如下的畫面進行網路下載與安裝:
(Enterprise Tuning Wizard for PostgreSQL)


那你即可於開始-程式集的選單裡找到 PostgreSQL 資料夾來啟動它!
首先, 您必須選擇要進行調校的 PostgreSQL 伺服器標的位置:



再來請選擇您這部 PostgreSQL 伺服器的用途, 共有三個選項:
  • Development : 這伺服器是給開發者進行開發與測試用的,
    PostgreSQL 會使用最小量的記憶體運作.
  • Mixed : 這伺服器包含著正式上線運作的應用程序( Web/應用伺服器).
  • Dedicated : 這伺服器完全只運作為資料庫伺服器角色,
    PostgreSQL 會使用全部有效的記憶體最佳化.



這個畫面是個大重點:
你可以按 "Review" 來了解這精靈對 postgresql.conf 做了那些調校,
被更動的地方, EnterpriseDB 貼心的用高亮點的文字色彩來標示給您,
意思就是您可以對更動的選項做一個了解後,
"抄"到 PostgreSQL 伺服器的首選平台: GNU/Linux 上~呵
在按下一步後, 這結果會自動取代當前的 postgresql.conf 內容,
並對原本的 postgresql.conf 備份成帶日期的檔案名稱.
想取消可以按上一步, 或直接關閉就不會生效囉.


(Review 的預看畫面)


最後別忘了,
任何修改 postgresql.conf 內容的動作都必須重新啟動伺服器 !

相關的站內文章:
Ruby 這把火也開始延燒到 PostgreSQL 開發團隊

2008-01-04

如何將 PostgreSQL 開放透過網路連線操作 ?

如何將 PostgreSQL 開放透過網路連線使用 ?
這是個好問題也是個很多初次進入 PostgreSQL 的朋友最大的困擾,
時常都有學生或者是網友提到這事件給小郭,
新年新希望整理這篇教學給大家參考 ...

首先必須告知您, 在初次安裝 PostgreSQL 後,
不論您使用的是那個平台的版本, 在預設的情況下,
PostgreSQL 是不允許透過 TCP/IP 網路進行連線的!
理由就是要降低不必要的資料庫系統網路安全性暴露的可能風險!

基於上述的理由, 在您進行以下的啟用時, 您應該更加注意您的系統安全知識 ...
首先依您的作業系統(OS)的平台, 找到如下的檔案位置:
Debian Linux: /etc/postgresql/8.2/main/postgresql.conf
Windows: C:\Program Files\postgresql\data\postgresql.conf
編輯變更如下圖的內容, 來允許接受網路連線
Listen addresses = '*'


再來 PostgreSQL 使用主機權限驗證基礎的文件檔要進行追加如下的內容
Debian Linux: /etc/postgresql/8.2/main/pg_hba.conf
Windows: C:\Program Files\postgresql\data\pg_hba.conf

以安全性的角度來說, 上述這行放寛成允許來自任何 IP 連線到任何的資料庫,
這並不是件好事, 不過您若僅是用在學習 PostgreSQL 到是件方便的理由...
最後的 md5 是密碼必須經過 md5 方式驗證通過後才能放行的意思

完成上面二個步驟後, 必須先重新啟動一次 PostgreSQL 伺服器

您以為您完成了嗎 ? 不

這張圖告訴您, 連線倒是成功了, 不過呢問題出在密碼驗證上 ...

在 Debian Linux 下使用套件進行安裝的 PostgreSQL,
postgres 這位 PostgreSQL 的超級使用者的密碼在資料庫裡是空的 @@"


在資料庫裡的系統資料表中有張表存放著真正的密碼 pg_shadow ,
你必須進行如圖的操作, 追加密碼


再來就靠各位的修練囉~ 歡迎您的加入 ^.^


延伸閱讀(Link):

2007-06-07

PostgreSQL 系統安全認證(一)

更新:2007-06-07
對映章節:

內容:
PostgreSQL 是一個非常重視安全性與反饋修補快速的資料庫系統...
也是目前唯一取得 ISO/IEC15408 安全認證的開放源碼專案產品
PostgreSQL 日本NTT協助取得 ISO/IEC15408 安全認證

PostgreSQL 最主要的設計理由:
開發真正能運作在大型企業與政府組織的資料倉儲系統,
因為涉及的使用人數鉅多與強調安全性,
必須擁有嚴密的控管機制存在,
且必須保持快速反應安全性問題修正的能力.

系統安全依賴SA/DBA(系統工程師/資料庫管理師)的經驗累積與能力培養,
安全性調校-涉及的知識與相關操作, 是必須擁有對其基本管理者再進階時,
加以探討的強化部份, 而非本末倒置空談安全性議題,
卻對SA/DBA工作內容半知不解之人.

除了原使用的系統OS的安全防護, 依靠您對使用的作業系統的管理程度能力外,
PostgreSQL 使用了下述幾個層級來進行有關安全性的層級防制力.

層級

  1. SSL連線加密模式(postgreslq.conf)
    • 透過啟用PostgreSQL組態檔的 SSL 加密模式, 來防止封包監聽程序.
  2. 連接用戶認證模式與種類(pg_hba.conf)
    • 可各別對特定的 user, DB, IP, IP-Sub, 使用不同的用戶認證模式.
    • 認證模式的種類包括(詳情->密碼學):
      trust, password, crypt, MD5, Krb4, Krb5, Reject, inetd.
  3. 資料庫物件權限(GRANT, REVOKE)
    1. 對特定的資料庫, 資料表, 進行SQL使用授權管理.
在下個講次, 說明如何進行....

延伸閱讀(Link):

2007-05-08

Windows版本下的参数max_stack_depth(简体)

更新:2007-05-08
對映章節:

內容:
前几天一位朋友跟我讨论max_stack_depth在windows下的调整,调查到一点东西,整理一下共享给大家。

因为着重讲max_stack_depth在windows的问题,所以没有翻译参数说明:
max_stack_depth (integer)
Specifies the maximum safe depth of the server's execution stack. The ideal setting for this parameter is the actual stack size limit enforced by the kernel (as set by ulimit -s or local equivalent), less a safety margin of a megabyte or so. The safety margin is needed because the stack depth is not checked in every routine in the server, but only in key potentially-recursive routines such as expression evaluation. The default setting is two megabytes (2MB), which is conservatively small and unlikely to risk crashes. However, it may be too small to allow execution of complex functions. Only superusers can change this setting.
Setting max_stack_depth higher than the actual kernel limit will mean that a runaway recursive function can crash an individual backend process. On platforms where PostgreSQL can determine the kernel limit, it will not let you set this variable to an unsafe value. However, not all platforms provide the information, so caution is recommended in selecting a value.

它是在8.0中引入的,摘自8.0的release note:
Server configuration parameter max_expr_depth parameter has been replaced with max_stack_depth which measures the physical stack size rather than the expression nesting depth. This helps prevent session termination due to stack overflow caused by recursive functions.

8.2中的调整:
On platforms that have getrlimit(RLIMIT_STACK), use it to ensure that max_stack_depth is not set to an unsafe value. This commit also provides configure-time checking for , and cleans up some perhaps-unportable code associated with use of that include file and getrlimit().

现在遇到的问题是,在8.1 For Windows能够正常运行的程序,在8.2下由于max_stack_depth的限制变得无法正常值运行。
由于这个校验的存在,Windows平台
max_stack_depth的最大值为3584KB,如果超过PostgreSQL 8.2将无法启动,但是这个3584KB却无法满足程序的需求。而早先在8.1下设置为10M是没问题的,程序运行过程中也不会引起错误。我猜想原因是由于架构的不同,在这个方面设置是不一样的,windows允许超过而*nix不允许,这样移植到windows下以后,依然参照*nix的方式进行校验,导致这个问题的出现。windows不同于*nix,内核参数几乎是不能自行改变的,比如这个RLIMIT_STACK在*nix可以通过微调将它设置为更大,而windows下根本就是个常量,没有任何办法改变。好在看起来windows平台并没有像*nix平台一样将max_stack_depth限制在RLIMIT_STACK大小之内。
问题就在这里,似乎只是个移植问题。

解决办法就是修改源代码
postgres.c的函数assign_max_stack_depth中

long stack_rlimit = get_stack_depth_rlimit();
改为:
#if defined(WIN32) || defined(__CYGWIN__)
long stack_rlimit = 10*1024*1024; //10M
#else
long stack_rlimit = get_stack_depth_rlimit();
#endif

然后重新编译即可

编译请参考:
Compiling PostgreSQL On Native Win32 FAQ
Installing PostgreSQL on Windows Using Cygwin FAQ

本方法没有经过测试,仅供参考,对此本人不承担任何责任。

2007-05-03

我論 Oracle 對安裝於 Linux 上的要求調校事項(三)

更新:2007-05-03
對映章節:

內容:
再來的以下4個 tuning, 涉及到 net 的 troubleshooting,
Debian 的預設全是同樣值"109568",
根據 Oracle 的值來論, 全屬放大倍數值:

network socket 的接收和傳送緩衝區(buffer)大小

net.core.rmem_default = 1048576 (10 X)
net.core.rmem_max = 1048576 (10 X)
net.core.wmem_default = 262144 (2 X)
net.core.wmem_max = 262144 (2 X)

這4個值能調整伺服器能達到高效能(high performance)的水準,
所以同樣也適用在其它提供高負載單一服務功能的 Linux 版本或主機上.

Oracle 另外對系統安全的資源限制做了放寬調整: limits.conf

oracle          soft    nproc   2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
nproc - 最大進程數量
nofile - 最大開啟檔案數

Debian 的預設值:
nofile 1024, nofile 的最大限制受 fs.file-max 核心變數影響,
預設值為 48938, 其餘並未做限制.

從這點就能看出 Oracle 運行時開啟的檔案數是很嚇人的,
尤其啟動其相關的 java 應用更是, 對身為系統管理員來說,
也增加了管理及安全甚至除錯的因難負荷量, 不見得是件好事
.

延伸閱讀(Link):
Oracle 10g 10.2 官方安裝說明文件(sysctl部份)

2007-05-02

我論 Oracle 對安裝於 Linux 上的要求調校事項(二)

更新:2007-05-02
對映章節:

內容:
Linux 採用 System V 的架構
shm 是 System V 下的 Shared memory 的簡稱
/etc/sysctl.conf 用來開機載入更動核心預設值用

/proc/sys/kernel/ 包含以下的核心映射,
我們來對照一下 Debian testing 版本的預設:

#Total amount of shared memory available (bytes or pages)
"kernel.shmall = 2097152" (= Debian Default)

#Maximum size of shared memory segment (bytes)
"kernel.shmmax = 2147483648"
(> Debina "33554432" , 加大到近 22倍大)(巨大怪獸的證據!!!)

#Minimum size of shared memory segment (bytes)
"kernel.shmmni = 4096" (= Debian Default)

#Maximum number of shared memory segments per process
"kernel.sem = 250 32000 100 128"
(> Debian "250 32000 32 128")

/proc/sys/fs/
最大開啟檔案數量的需求設置(巨大怪獸的證據!!!)
"fs.file-max = 65536" (> Debian "48938")
這個選項與 ulimit 功能有連帶關係...

/proc/sys/net/ipv4/
#加寛非常大量的 local port 長度(巨大怪獸的證據!!!)
"net.ipv4.ip_local_port_range = 1024 65000"
(> Debian 預設寬度 "32768 61000")

#最後就是啟用上述來對 Linux 生效...
/etc/init.d/networks restart
/sbin/sysctl -p


延伸閱讀(Link):
http://www.postgresql.org/docs/8.2/interactive/kernel-resources.html

我論 Oracle 對安裝於 Linux 上的要求調校事項(一)

更新:2007-05-02
對映章節:

內容:
Oracle 對於安裝於 Linux 上使用 Oracle 10g 資料庫系統, 有著官方文件的安裝教學與系統調校的建議事項, 阿益我來改寫成對 PostgreSQL 的類推建議與補足說明:

首先, 前陣子因為客戶需要測試 Oracle 10g 產品, 阿益我看了 Oracle 的文件後, 深感...嗯果真是高貴$和高高要求系統資源的資料庫系統, Oracle 建議採用 RHEL 4 AS 或是 SUSE Enterprise Linux 9+, 商業配商業...夠義氣...

那我只好選用 RHEL 4 AS 的 Free 複製羊版本囉(99.9% 相似度的 CentOS 4.4版)...

經過了一番時間, 照著 Oracle 的要求, 安裝完後, 只有一個感想, 好肥最好單獨 4GB 以上的空間, 來放置整個 Oracle 基礎(不包括每建一個DB時增加的容量哦...), RAM 最好也要1GB以上, 一啟動 Oracle 就連帶快用光 RAM, 再者 Oracle 10g 大量運用 Java 和 Java Server 環境應用...(果然比大象更大象@@")

說完了故事, 開始來看看 Oracle 建議調校 Linux 的系統資源部份(我們學習的重點)
首先老話一句...
安裝資料庫伺服器的主機(Linux)建議停用其它非必要的服務, 最佳的方式就是僅提供單一服務的主機環境來保持最佳效能, 這點在往後建立資料庫叢集化(Cluster)是很必要的哦.

比起 Oracle 10g 的安裝大小, PostgreSQL 就顯的像 RUBY 一樣輕巧了 N 倍...

Oracle 要求修改 Linux 預設的 RHEL 核心參數在開機時生效, 我們要對 /etc/sysctl.conf 進行寫入如下,這也是本篇阿益的重點, 來分析看看為啥 Oracle 要求更動這些核心預設:

echo "kernel.shmall = 2097152" >> /etc/sysctl.conf
echo "kernel.shmmax = 2147483648" >> /etc/sysctl.conf
echo "kernel.shmmni = 4096" >> /etc/sysctl.conf
echo "kernel.sem = 250 32000 100 128" >> /etc/sysctl.conf
echo "fs.file-max = 65536" >> /etc/sysctl.conf
echo "net.ipv4.ip_local_port_range = 1024 65000" >> /etc/sysctl.conf

net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
/sbin/sysctl -p

Oracle 的理由是預設的核心資源設定無法滿足 Oracle 10g 的正常運行...


延伸閱讀(Link):
http://www.postgresql.org/docs/8.2/interactive/kernel-resources.html

2007-04-12

PostgreSQL 日本NTT協助取得 ISO/IEC15408 安全認證

更新:2007-04-12
對映章節:
オープンソースDB初のISO15408セキュリティ認証版PostgreSQL,NTTデータが無償公開
開放源代碼(OSS)DB 首次的 ISO15408 安全性認證版 PostgreSQL, NTT 資料無償公開

內容:
ISO/IEC 15408 簡介

  • ISO/IEC15408 旨在支持產品(最終是指已經在系統中安裝了的產品,雖然目前指的是一般產品)中IT安全特徵的技術性評估。ISO/IEC15408 標準還有一個重要作用,即它可以用於描述用戶對安全性的技術需求。
  • 在國際上推行多年的 ISO/IEC 15408 資安產品評估標準已證實,取得驗證證書的產品,發生資安事件的比例相對較低。有效提高資安防護能力的第一步,就從資安產品評估開始。
  • 一般說來,經過 ISO/IEC15408 評估的IT安全產品有助於確保一個機構安全專案的成功,這些 IT 產品的使用能夠極大地減少機構所面臨的安全風險。

日本 NTT 簡介
  • 日本 NTT 是日本電信界的龍頭企業體, 擁有龐大的電信網路技術研究與人才.
  • 目前正大量佈署著 PostgreSQL 應用和其 Cluster 在自己的企業 IT 使用中.
 NTT 數據 4月11日,無償公開取得了 ISO/IEC15408 安全性認證的 PostgreSQL。NTT 數據強化安全性設定認證的申請已取得了。開放源代碼的資料庫管理系統取得 ISO/IEC15408 安全性認證在全球世界上亦為第一次。

 ISO/IEC 15408 是國際的安全性基準。經濟產業省(日本政府的財經部門)對取得了 ISO/IEC 15408 認證的產品從 2007年4月到 2009年3月底實施著稅制優待措施。(這才叫重品質的國家政府)能接受對具體, 基準取得價額的稅額扣除(10%)又特別償還(50%)。再在省廳的籌措中, ISO/IEC 15408認證產品的利用也被大力推薦。

 PostgreSQL 的開發是由開放源代碼·獨立自治團體的 PostgreSQL Global Development Team 進行。但是變得需要為了 ISO/IEC 15408 取得認證的確保除了費用以外安全性的組織體制等條件, 由於獨立自治團體的取得難以進行。為此 NTT 數據改變做法, 由獨立行政法人信息處理推進機構(IPA)申請這認證。Linux OS 已經有實體案例, 在開放源代碼的數據庫管理系統的 ISO/IEC15408 認證取得更為世界上首次。

 公開的 PostgreSQL, 把版本 8.1.5 做為基本 NTT 數據雖然改良了但是實行版(二進制)。ISO/IEC 15408 認證的對象為了不是源碼出自實行文件, 不是源碼公開著二進制(具體性 RPM文件)。實行環境是 Red Hat Enterprise Linux AS4 for x86。

 安全性的強化亦進行了的密碼認證, 監查對數(記錄)表示·閱覽機能。根據這些的改良作為源碼被地方自治團體反饋。評價保障水平是最基本的 EAL1

 NTT數據「ゆうちょくらぶ」的會員管理系統等大規模系統活用著 PostgreSQL。開發再擴張到 clustering·軟件「PostgresForest」和全文檢索工具「Ludia」, 等 PostgreSQL 的開放源代碼·軟件無償公開。PostgreSQL 關聯以外, 開發運用管理工具的 Hinemos, sekyuaOS 的 TOMOYO Linux等的開放源代碼·軟件也無償公開。


延伸閱讀(Link):
日本 NTT - PostgreSQL 認證版新聞與下載頁

2007-04-01

PostgreSQL 日誌分析器 pgFouine

更新:2007-04-01
對映章節:
http://pgfouine.projects.postgresql.org/index.html

內容:
pgFouine 是一個 PostgreSQL 日誌分析器(log analyzer) 使用從 PostgreSQL 日誌檔案來創建詳細的報表. pgFouine 能協助您判斷您的 PostgreSQL 基礎性應用那一個查詞式您應該在速度上優化它.




2007-03-29

PostgreSQL 效能評估工具 pgbench (上)

更新:2007-03-29
對映章節:

內容:
pgbench 是被 PostgreSQL 作為性能基準檢查測試(Benchmark)用的程序,與 PostgreSQL 源代碼一起被散佈。在這篇我來對 pgbench 和關於基準測試做概要解說。

(日本)石井達夫 先生與 pgbench
為了能進行 PostgreSQL 的基準測試的程序由 石井達夫 先生寫了 pgbench 程序遞交給 PstgreSQL 並與實體源代碼一同被散佈。
主要用來對 Server 方面 Databases 的基本的基準把能用的 TPC-B 做為基礎製作,以每 1秒鐘能實行的事務交易(transaction)數來判斷性能。主要特徵,能模擬多用戶環境,能容易同時試驗連線環境。同時,移植性高,安裝也簡單.

pgbench 在 PostgreSQL 解壓後的源代碼包的目錄內的 contrib/pgbench 裡存在。因此,不需要重新取得。 能做以 contrib/pgbench 移動,以 DBA 權限編譯·安裝。
(在 Win32 - PostgreSQL 8.2+ 其指令已內附在 \bin 之內 pgbench.exe )

pgbench 的使用順序

要啟動 pgbench 命令如下:

$ pgbench -option database_name

同時,pgbench 要進行基準測試,必須照以下的步驟:

  1. 做資料庫的初始化→ 基準測試使用的資料庫的作成。
  2. 指定基準測試的實行→各種各樣的條件,實行基準測試。
選項的指定
對 pgbench,有指定為啟動的時候的各種各樣的選擇。在這裡,只使用 pgbench 上重要的選項摘錄介紹。
  • -h :PostgreSQL(postmaster)啟動的主機名。到省略的時候 Unix domain socket 連接給自主人。
  • -U :用戶名.
  • -p :PostgreSQL(postmaster)啟動的端口號。與省略的時候 PostgreSQL(postmaster) 默認使用的 5432端口被指定了的東西被看作。
  • -i :初始化為基準測試使用的資料庫。
  • -s [定標係數] :初期化為資料庫的時候使用,[定標係數]*10萬筆的資料被製作。被省略的時候等同 1指定。
  • -c :同時實行的客戶端數。被省略的時候與 1相同。
  • -t :一個客戶端指定實行的 transaction 數。被省略的時候與 10 是相同。
  • -S :這個選擇的話進行檢索處理的試驗。其他的處理不被進行。
  • -N :這個選擇的話從通常的試驗省去了一部分的更新處理的試驗被進行。
  • -d :這個選擇的話,試驗的流逝等各種各樣的信息被表示。可是,為了在大量裡(上)表示信息的處理被進行,多少試驗結果惡化了。
舉例:
$ pgbench -i -U postgres -s 10 test

說明:
初始化創建基準測試用資料表在用戶"postgres"的"test"資料庫裡, 且"accounts"資料筆數創建 10*10萬筆資料.

下圖是執行上述命令後產生的 4個資料表和資料筆數(點圖放大)




延伸閱讀(Link):
http://www.techscore.com/tech/sql/pgbench/index.html

PostgreSQL 推薦手動 VACUUM 的時機與目的

更新:2007-03-29
對映章節:

內容:
PostgreSQL 在 8.1 版後雖然加上了自動執行空間清理與回收機制(autovacuum).
減少 DBA 去定期手動執行 VACUUM 的過程, 但有時我們可能更想更快反映這效果, 這時就必須以手動執行的方式來達到目的.

推薦運行 VACUUM

在 pgAdmin III 提供了一個很易觀察當前是否應進行手動 VACUUM 的判斷, 在下圖右邊的黃體標示區預測值:"資料列數(已估算)"與實際值:"資料列數(已計數)", 二個值若產生嚴重偏離實際行數, 就應該在這個資料表上運行 VACUUM ANALYZE

除了手動運行 VACUUM ANALYZE 命令(也可以利用 pgAdminIII 的「維護」選單來做)之外,還應該考慮定期有規律或者自動地運行 VACUUM ANALYZE (8.1 版後預設值是已啟用)。使用排程程序也可以做到這一點,另外 PostgreSQL 也提供了一個叫做 pg_autovacuum 的後端程序,能夠跟蹤資料庫的變化並在適當時刻自動調用 vacuum 命令。在大多數情況下,pg_autovacuum 是最好的選擇。

(點圖可放大)


pgAdmin III 工作排程代理員:


VACUUM 有什麼好處?

PostgreSQL 的查詢計劃根據預測行數做出決定,如果實際行數與預測行數有太大差異,可能會作出錯誤判斷,造成查詢計劃不是最優化的,導致執行效率過低。

PostgreSQL 資料庫需要 VACUUM 修復表中的事務交易 ID。另外,由於更新和刪除操作而產生的過時資料直到在這個表上運行 VACUUM 命令才會被清理。按下 pgAdmin III VACUUM 介面中的 [幫助/說明] 按鈕,可以從線上文檔中看到更詳細資訊。

延伸閱讀(Link):

2007-03-20

PostgreSQL 表格空間(Tablespace)功能與未來特點

更新:2007-03-21
對映章節:

內容:
表格空間, 是整個系統的資料主體
PostgreSQL 使用 pg_global 來存放和系統有關的物件
使用 pg_default 表格空間來存放使用者建立的資料庫物件

表格空間決定著DBMS整體效能的重點調校之一
在以下的情況 DBA 就有必要考量 Tablespace 的分割與配置

  • 資料間具有競爭系統效能.
  • 大型物件資料表與小型物件資料表應該分別在不同的 Tablespace.
  • 分離資料和索引的存放空間是不錯的效能強化.
PostgreSQL 開發團隊對下個版本的工作目標:

Tablespaces
  • Allow a database in tablespace t1 with tables created in tablespace t2 to be used as a template for a new database created with default tablespace t2
    All objects in the default database tablespace must have default tablespace specifications. This is because new databases are created by copying directories. If you mix default tablespace tables and tablespace-specified tables in the same directory, creating a new database from such a mixed directory would create a new database with tables that had incorrect explicit tablespaces. To fix this would require modifying pg_class in the newly copied database, which we don't currently do.
  • Allow reporting of which objects are in which tablespaces
    This item is difficult because a tablespace can contain objects from multiple databases. There is a server-side function that returns the databases which use a specific tablespace, so this requires a tool that will call that function and connect to each database to find the objects in each database for that tablespace.
  • -Add a GUC variable to control the tablespace for temporary objects and sort files
    It could start with a random tablespace from a supplied list and cycle through the list.
  • Allow WAL replay of CREATE TABLESPACE to work when the directory structure on the recovery computer is different from the original
    (類似 Oracle 的 重作日誌表格空間的功能)
  • 允許對每個表格空間配額(quotas)
  • 允許 ALTER TABLESPACE 來移動表格空間到不同的目錄(directories)
  • 允許資料庫被移動到不同的表格空間
  • 允許移動系統表(global system tables)到其它的表格空間, where possible
    Currently non-global system tables must be in the default database tablespace. Global system tables can never be moved.

2007-03-04

PostgreSQL 子專案介紹: pgmemcache

更新:2007-03-04
對映章節:

內容:
pgmemcache 是一個用來給將 PostgreSQL 使用者自定義的函數元件設定 memcached.
安裝很簡易, 但會有些有瑣細的要求.
那什麼是 memcached 呢? 這可是很棒的 Linux 增強用的 Daemon 哦@@"
請轉看這篇簡介...

"PostgreSQL 結合 memcached 進行快取資料與多主機同步"

在昨天它更新到了 1.2 Bata1 版, 原始檔包小巧到只有 13KB.
卻功能強大.
專案網址:http://pgfoundry.org/projects/pgmemcache/

現在開發工作是由Opten技術集團贊助開發的
http://www.otg-nc.com
一家以特定的開放源碼導入服務的國際公司

和我們有關的是它採用 PostgreSQL 為主要資料庫的選擇.

2007-02-28

PostgreSQL 存取訪問配置安全性(一)概論

更新:2007-02-28
對映章節:

內容:
PostgreSQL 存取訪問配置組態(一)概論

與 PostgreSQL 有關的主要設定配置文件:

  1. postgresql.conf : 系統啟用時主配置文件
  2. pg_hba.conf : 存取訪問.認證控制安全性文件
  3. pg_ident.conf : 非 sameuser 的身份映射(maping)定義在身份映射文件
配置文件只有在重啟系統時才重新裝載, 而不是每次連線就重新裝載.

postgresql.conf / pg_settings
在系統開始運作時載入, 可以籍由 System View (pg_settings) 這張表來觀看系統執行中的配置, 且可經由 UPDATE 來改更其值, 效果等同 SET.
listen_addresses = '(string)' 這是個很重要的選項, 如果您的 Server 要能透過TCP/IP進行的話, 請設定它. 預設只監聽 localhost.

2007-02-27

PostgreSQL 預設的進程(Process)說明

PostgreSQL 用進程來 listen 一般情況下(Debian)
會有5個以上 Daemon 保持著

Linux 下:


Win32:


  1. -D 宣告資料庫的路徑, 並守護著.
  2. writer: 寫入器進程
  3. stats buffer: 狀態緩衝器進程
  4. stats collector: 狀態收集器進程
  5. idle ~ N:Client 使用中的進程, 每多一個Client+1.

2007-02-26

PostgreSQL 8.1 on GNU/Debian - 預設說明整理

修訂:2007-02-27

在 Debian 上直接使用 dpkg 安裝的話~
以 8.1 為例

initdb 初始化DB的位置
/var/lib/postgresql/8.1/main

Runing...
/usr/lib/postgresql/8.1/bin/postmaster -D \
/var/lib/postgresql/8.1/main -c \ config_file=/etc/postgresql/8.1/main/postgresql.conf


conf:
/etc/postgresql/8.1/main/*
environment (for postgres starting)
pg_hab.conf
pg_ident.conf
postgresql.conf
start.conf (for pgcluster relation)

log:
log -> /var/log/postgresql/postgresql-8.1-main.log

PostgreSQL Home目錄
/var/lib/postgresql

PostgreSQL 預設 bin, lib 安裝的位置在
(預設權限全給了 root)
/usr/lib/postgresql/8.1/*

指令包括:
postmaster -> postgres (link)
postgres
initdb :: 初始化DB用
psql :: Client 命令終端器
pg_ctl
pg_dump/pg_dumpall/pg_restore

createuser/dropuser
createdb/dropdb
createlang/droplang

reindexdb
vacuumdb

*ipcclean
*clusterdb
*pg_controldata
*vacuumlo

PostgreSQL 社群專屬搜尋引擎與 Firefox Search Plugin

完整的開放, 也豪不保留的回饋~
這就是社群軟體因參與開發過程人數不斷上升
加速超越商業軟體品質的主因.

您現在能在 Firefox 的搜尋列加上結合
search.postgresql.org 的資源搜尋功能
http://www.gunduz.org/postgresql/searchpostgresqlorg.html



另外由
http://www.pgsql.ru/db/pgsearch/
製作的完整搜尋器能針對 PostgreSQL 的各式文件做有效的搜尋
另外該社群也製作了針對 Mail List 的搜尋列
http://www.pgsql.ru/db/mw/

2007-02-20

PostgreSQL 編碼轉換(Convert)與應用技巧

這個功能特別適合用在對特定欄位先進行"來源字元編碼"轉換(Convert)"目的字元編碼"後, 再進行必要的資料操作事務, 例如用來做從UTF-8資料庫中抽出欄位 Convert 成 BIG-5 編碼後再進行排序.

PostgreSQL 對 "Convert" 預先定義了近 120 種供您選擇與使用(棒吧!)
詳細請查看 pg_catalog 網要模式中的 convert.

pgAdmin-III 擷圖(點圖放大)


排序可能受到的環境變數影響正確性:(請觀察您自己)
server_encoding: UTF8
client_encoding:UTF8
lc_collate:zh_TW.UTF-8

要把數據庫初始化成支持中文的 locale,比如我用 zh_TW.utf8:

initdb --locale=zh_TW.utf8 --encoding=utf8 ...

{轉述:laser}在一般用途的 postgresql 的使用時,一般會建議使用 C 做為初始化 locale,這樣PG將會使用自身內部的比較函數對各種字符(尤其是中文字符)進行排序,這麼做是合適的,因為大量OS的locale實現存在一些問 題。對於tsearch2,因為它使用的是locale來進行基礎的字串分析的工作,因此,如果錯誤使用locale,那麼很有可能得到的是空字串結果, 因為多字節的字符會被當做非法字符過濾掉。{轉述:laser}


locale 要指定為"C"

語法:
CONVERT([colname] USING [Aencodeing_to_Bencodeing])


範例:
select * from countries order by convert(state using
utf8_to_big5);

===============================================
順便提一下 I18N
Debian:
/usr/share/i18n
/usr/share/locale


請善用 Google.....

國際化(Internationalization,I18N)
程式本身所具的能力, 使其能依使用者的語言環境不同, 而適應不同的語言文字、字碼集的處理等等。國際化是指軟件能用於多國語言環境的能力。在Linux中通過locale來設置程序運行的不同語言環境,locale 由 ANSI C提供支持。locale的命名規則為<語言>_<地區>.<字符集編碼>,如zh_CN.UTF-8,zh代表中

"國際化"可能是目前我們找得到的最好解答, 國際化的英文名稱是 InternationalizatioN,這個英文單字的第一個字母 I 與最後一個字母 N 之間有 18 個字母,所以也被簡稱為 I18N。 I18N 是一種觀念跟目標,這個想法是要提供一個架構, 讓同樣的程式碼可以適用在各種語文習慣跟編碼系統上面, 程式設計人員只要利用這個架構的機制跟準則撰寫應用程式, 就可以在不需重新編譯程式的情況下,自然的支援各式各樣的語言, 不過為了要達成這樣的目標,作業系統必須提供一定程度的支援, 特別是在各種的程式庫裡面都得有支援 I18N 的 設計才可以, 這邊特別重要的就屬 C 程式庫以及 X 視窗系統的國際化設計了。

2007-02-19

PostgreSQL 例行程序維護工作 - VACUUM 概要

對映章節:III.C22.1

版本差異:
8.0+ 增加可詷整的組態參數選項
8.1+ 增加 Auto-Vacuum Daemon

目的:
清理與最佳化資料庫的索引定義, 另可清理因頻繁更新資料殘存在內部的"垃圾記錄"

  1. 恢復由已更新的或已刪除的行佔據的磁盤空間。
  2. 更新 PostgreSQL 查詢規劃器使用的資料統計資訊。
  3. 避免因為事務 ID 重疊造成的老舊資料的遺失。
phpPgadmin 擷圖:

不是很想對這名詞做中文化, 原因是翻成"清理"...似乎不太能代表這重大功能原文的含義.

pgAdmin III 擷圖:


由來:
RDBMS 利用"定義索引"技術來加快搜尋.
透過 Vacuum 技術來"清理和整理"索引.

選項:
  1. 完整的:會對所有資料表進行 Vacuum, 缺點就是費時.
  2. analyze: 進行更詳細的索引分析, 更費時, 但能建更有效率的執行計劃.
限制條件:
Vacuum 這維修工作期間會locks住資料表, 導致無法存取.
建議在深夜或是使用少時排定行程.

2007-02-16

PostgreSQL 結合 memcached 進行快取資料與多主機同步

更新:2007-03-04
對應章節:

內容:
Memcached 是一個分散式的 Memory Object 架構,最早由 Life Journal 所採用。
它可以啟動一支 Daemon 來將所有其它 Client 的 Object 都集合起來,並且做到多主機同步化的工作。

運用的重心在:
減少直接對實體資料庫進行"讀"操作,將絕大多數"讀"的資料放在快取中。
再或者可以直接將產生的頁面 html 代碼放在緩存中。

來加速資料對Client的反應速度.


PostgreSQL 也進行著和這 Daemon 的搭載開發:
http://pgfoundry.org/projects/pgmemcache/



===================(待整理)
http://www.danga.com/memcached/download.bml
http://www.linuxjournal.com/article/7451
http://www.example.net.cn/archives/2006/01/eoamemcachedoea.html
http://bbs.pgsqldb.com/index.php?t=msg&th=8574&start=20&rid=&
http://lightyror.thegiive.net/2006/12/rails-memcached_21.html
http://blog.roodo.com/jaceju/archives/2429636.html
http://blog.twpug.org/post/30/239

PostgreSQL & Google-Analytics Running...

::Planet PostgreSQL::

PostgreSQL Information Page

PostgreSQL日記(日本 石井達夫先生Blog)

PostgreSQL News

黑喵的家 - 資料庫相關

Google 網上論壇
PostgreSQL 8 DBA 專業指南中文版
書籍內容討論與更多下載區(造訪此群組)
目錄下載: PostgreSQL_8 _DBA_Index_zh_TW.pdf (更新:2007-05-18)

全球訪客分佈圖(Google)

全球訪客分佈圖(Google)