服务控制(2)

重新加载服务配置文件

PostgreSQL的一些配置参数修改后,需要重新加载整个参数配置文件才能生效。

该如何做???

在所有的平台中,都有特定的命令用于重新加载服务配置文件,具体如下:

在Ubuntu和Debian平台,命令如下:

pg_ctlcluster 9.4 main reload

在Red Hat/Fedora平台,命令如下:

service postgresql reload

在Solaris、Mac OS、FreeBSD平台,命令如下:

pg_ctl -D /var/lib/pgsql/data reload

当你已经连接到PostgreSQL上时,也可以重新载入配置文件,如果你是超级用户,那么可以执行以下命令:

postgres=# select pg_reload_conf();

输出非常简短:

pg_reload_conf

--------------------

t

这个函数也经常在图形化管理工具中被使用,例如pgAdmin3.

如果你这样做,需要注意的是,你重新载入的认证规则可能会和你当前的会话相冲突。它不会强迫你断开,但是当你断开后,则可能无法重新连接上。

如果配置文件有错误,则会在消息日志中出现一条记录,所以我们建议在重新加载配置文件后马上查看下日志。你需要快速发现(并修复)语法错误,因为这会导致在完成重新加载前拒绝任何人登录。其他的错误,例如参数名输入错误,或者输错单元,将会只出现在日志中;总之,只有一些非语法错误将导致无法加载整个文件,所以在任何情况下最好都检查日志。

如何实现的???

需要重新加载配置文件时,我们发送一个SIGHUP信号到postmaster,然后这个信号被发送到所有的服务进程。这就是为什么很多人把服务重新加载配置文件叫作“sigh-up-ing”的原因。

如果你查看系统表pg_settings,那么你可能会注意到有个叫做context的字段。每个设置项都有一个可以被修改的时间和位置项。有些参数只有在服务重新加载配置文件时重置,因此对应参数的conetext字段的值为“sighup”。

更多内容......

由于重新加载参数配置文件是通过发送SIGHUP信号实现的,所以我们可以针对单个用户的后台服务进程使用kill命令让他加载配置文件。正如你所预期的,执行上述操作后可能会得到奇怪的结果,所以不要轻易尝试。

首先,用gp_stat_activity在后台找到进程号PID,然后,在操作系统提示符下执行以下命令:

kill -SIGHUP pid

或者也可以将上面两步合成一步,如下:

kill -SIGHUP \

'psql -t -c "select procpid from pg_stat_activity limit 1"'

上面最好是加上恰当的WHERE条件。

快速重启服务

有些数据库参数需要完全地关闭并启动服务后才能生效。

该如何做???

重启服务的基本命令如下:

pg_ctl -D datadir restart -m fast

重启就是先停止服务再启动,因此它听起来非常简单。在很多情况下,这确实很简单,但偶尔有些情况下,你需要在数据库非常繁忙的时候重启它。这时我们就需要一些小技巧来让重启过程快速完成。

首先,需要使用fast模式停止服务。如果我们使用默认的smart模式停止服务,则服务会等待所有人的会话都完成才能完成停止过程。如果我们使用immediate模式,则服务可能崩溃,在下次启动的时候需要做崩溃回复,这个过程也会拖慢整个过程。

运行中的数据库有缓存的数据块,其中大部分是脏数据。PostgreSQL数据库和其他数据库系统一样,在关闭服务前会做一次checkpoint。这意味着接下来的启动会干净且迅速。checkpoint做的事情越多,那么关闭服务消耗的时间将会越长。

如果我们在实际关闭服务前做一次普通的checkpoint,则接下来的服务关闭前的checkpoint要做的事情就会极少。所以,可以以数据库超级用户执行以下命令,将shared_buffer里面的脏数据刷到数据文件中:

psql -c "CHECKPOINT"

接下来需要考虑的是当我们重启后,数据库缓存被清空,并且需要数据库本身来恢复它。数据库缓存越大,则预热缓存所花费的时间越长,花30到60分钟让缓存全速运行的情况并不少见。所以一个简单的重启操作如果处理不好将会给夜曲带来很大的影响。

更多内容......

有一个叫做pgfincore的扩展实现了一套用于在操作系统文件缓存中管理PostgreSQL数据页的功能。用法之一为预加载一些表,以便PostgreSQL在需要访问它们的时候加载得更快。比较通用的方法是你可以提供更多的细节信息给操作操作系统魂村,这样做可能会更有效。

###参考文献:PostgreSQL 9 Administration Cookbook(第2版)中文版###

31.移动和复制工作表

不仅可以在一个工作簿里移动和复制工作表,还可以把表移动或复制到其它工作簿里。若要移动工作表,只需用鼠标单击要移动的表的标签,然后拖到新的位置即可。若要复制工作表,只需先选定工作表,按下Ctrl键,然后拖动表到新位置即可。当然,用这种方法可以同时移动和复制几个表。移动后,以前不相邻的表可变成相邻表。

32.工作表的删除

单击“编辑→删除工作表”命令,然后单击“确定”按钮,则这个表将从工作簿中永久删除。 注意:“删除工作表”命令是不能还原的,删除的工作表将不能被恢复。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181105G1JVML00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券