我在C#應用程序時應該設置PostgreSQL服務器的shared_buffers
對應用程序的第一次啓動至少512MB。所以,我需要在我的代碼中執行以下操作:調整/重新從代碼PostgreSQL服務器在應用程序啓動
- 檢查
shared_buffers
是否小於512MB。 - 將
shared_buffers
設置爲512MB。 - 重新啓動postgresql服務器以應用更改。
- 重啓完成後繼續運行應用程序。
如何做到這一點的代碼?
我在C#應用程序時應該設置PostgreSQL服務器的shared_buffers
對應用程序的第一次啓動至少512MB。所以,我需要在我的代碼中執行以下操作:調整/重新從代碼PostgreSQL服務器在應用程序啓動
shared_buffers
是否小於512MB。shared_buffers
設置爲512MB。如何做到這一點的代碼?
在PostgreSQL 9.4及以上,你可以使用ALTER SYSTEM SET
修改postgresql.auto.conf
添加參數。
所以,你可以:
SHOW shared_buffers;
,如果它太低:
ALTER SYSTEM
SET shared_buffers = '512MB';
您必須然後重新啓動PostgreSQL的。這在設計上不能從PostgreSQL內部完成,因爲如果在重啓過程中出現問題,則無法再連接到它,因此您可以輕鬆地鎖定自己。您可以重新加載配置與SELECT pg_reload_conf()
,但shared_buffers
纔會生效滿重啓,而不僅僅是一個配置重裝。
所以,你的應用程序將需要使用特定於操作系統的外部並安裝專用的方式,方法來重新啓動PostgreSQL的,一旦你所做的配置變化。或者告訴用戶爲你重新啓動它。
要重新啓動:
對於自定義安裝和管理的任何平臺(Windows,Mac或Linux)在PostgreSQL,使用pg_ctl restart
。
在Windows上,安裝爲服務:使用net stop [servicename]
然後net start [servicename]
在老版本的Linux(預systemd)從PostgreSQL安裝全系統:使用service
命令,例如service restart [servicename]
。這必須以root身份或通過sudo運行。
在新的Linux(systemd)從PostgreSQL安裝全系統:如果你使用的是老式的PostgreSQL沒有ALTER SYSTEM SET
你必須打開,修改和寫入使用systemctl restart [servicename].service
postgresql.conf
。
爲了避免必須解析和修改整個postgresql.conf
我發現附加include_dir = 'conf.d'
選項然後在datadir中創建一個conf.d/myapp.conf
只需要配置覆蓋就很有用。
include_dir
is available in 9.3 and newer。對於舊版本,您只需直接修改postgresql.conf
即可。
如果你的應用程序是負責安裝和擺在首位設置PostgreSQL裏你可以只設置在配置文件中所需的shared_buffers
initdb
後啓動數據庫之前。
如果您在應用程序中捆綁了PostgreSQL,這是我非常喜歡的方法。不要使用安裝程序,只需在安裝程序中捆綁二進制文件。當您的應用程序通過直接調用postgres
命令或使用pg_ctl
啓動PostgreSQL時啓動。當程序退出時停止它。使用非默認端口(即不使用端口5432),執行而不是安裝在postgres
用戶下,將數據目錄放入類似%PROGRAMDATA%\MyApp\postgres
的位置,否則將避免與官方PostgreSQL安裝衝突。這會爲你節省很多的痛苦。
參見:
1.如何獲得'postgresql.conf'的完整路徑? 2.安全性和有效性足以在退出應用程序後停止postgresql服務器嗎?我看到在Windows中作爲服務安裝的標準postgresql服務器在應用程序關閉後正在與數據庫做一些工作。另外,如果應用程序意外關閉或用戶剛剛殺死了該進程呢?然後,myapp_postgres服務器將繼續運行。 –
@AndrewPlakhotnyi'SHOW config_file'爲您提供配置文件位置,可以是完整路徑或相對於數據目錄('SHOW data_directory')。當然,這是服務器運行。服務器在默認情況下會在datadirectory中查找配置文件,除非您使用命令行選項來啓動配置文件,以使其在別處查找。 –
@AndrewPlakhotnyi至於安全的應用程序管理 - 說實話,幾乎不可能說,因爲我對你的應用程序一無所知。這通常足夠合理,如果PostgreSQL在應用程序崩潰/強制退出後仍然運行,這並不重要。您的應用只需注意它在啓動時已經運行。或者,您可以使用'pg_ctl register'將其註冊爲Windows服務(但*請使用不同的端口,數據目錄和服務名稱來安裝默認的PostgreSQL *),然後使用通常的Windows API進行服務管理。 –
是否'shared_buffers'值後,您的應用程序的第一個開始發生變化?如果是的話如何? –
不,我需要在第一次啓動時只更改一次。用戶在第一次啓動應用程序時可能會有默認的postgresql設置。 –
那麼爲什麼你需要_檢查shared_buffers是否小於512MB._? –