postgresql 9.4.4 安裝

來源:互聯網
上載者:User

標籤:postgresql

因為最近要做個資料研究,需要把資料入庫,開來源資料庫中,同學們一般可能都會選擇mysql,不過mysql 的一些函數能是在太累,因此我這邊換成使用起來與oracle 更為相似的postgresql,近來這個資料庫也是極其熱門,上升速度很快。

下面做個編譯與安裝介紹,以下內容基本都來自德哥分享(http://blog.163.com/[email protected]/)的文檔,感謝德哥的分享。

Postgresql下載網址:

http://www.postgresql.org/ftp/source/

 

這裡我們選擇最新的穩定版版postgresql-9.4.4 的源碼版

https://ftp.postgresql.org/pub/source/v9.4.4/postgresql-9.4.4.tar.bz2

下載後解壓

tar jxvf postgresql-9.4.4.tar.bz2

因為postgresql不能用root 使用者啟動,需要為他重新建立一個使用者

建立使用者

useradd pg944

進入下載的目錄

cd postgresql-9.4.4

編譯,這裡設定安裝目錄

./configure --prefix=/home/pg944/pgsql

完成後執行

gmake worldgmake install-world

下面初始化資料庫相關配置

首先修改Linux核心相關參數調整

vi /etc/sysctl.conf

在最下面加上

kernel.shmmni = 4096kernel.sem = 50100 64128000 50100 1280fs.file-max = 7672460net.ipv4.ip_local_port_range = 9000 65000net.core.rmem_default = 1048576net.core.rmem_max = 4194304net.core.wmem_default = 262144net.core.wmem_max = 1048576


然後繼續修改

vi /etc/security/limits.conf

在最下面加上

* soft nofile 131072* hard nofile 131072* soft nproc 131072* hard nproc 131072* soft core unlimited* hard core unlimited* soft memlock 50000000* hard memlock 50000000


設定防火牆

vi /etc/sysconfig/iptables

加上連接埠,記得在連接埠22的那個設定下加,不要加到最下面

-A RH-Firewall-1-INPUT -p tcp -m tcp--dport 1999 -j ACCEPT

重啟防火牆

service iptables restart

現在初始化postgresql 使用者的相關配置

su - pg944

添加環境變數

vi ~/.bash_profile
加上
export PGPORT=1999 export PGDATA=/home/pg944/pg_rootexport LANG=en_US.utf8export PGHOME=/home/pg944/pgsqlexport LD_LIBRARY_PATH=$PGHOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/lib:/usr/lib:/usr/local/lib:$LD_LIBRARY_PATHexport DATE=`date +"%Y%m%d%H%M"`export PATH=$PGHOME/bin:$PATH:.export MANPATH=$PGHOME/share/man:$MANPATHexport PGUSER=postgresexport PGHOST=$PGDATAalias rm='rm  -i'alias ll='ls -lh'export PGDATABASE=postgres

儲存設定

source ~/.bash_profile

初始化資料庫

initdb -D $PGDATA -E UTF8 --locale=C  -U postgres -W

這裡要輸入密碼,和輸入確認密碼,輸錯會讓你重新初始化

 

測試下

[[email protected] ~]$ psql -Vpsql (PostgreSQL) 9.4.4

這個時候$PGDATA這裡就可以看到資料庫檔案了。下面挑幾個重要的說說

ll $PGDATAbase  -- 這個目錄對應pg_default資料表空間global  --這個目錄對應pg_global資料表空間,  存放叢集中的共用對象例pg_database表, (select  relkind,relname from  pg_class where reltablespace = (select oid from  pg_tablespace where spcname=‘pg_global’) order by 1) , 包含控制檔案等.pg_clog -- 儲存事務提交狀態資料pg_hba.conf -- 資料庫存取控制檔案pg_log -- 資料庫日誌目錄(根據配置定義,  可能沒有這個目錄)pg_multixact -- 共用行鎖的事務狀態資料PG_VERSION  -- 資料庫版本pg_xlog  -- 儲存WAL檔案postgresql.conf -- 設定檔postmaster.opts -- 記錄資料庫啟動時的命令列選項postmaster.pid -- 資料庫啟動的主進程資訊檔(包括$PGDATA目錄,  資料庫啟動時間, 監聽連接埠ipc資訊等)

繼續

cd $PGDATA

啟動資料庫前修改一下$PGDATA下面的pg_hba.conf和postgresql.conf

pg_hba.conf用於配置控制訪問資料庫的來源

這裡為了方便設定對所有地址開放,很不安全

host all all 0.0.0.0/0 md5

postgresql.conf是資料庫的主設定檔,  最好也調整一下Linux核心參數.

下面內容會比較多

vi postgresql.conf

*****************************************************

監聽IPv4的所有IP.

listen_addresses = ‘0.0.0.0‘

 

最大允許1000個串連(測試的話100夠了, 加大串連數同時需要調整shared buffer).

max_connections = 100


為超級使用者保留10個可用串連.

superuser_reserved_connections = 10


預設的unix socket檔案放在/tmp, 修改為$PGDATA, 以確保本地訪問的安全性.

unix_socket_directory = ‘.‘

 

預設的存取權限是0777, 修改為0700更安全.

unix_socket_permissions = 0700

 

TCP會話心跳包在Linux下面預設是2小時.  如果已經修改了系統的核心參數, 則不需要再修改這裡.

為防止用戶端和服務端之間的網路裝置主動關閉空閑TCP會話, 設定以下參數.

tcp_keepalives_idle = 60

tcp_keepalives_interval = 10

tcp_keepalives_count = 6

 

大的shared_buffers需要大的checkpoint_segments,同時需要申請更多的System V共用記憶體資源. 並且增加共用記憶體管理的開銷.

這個值不需要設的太大, 因為PostgreSQL還依賴作業系統的檔案系統cache來提高讀效能,  另外, 寫操作頻繁的資料庫這個設太大反而會增加checkpoint壓力.

在9.4版本中會增加mmap以及huge page table的支援以減少記憶體管理的開銷.

shared_buffers = 512MB

 

這個值越大, VACUUM, CREATE INDEX的操作越快, 當然大到一定程度瓶頸就不在記憶體了, 可能是CPU例如建立索引.

這個值是一個操作的記憶體使用量上限, 而不是一次性分配出去的. 並且需要注意如果開啟了autovacuum, 最大可能有

autovacuum_max_workers*maintenance_work_mem的記憶體被系統消耗掉.

maintenance_work_mem = 512MB

 

一般設定為比系統限制的略少,ulimit -a : stack size (kbytes, -s) 10240

max_stack_depth = 8MB

 

手動執行vacuum操作時, 預設是沒有停頓執行到底的, 為了防止VACUUM操作消耗太多資料庫伺服器硬體資源, 這個值是指vacuum在消耗多少資源後停頓多少時

間,以便其他的操作可以使用更多的硬體資源.

vacuum_cost_delay = 10ms

vacuum_cost_limit = 10000  # 1-10000 credits

 

預設bgwriter進程執行一次後會停頓200ms再被喚醒執行下一次操作, 當資料庫的寫操作很頻繁的時候, 200ms可能太長, 導致其他進程需要花費過多的時間來進行

bgwriter的操作. 短暫的停頓更利於將sharedbuffer中的髒塊flush到磁碟, 降低backend 主動flush 以申請共用記憶體的情形. 後面使用explain時會講到.

bgwriter_delay = 10ms

 

另外還有幾個和寫髒塊相關的參數, 即寫多少髒塊後開始休息.

如果需要做資料庫WAL記錄備份的話至少需要設定成archive層級,  如果需要做hot_standby那麼需要設定成hot_standby,由於這個值修改需要重啟資料庫, 所以先

設定成hot_standby比較好.  當然hot_standby意味著WAL記錄得更詳細,  如果沒有打算做hot_standby設定得越低效能越好.

wal_level = hot_standby

 

wal buffers預設是-1 根據shared_buffers的設定自動調整shared_buffers*3%.最大限制是XLOG的segment_size.

wal_buffers = 16384kB

 

多少個xlog file產生後開始checkpoint操作,

這個值越大, 允許shared_buffer中的被頻繁訪問的髒資料存放區得更久. 一定程度上可以提高資料庫效能. 但是太大的話會導致在資料庫發生checkpoint的時候需要

處理更多的髒資料帶來長時間的IO開銷(還要考慮bgwriter的存在).

太小的話會導致產生更多的WAL檔案 (因為full page writes=on, CHECKPOINT後的第一次塊的改變要寫全塊,checkpoint越頻繁, 越多的資料更新要寫全塊導致產

生更多WAL).

checkpoint_segments = 32

 

這個和checkpoint_segments的效果是一樣的,  只是觸發的條件是時間條件.

checkpoint_timeout = 5min

 

歸檔參數的修改也需要重啟資料庫, 所以就先開啟吧.

archive_mode = on

 

這個是歸檔調用的命令, 我這裡用date代替, 所以歸檔的時候調用的是輸出時間而不是拷貝wal檔案.

archive_command = ‘/bin/date‘ # ‘cp %p/arch/%f‘

 

如果要做hot standby這個必須大於0, 並且修改之後要重啟資料庫所以先設定為32.

表示允許建立多少個和流複製相關的串連.

max_wal_senders = 32

 

這是個standby 資料庫參數, 為了方便角色切換, 我一般是所有的資料庫都把他設定為on 的.

hot_standby = on

 

這個參數是說資料庫中隨機的PAGE訪問的開銷佔seq_page_cost的多少倍 , seq_page_cost預設是1. 其他的開銷都是seq_page_cost的倍數.

這些都用於基於成本的執行計畫選擇. 後面講成本因子的調教時會詳細說明.

random_page_cost = 2.0

 

effective_cache_size只是個度量值,  不是實際分配使用的記憶體值.

表示系統有多少記憶體可以作為作業系統的cache. 越大的話, 資料庫越傾向使用index這種適合random訪問的執行計畫.

一般設定為記憶體大小減去資料庫的shared_buffer再減去系統和其他軟體所需的記憶體.

effective_cache_size = 12000MB

 

下面是日誌輸出的配置.

log_destination = ‘csvlog‘

logging_collector = on

log_directory = ‘pg_log‘   #這裡建議做修改,但得提前建好目錄,並設定許可權

log_truncate_on_rotation = on

log_rotation_age = 1d

log_rotation_size = 10MB

 

這個參數調整的是記錄執行時間超過1秒的SQL到日誌中, 一般用於跟蹤哪些SQL執行時間長.

log_min_duration_statement = 1s

 

記錄每一次checkpoint到日誌中.

log_checkpoints = on

 

記錄鎖等待超過1秒的操作, 一般用於排查商務邏輯上的問題.

log_lock_waits = on

deadlock_timeout = 1s

 

記錄串連和連接埠串連, 可以反映短串連的問題, 同時也可以作為串連審計日誌.

log_connections = on

log_disconnections = on

 

開啟代碼位置資訊的輸出, 可以反映日誌資訊輸出自哪個代碼的什麼函數.

在會話中可以使用\set VERBOSITY verbose開啟

log_error_verbosity  = verbose

 

記錄DDL語句, 但是需要注意的是, 建立使用者, 修改密碼的語句也會被記錄, 所以敏感SQL執行前建議在會話中關閉這個審計.

log_statement = ‘ddl‘

 

這個原本是1024表示跟蹤的SQL在1024的地方截斷, 超過1024將無法顯示全SQL. 修改為2048會消耗更多的記憶體(基本可以忽略), 不過可以顯示更長的SQL.

track_activity_query_size = 2048

 

預設autovacuum就是開啟的, log_autovacuum_min_duration = 0記錄所有的autovacuum操作.

autovacuum = on

log_autovacuum_min_duration = 0

 

*****************************************************************


通過psql 命令登入資料庫

psql -h 192.168.137.3 -p 1999 -U postgres

 

由於我是專註開發,因此喜歡用IDE去寫sql,這裡有個postgresql第三方開發工具,類似pl/sql

http://www.pgadmin.org/download/windows.php

下載安裝,輸入資料庫相關連結



成功串連


點SQL表徵圖就可以開始寫SQL了

比如

下面建立一個資料表空間,這裡的地址對應伺服器裡的檔案夾。pg_test檔案目錄得提前建立。

create tablespace "pgtest"location '/home/pg944/pg_root/pg_test';


Ok,資料庫裝完,現在就可以愉快導資料進行開發了。



著作權聲明:本文為博主原創文章,未經博主允許不得轉載。

postgresql 9.4.4 安裝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.