2015-07-21 11 views
0

我在C#應用程序時應該設置PostgreSQL服務器的shared_buffers對應用程序的第一次啓動至少512MB。所以,我需要在我的代碼中執行以下操作:調整/重新從代碼PostgreSQL服務器在應用程序啓動

  1. 檢查shared_buffers是否小於512MB。
  2. shared_buffers設置爲512MB。
  3. 重新啓動postgresql服務器以應用更改。
  4. 重啓完成後繼續運行應用程序。

如何做到這一點的代碼?

+0

是否'shared_buffers'值後,您的應用程序的第一個開始發生變化?如果是的話如何? –

+0

不,我需要在第一次啓動時只更改一次。用戶在第一次啓動應用程序時可能會有默認的postgresql設置。 –

+0

那麼爲什麼你需要_檢查shared_buffers是否小於512MB._? –

回答

2

在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_buffersinitdb後啓動數據庫之前。

如果您在應用程序中捆綁了PostgreSQL,這是我非常喜歡的方法。不要使用安裝程序,只需在安裝程序中捆綁二進制文件。當您的應用程序通過直接調用postgres命令或使用pg_ctl啓動PostgreSQL時啓動。當程序退出時停止它。使用非默認端口(即不使用端口5432),執行而不是安裝在postgres用戶下,將數據目錄放入類似%PROGRAMDATA%\MyApp\postgres的位置,否則將避免與官方PostgreSQL安裝衝突。這會爲你節省很多的痛苦。

參見:

+0

1.如何獲得'postgresql.conf'的完整路徑? 2.安全性和有效性足以在退出應用程序後停止postgresql服務器嗎?我看到在Windows中作爲服務安裝的標準postgresql服務器在應用程序關閉後正在與數據庫做一些工作。另外,如果應用程序意外關閉或用戶剛剛殺死了該進程呢?然後,myapp_postgres服務器將繼續運行。 –

+1

@AndrewPlakhotnyi'SHOW config_file'爲您提供配置文件位置,可以是完整路徑或相對於數據目錄('SHOW data_directory')。當然,這是服務器運行。服務器在默認情況下會在datadirectory中查找配置文件,除非您使用命令行選項來啓動配置文件,以使其在別處查找。 –

+0

@AndrewPlakhotnyi至於安全的應用程序管理 - 說實話,幾乎不可能說,因爲我對你的應用程序一無所知。這通常足夠合理,如果PostgreSQL在應用程序崩潰/強制退出後仍然運行,這並不重要。您的應用只需注意它在啓動時已經運行。或者,您可以使用'pg_ctl register'將其註冊爲Windows服務(但*請使用不同的端口,數據目錄和服務名稱來安裝默認的PostgreSQL *),然後使用通常的Windows API進行服務管理。 –

相關問題