【postgre-XL数据库】运维总结

猫哥负责公司的postgre-XL数据库集群已经有一年多的时间,总结了一套postgre数据库的运维方法,涉及数据库日志查看、集群重启、自定义词典、数据库参数分类、数据库用户创建、数据库常用运维指令等。

★查看pg集群日志:

node1节点,路径:/home/postgres/pgxc_ctl/pgxc_log

 

★查看pg日志:

非gtm节点

路径:/data1/pgxl_1/nodes/coord/pg_log

ps:coord中的pg_log保存的是该服务器的连接日志

       dn_master的pg_log保存的是数据库数据具体操作日志

 

★集群重启:

node1节点(gtm)

停止:pgxc_ctl -c /home/pgxl/pgxc_ctl/pgxc_ctl.conf stop all

启动:pgxc_ctl -c /home/pgxl/pgxc_ctl/pgxc_ctl.conf start all

 

★文件传输(Bash命令)

scp  dict_extra.txt  root@node2:/usr/pgsql-10/share/tsearch_data

 

★自定义词典路径(只需修改node2节点)

第一步: /home/postgres/pgxl/share/tsearch_data/dict_extra.txt

第二步:并在postgres.conf中添加:

             zhparser.extra_dicts = "dict_extra.txt"

             hparser.dict_in_memory = true

 

★修改数据库用户密码

第一步:登录每个服务器的pg数据库,修改对应用户名的密码:alter user "postgres" with password '123456';

第二步:登录每台服务器(除gtm)修改协调节点和数据节点下的pg_hba.conf文件(路径:/data1/pgxl_1/nodes/coord;/data1/pgxl_1/nodes/dn_master),将对应的Method设置为password;

第三步:重启集群

 

★数据库主进程:postmaster

路径:/usr/local/pgxl/bin/postmaster

 

##查看系统信息的常用命令

★查看缓存命中率ratio (缓存命中率不可低于99%,如果低于了99%,表明,cache效率太低了,需要增大shared buffer。)

SELECT  blks_read,blks_hit, blks_hit::numeric / (blks_read + blks_hit ) AS ratio FROM pg_stat_database  WHERE datname = 'postgres' ;

 

★查看数据库的大小

SELECT pg_database_size('postgres'), pg_size_pretty(pg_database_size('postgres'));

 

★查看具体表的大小

包括索引:   SELECT pg_size_pretty(pg_total_relation_size('dwd_match_20180601_simple'));

不包括索:   SELECT pg_size_pretty(pg_relation_size('dwd_match_20180601_simple'));

仅索引:      SELECT pg_size_pretty(pg_indexes_size('dwd_match_20180601_simple'));

 

★查看全局表空间(pg_global)和默认表空间(pg_default)的大小

SELECT pg_size_pretty(pg_tablespace_size('pg_global'));

SELECT pg_size_pretty(pg_tablespace_size('pg_default'));

 

##系统维护的常用命令

★修改postgres.conf后,使修改生效的方法(仅针对生效的配置项均为不需要重启数据库服务的)

方法一,在操作系统中使用如下命令:pg_ctl reload

方法二,在psql中使用如下命令:SELECT pg_reload_conf();

 

★取消一个长时间执行的SQL方法

*pg_cancel_backend(pid)  :取消一个正在执行的SQL

*pg_terminate_backend(pid) :终止一个后台服务进程,同事释放此后台进程的资源

PS:这两个函数的区别是,前者实际上是给正在执行的SQL任务配置一个取消标志,正在执行的任务在合适的时候检测到此标志后会主动退出;但此任务没有主动检测到这个标志,则该任务就无法正常退出,这是就需要使用后者来终止SQL命令。

具体过程:

1.SELECT pid, usename,query_start, query from pg_stat_activity WHERE datname='postgres' and state='active';

2.SELECT pg_cancel_backend(pid)

3.若取消不了,则用 SELECT pg_terminate_backend(pid);

 

##PG参数分类:

internal:只读参数,由postgres程序和在初始化实例时写死。

postmaster:改变这些参数的值需要重启PostgreSQL。在postgres.conf中修改这些参数后,需要重启PG才能生效。

sighup:在postgres.conf中修改这些参数后,不需要重启PG,reload即可。

backend:在postgres.conf中修改这些参数后,不需要重启PG,reload即可。

superuser:这类参数可以由超级用户使用set来改变,不需要重启PG,reload即可。

user:除普通用户可以改变外,此参数与superuser参数没有区别。

 

★查看参数类型:

SELECT name, context FROM pg_settings WHERE name LIKE 'shared_buffers';

 

★reload语法

pg_ctl reload -D /home/postgres/pgdata

 

★创建只读用户

1.REVOKE CREATE ON SCHEMA public from public;(收回建表权限)

2.CREATE USER readonly with password '123456';(创建readonly用户)

3.GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;(将当前public 下的schema下的所有表的SELECT权限赋予readonly)

4.ALTER DEFAULT PRIVILEGES IN SCHEMA public grant select on tables to readonly; (将今后新建表的SELECT权限赋予readonly

若希望此用户访问其他schema下的表,需要重复执行如下语句:

5.GRANT SELECT ON ALL TABLES IN SCHEMA other_schema TO readonly;

6.ALTER DEFAULT PRIVILEGES IN SCHEMA other_schema grant  select on tables to readonly;

 

★查看某用户的表权限

SELECT* FROM information_schema.table_privileges WHERE grantee='readonly'; 

 

★lunix查看表数据具体存放的数据节点 

方法一:\d+  tablename;  

方法二:EXPLAIN TABLE tablename

 

★ EXPLAIN(执行计划的解释)

联合使用analyze选项和buffers选项,可通过实际执行来查看实际的代价和缓冲区命中的情况,命令如下: EXPLAIN  ( analyze  true, buffers true)  SELECT  *  FROM  tablename;

ps具体含义:在共享内存中直接读到16284个块,整行表示从磁盘中共读了196482,写了196450块。为什么select会写?因为共享内存中有脏块,从磁盘中读出的块必须把内存中的脏块挤出去,所以产生了很多的写

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章