Tuning/restart 应用程序启动时来自代码的 postgresql 服务器
Tuning/restart postgresql server from code on application startup
我有一个 C# 应用程序,它应该在应用程序首次启动时将 postgresql 服务器的 shared_buffers
设置为至少 512MB。所以,我需要在我的代码中执行以下操作:
- 检查
shared_buffers
是否小于 512MB。
- 将
shared_buffers
设置为 512MB。
- 重新启动 postgresql 服务器以应用更改。
- 重启完成后继续运行申请。
如何在代码中执行此操作?
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
仅在完全重启时生效,而不仅仅是配置重新加载。
因此,一旦您更改了配置,您的应用程序将需要使用特定于外部 OS 和特定于安装方法的方式来重新启动 PostgreSQL。或者只是告诉用户为您重新启动它。
重启:
对于自定义安装和管理 PostgreSQL 的任何平台(Windows、Mac 或 Linux),请使用 pg_ctl restart
.
在 Windows 上,作为服务安装:使用 net stop [servicename]
然后 net start [servicename]
在系统范围内安装了 PostgreSQL 的旧版 Linux(pre-systemd)上:使用 service
命令,例如service restart [servicename]
。这必须是 运行 作为 root 或通过 sudo。
在较新的 Linux (systemd) 上,系统范围内安装了 PostgreSQL:使用 systemctl restart [servicename].service
如果您使用的是没有 ALTER SYSTEM SET
的旧 PostgreSQL,则必须打开、修改并写入 postgresql.conf
。
为了避免解析和修改整个 postgresql.conf
,我发现附加 include_dir = 'conf.d'
选项很有用,然后在数据目录中创建一个 conf.d/myapp.conf
,仅使用配置覆盖我想。
include_dir
is available in 9.3 and newer。对于更旧的版本,您只需直接修改 postgresql.conf
。
如果您的应用首先负责安装和设置 PostgreSQL,您可以在 initdb
之后和启动数据库之前在配置文件中设置所需的 shared_buffers
。
如果您在应用程序中捆绑 PostgreSQL,这是我强烈推荐的方法。不要使用安装程序,只需将二进制文件捆绑在安装程序中即可。通过直接调用 postgres
命令或使用 pg_ctl
在您的应用程序启动时启动 PostgreSQL。当你的程序退出时停止它。使用非默认端口(即不要使用端口 5432),在 postgres
用户下执行 not 安装,将数据目录放入 %PROGRAMDATA%\MyApp\postgres
否则避免与官方 PostgreSQL 安装冲突。这会让你省去很多痛苦。
参见:
- Installation of postgresql with NSIS
- Adding PostgreSQL installer to my own application installer
我有一个 C# 应用程序,它应该在应用程序首次启动时将 postgresql 服务器的 shared_buffers
设置为至少 512MB。所以,我需要在我的代码中执行以下操作:
- 检查
shared_buffers
是否小于 512MB。 - 将
shared_buffers
设置为 512MB。 - 重新启动 postgresql 服务器以应用更改。
- 重启完成后继续运行申请。
如何在代码中执行此操作?
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
仅在完全重启时生效,而不仅仅是配置重新加载。
因此,一旦您更改了配置,您的应用程序将需要使用特定于外部 OS 和特定于安装方法的方式来重新启动 PostgreSQL。或者只是告诉用户为您重新启动它。
重启:
对于自定义安装和管理 PostgreSQL 的任何平台(Windows、Mac 或 Linux),请使用
pg_ctl restart
.在 Windows 上,作为服务安装:使用
net stop [servicename]
然后net start [servicename]
在系统范围内安装了 PostgreSQL 的旧版 Linux(pre-systemd)上:使用
service
命令,例如service restart [servicename]
。这必须是 运行 作为 root 或通过 sudo。在较新的 Linux (systemd) 上,系统范围内安装了 PostgreSQL:使用
systemctl restart [servicename].service
如果您使用的是没有 ALTER SYSTEM SET
的旧 PostgreSQL,则必须打开、修改并写入 postgresql.conf
。
为了避免解析和修改整个 postgresql.conf
,我发现附加 include_dir = 'conf.d'
选项很有用,然后在数据目录中创建一个 conf.d/myapp.conf
,仅使用配置覆盖我想。
include_dir
is available in 9.3 and newer。对于更旧的版本,您只需直接修改 postgresql.conf
。
如果您的应用首先负责安装和设置 PostgreSQL,您可以在 initdb
之后和启动数据库之前在配置文件中设置所需的 shared_buffers
。
如果您在应用程序中捆绑 PostgreSQL,这是我强烈推荐的方法。不要使用安装程序,只需将二进制文件捆绑在安装程序中即可。通过直接调用 postgres
命令或使用 pg_ctl
在您的应用程序启动时启动 PostgreSQL。当你的程序退出时停止它。使用非默认端口(即不要使用端口 5432),在 postgres
用户下执行 not 安装,将数据目录放入 %PROGRAMDATA%\MyApp\postgres
否则避免与官方 PostgreSQL 安装冲突。这会让你省去很多痛苦。
参见:
- Installation of postgresql with NSIS
- Adding PostgreSQL installer to my own application installer