暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PG从小工到专家学习笔记-服务管理

917

服务管理

服务的启停和创建

直接运行 postgres进程启动;

  • postgr es - D /home/osdba/pgdata &

使用 pg_ctl命令启动

  • pg_ctl -D /home/osdba/pgdata start

直接向 运行 postgres 主进程发送 signal信号,停止数据库;

  • SIGTERM:发送此信号为 SmartShutdown关机模式
  • SIGINT:发送此信号为 FastShutdown关机模式。
  • SIGQUIT:发送此信号为 Immediate Shutdown 关机模式

使用pg_ctl命令停止数据库

  • pg_ctl stop -D DATADIR -m smart
  • pg_ctl stop -D DATADIR -m fast
  • pg_ctl stop -D DATADIR -m immediate

pg_ctl

  • 功能

    • 初始化 PostgreSQL数据库实例
    • 启动 、终止或重启 PostgreSQL数据库服务
    • 查看 PostgreSQL数据库服务的状态
    • 让数据库实例重新读取配置文件
    • 许给一个指定的进程发送信号
    • 在 Windows平台下允许为数据库实例注册一个系统服务或取消这个系统服务
  • pg_ctl init[db] [-s] [-D datadir] [-o options]

    • -S:只打印错误和警告信息,不打印提示性信息
    • -D datadir:指定数据库实例的数据 目录
    • ooptions:为直接传递给 initdb命令的参数,具体可见 initdb命令的帮助
  • pg ctl start [-w) [-t seconds ) [-s ) [- D datadir) [- 1 filename) [-o options) [- p path) [-cl

    1、start:启动数据库实例 。
    2、-w:等待启动完成。
    3、-t:等待启动完成的等待秒数,默认为 60秒。
    4、-s:只打印错误和警告信息,不打印提示性信息 。
    5、-D datadir:指定数据库实例的数据目录 。
    6、-l:把服务器日志输出附加在“ filename,,文件上,如果该文件不存在则创建它 。
    7、-o options:声明要直接传递给 postgres 的选项,具体可见 postgres命令的帮助 。
    8、-p path :指定 postgres可执行文件的位置。默认情况下 postgres可执行文件来自和 pg_ctl相同的目录,不必使用该选项。除非要进行一些不同寻常的操作,或者产生了postgres 执行文件找不到的错误 。
    9、-C :提高服务器的软限制( ulimit -c) 尝试允许数据库实例在有异常时产生一个 coredump 文件,以便于问题定位和故障分析。

  • pg ctl stop [-W) [-t seconds) [-s) [一D datadir) [-m s[mart) I f[ast) I i [mmediate) )

    1、-W:不等待数据库停下来,命令就返回
    2、-m:指定停止的模式 。 前面已叙述过停止的几种模式了 。 
    3、未说明的参数,其含义与启动数据库命令中的参数相同 。

  • 重启:pg ctl restart [-w) [-t seconds) [-s) [-D datadir) [-c) [-m s[mart) I f[ast) I i[mmediate) ] [-o ·options)

  • 重新读取配置文件:pg_ctl reload [- s] (-D datadir]

    pg ctl reload - D /home/osdba/pgdata

  • 查询数据库实例状态:pg_ctl status (-D datadir]

信号

1、SIGTERM: Smart Shutdown关机模式
2、SIGINT : Fast Shutdown 关机模式
3、SIGQUIT: Immediate Shutdown关机模式
发送 SIGHUP 命令会让服务器重新装载配置文件,使用 “ pg_ctl reload”命令和直接调用 函数“ pg_reload_conf()”,其本质也是发送 SIGHUP 给服务主进程 。
直接发送 SIGINT命令给数据库服务进程,会导致此服务进程正在执行的 SQL 被取消, 这与调用函数“ pg_cancel_backend”的效果相同 。 而发送 SIGTERM 信号给数据库服务进程, 同调用“ pg_terminate_backend”函数的效果也是一样的 。

postgres 及单用户模式

常用管理命令

查看系统信息

  • 查看版本

    • select version();
  • 查看数据库启动时间

    • select pg_postmaster_start_time();
  • 查看最后load配置文件的时间

    • select pg_conf_load_time();
  • 使用pg_ctl_reload改变配置的装载时间

    • pg_ctl_reload
  • 查看当前数据库时区

    • show timezone;
  • 查看当前用户

    • select user; select current_user;
  • 查看session 用户

    • select session_user;

      通常情况下“session_user”与user相同;但当用命令“set role”改变用户的角色时,这两者就不相同了:
      set role u01;

      select session_user;
      osdba

      select user;
      u01

  • 查看session及服务器IP,port

    • select inet_client_addr(), inet_client_port(), inet_server_addr(), inet_server_port();
  • 查询后台进程号

    • select pg_backend_pid(); ps -ef | grep $pid |grep -v grep
  • 查看当前wal文件

    • select pg_xlogfile_name(pg_current_xlog_location());

      查看当前WAL 的buffer 中还有多少字节的数据没有写入磁盘:
      select pg_xlog_location_diff(pg_current_xlog_insert_location(), pg_current_xlog_location());

  • 查看数据库实例是否在做备份

    • select pg_is_in_back(), pg_back_start_time();
  • 查看当前数据库实例是Hot Standby还是正常数据库状态

    • select pg_is_in_recovery();
  • 查看对象大小

    • 表:select pg_size_pretty(pg_relation_size(‘pgdb2’));
    • 包含索引:select pg_size_pretty(pg_total_relation_size(‘pgdb2’));
    • 索引:select pg_size_pretty(pg_indexs_size(‘pgdb2’));
    • select pg_database_size(‘osdba’), pg_size_pretty(pg_database_size(‘osdba’));

系统维护

  • 配置postgresql_conf,生效

    • pg_ctl reload
    • select pg_reload_confg();
  • 切换log日志

    • select pg_rotate_logfile();
  • 切换WAL日志

    • select pg_switch_xlog();
  • 手工checkpoint

    • checkpoint;
  • 取消长sql

    方法:
    查看pg_stat_activity,找出长sql:
    select pig,username,query_start,query from pg_stat_activity;
    pg_cancel_backend取消
    select pg_cancel_backend(pid);
    如无法取消,使用pg_terminate_backend中止
    select pg_terminate_backend(pid);

    • pg_cancel_backend(pid);
    • pg_terminate_backend(pid);

服务配置介绍

查询参数值

  • 查询枚举:select enumvals from pg_settings where name =『 client_min_messages ’;
  • 查询单位:select unit f rom pg_settings where name = ’ atitovacuum_vacuum_cost_delay ’ ;
  • 查询参数描述:select short desc,extra desc from pg settings where name =’autovacuum vacuum cost del ay’;

参数类型

  • internal :这些参数是只读参数;

    • postgres程序写死
    • 用一 些不同的编辑选项确定的
    • 数据库实例初始化时就确定
    • 这类参数值不能配置在 postgresql.conf 中,因为它们是由 postgres程 序和在初始化实例时写死的
  • postmaster :改变这些参数 的值需要重启 PostgreSQL 实例

    • 在 postgresql.onf文件中改变这些参数后,需要重启 PostgreSQL实例才能生效
  • sighup :在 postgresql.onf文件中可改变这些参数的值

    • 不需要重启数据库,只需要向 postmaster进程发送 SIG皿JP 信号,让其重启装载配置新的参数值就可以了
    • postmaster进程接收到 SIGHUP信号后,也会向它的子进程发送 SIGHUP信号,让新 的参数值在所有的进程中都生效
  • backend :在 postgresql.conf更改这些设置元须重新启动 服务器

    • 需要 postmaster 发送一个 SIGHUP信号,让它重新读取 postgresql.conf中新的配置值即可
    • 新的 配置值只会出现在这之后的新连接中,在已有的连接中,这些参数的值不会改变
    • 这些参数的值也可以在新建连接时,由连接的一些参数改变
  • superuser :这类参数可以由超级用户使用 set来改变

    • 超级用户改变此参数值时,只会影响自身的 sesssion配置,不 会影响其他用户
    • postmaster进程发送 SIGHUP 信号,也只会影响后续建的连接, 不会影响现有的连接
  • user : 普通用户可使用 set命令通过此类参数来改变本连接中的配置值

    • 除了普通用 户都可以改变外,这类参数与 superuser类参数没有区别
  • 查询参数类型

    • select name,context from pg_settings where name like ’wal_buffers’;

连接配置项

  • listen_addresses : string类型 , 声明服务器监昕客户端连接的 TCP/IP地址,改变这个 参数需要重启数据库服务

    • “0.0.0.0”,它与“*" 允许任何IP的链接
    • 由逗号分隔的多个 IP地址值或 四 地址值对 应的主机名组成的一个列表
    • 默认值是“ localhost”,表示只允许本地使 用“ loopback”连接到数据库,其他机器无法连接到
  • port: integer类型,指定服务器监昕的TCP端口, 默认为5432;更改需要重启

    • 注意同一个端口号用于服务器监昕的所有 IP地址
  • max_connections : integer类型, 允许和数据库连接的最大并发连接数。更改需要重启数据库服务

    • 默认值通常是 100,但是如果内核设置不支持这么大的值 (在 国tdb时判断), 可能就会小于 100
    • 参数只能在服务器启 动的时候设置
    • 增大这个 参数可能会让 PostgreSQL 申请更多的 SystemV共享内存或信号灯,这可能会因为超过操 作系统默认配置值而导致实例无法启动
    • 运行 HOT Standby备服务器时,这个参数必 须大于等于主服务器上的参数, 否则 HOTStandby备服务器上可能无法进行查询操作
  • superuser_reserved_connections : integer类型, 决定为 PostgreSQL超级用户连接而保 留的连接数

    • 需要重启数据库服务。 默认值是 3
    • 普通用 户最多建 max_connections-superuser_reserved_connections个连接后,就不再允许连接了
    • 这个值必须小于 max connections的值
  • unix_socket_directory : string类型, 声明服务器监昕客户端连接的 UNTX域套接字目 录 。

    • 只能在编译时修改;默认通常 是/tmp
    • 在目录下创建.s.PGSQL.nnnn, .s.PGSQL.nnnn.lock ( nnnn 是服 务器的端口号)的文件,这两个文件都不应被手动删除
  • unix_socket_group: string类型 , 设置 UN以 域套接字的所属组(套接字的所属用户总 是启动服务器的用户)

    • 需要重启数据库服务;只能在服务器启动时设置
    • 默认是一个空字符串 , 表示启动服务 器的用户所属的默认组
  • unix_socket_permissions: integer类型 , 设置 UnIX域套接字的访问权限

    • 改变这个参 数需要重启数据库服务
    • 默认的权限是 0777,任何人都可以连接。 通常合理的设置也可能是 0770 (只有用户和同组的人可以访问)和 0700 (只有用户自己 可以访问)
    • 对于山以域套接字,只有写权限有意义,读和执行权限 没有任何意义
  • bonjour : boolean类型, bonjour也称为零配置联网,是苹果电脑公司的一个服务器搜 索协议,此参数表示是否让 Bnjour搜索到 PostgreSQL服务;改变这个参数需要重启 数据库服务。 默认值是o旺。

  • bonjour_name: string类型,声明 Bonjour服务名称 。 改变这个参数需要重启数据库服 务。 默认值为空字符串 ,表示使用本机名 。 如果编译时没有打开 Bonjour,那么将忽 略这个参数 。

  • tcp_keepalives_idle : integer类型,表示在一个 TCP连接中空闲多长时间后会发送一 个 keepalive报文。 默认值为 0

关机模式

Smart Shutdown : 智能关机模式。 在接受此关机请求后 ,服务器将不允许有新连接,并且会等 已有的连接全部结束后 , 才关闭数据库

Fast Shutdown :快速关闭模式 。 不再允许有新的连接,向所有活跃的服务进 程发送 SIGTERM信号,让它们立刻退出,然后等待所有子进程退出并关闭数据库

Immediate Shutdown :立 即关闭模式 。 主进程 postgres 向所有子进程发送 SIGQUIT 信 号,并且立即退出,所有的子进程也会立即退出

PG从小工到专家学习笔记-服务管理,请参考文档:PG从小工到专家学习笔记-服务管理.pdf

最后修改时间:2021-12-07 11:10:52
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论