postgresql数据库 DBA 运维 经常使用的命令

**

postgresql数据库 DBA 运维 经常使用的命令

**


(持续更新)
最近一直在维护postgresql数据库 ,整理一下经常会用到的命令,sql语句。
postgresql11 常用命令

**

一.死锁

**
因为postgresql的本身,常常会导致一部分表被锁

1.查询锁

select w1.pid as 等待进程,
w1.mode as 等待锁模式,
w2.usename as 等待用户,
w2.query as 等待会话,
b1.pid as 锁的进程,
b1.mode 锁的锁模式,
b2.usename as 锁的用户,
b2.query as 锁的会话,
b2.application_name 锁的应用,
b2.client_addr 锁的IP地址,
b2.query_start 锁的语句执行时间
from pg_locks w1
join pg_stat_activity w2 on w1.pid=w2.pid
join pg_locks b1 on w1.transactionid=b1.transactionid and w1.pid!=b1.pid
join pg_stat_activity b2 on b1.pid=b2.pid
where not w1.granted;

2.杀死死锁进程

SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE pid='62560'

如果仍然不能杀死会话,可以在操作系统层面,直接kill 掉

**

二.查看正在运行的进程

**

用于服务器监控,可查询进程,时间消耗与锁相关

SELECT 
C.relname 对象名称,
l.locktype 可锁对象的类型,
l.pid 进程id,
l.MODE 持有的锁模式,
l.GRANTED 是否已经对锁进行授权,
l.fastpath,
psa.datname 数据库名称,
psa.usesysid 用户id,
psa.usename 用户名称,
psa.application_name 应用程序名称,
psa.client_addr 连接的IP地址,
psa.client_port 连接使用的TCP端口号,
psa.backend_start 进程开始时间,
psa.xact_start 事务开始时间,
psa.query_start 事务执行此语句时间,
psa.state_change 事务状态改变时间,
psa.wait_event_type 等待事件类型,
psa.wait_event 等待事件,
psa.STATE 查询状态,
backend_xid 事务是否有写入操作,
backend_xmin 是否执事务快照,
psa.query 执行语句,
now( ) - query_start 持续时间
FROM
pg_locks l
INNER JOIN pg_stat_activity psa ON ( psa.pid = l.pid )
LEFT OUTER JOIN pg_class C ON ( l.relation = C.oid )
-- where l.relation = 'tb_base_apparatus'::regclass
where relkind ='r'
ORDER BY query_start asc

三 PostgreSql 查询数据库,索引,表,表空间大小

– 查询表空间大小

select pg_size_pretty(pg_tablespace_size('pg_default'));

– 查询所有数据库大小

 select pg_database.datname, pg_size_pretty(pg_database_size(pg_database.datname)) AS size from pg_databas;

– 查询指定索引大小

select pg_size_pretty(pg_relation_size('dotime'));

– 查询指定表所有索引大小

select pg_size_pretty(pg_indexes_size('tb_sys_loginfo'));

– 查询指定schema 里所有的索引大小,按从大到小的顺序排列。

 select relname,indexrelname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_indexes where schemaname='public' order by pg_relation_size(relid) desc;

– 查询指定表大小(仅仅指定表数据)

 select pg_size_pretty(pg_relation_size('tb_sys_loginfo'));

– 查询指定表总大小(包括表数据与索引)

select pg_size_pretty(pg_total_relation_size('tb_sys_loginfo'));

– 查询指定schema里面所有表大小(仅仅指定表数据,从大到小)

select relname, pg_size_pretty(pg_relation_size(relid)) from pg_stat_user_tables where schemaname='public' order by pg_relation_size(relid) desc;

–查询指定schema里面所有表数据大小,总索引大小,总大小,行数

SELECT
    table_size.relname 表名,
    pg_size_pretty ( pg_relation_size ( relid ) ) 表数据大小,
    pg_size_pretty ( pg_indexes_size ( relid ) ) 表总索引大小,
    pg_size_pretty ( pg_total_relation_size ( relid ) ) 表总大小,
    表行数
FROM
pg_stat_user_tables table_size
    LEFT JOIN (
        SELECT
            relname,
            reltuples :: DECIMAL ( 19, 0 ) 表行数
        FROM
        pg_class r
        JOIN pg_namespace n ON ( relnamespace = n.oid )
        WHERE
            relkind = 'r'
            AND n.nspname = 'public'
        ) table_num ON table_num.relname = table_size.relname
WHERE
    schemaname = 'public'
ORDER BY
    pg_relation_size ( relid ) DESC;

**

四 查询外部server

**

select * from pg_foreign_server;

**

五 杀掉所有数据库连接

**

SELECT
    pg_terminate_backend(pid)
FROM
    pg_stat_activity
WHERE
    -- don't kill my own connection
    pid <> pg_backend_pid()
    -- don't kill the connections to other databases
    AND datname = '库名'
    ;

**

六 重新启动服务

**

--启动服务:
systemctl start postgresql-11
--停止服务:
systemctl stop postgresql-11
--重启服务:
systemctl restart postgresql-11
--查看pgagent_11服务
systemctl enable pgagent_11
systemctl status pgagent_11
systemctl start pgagent_11

**

七 备份与还原

**

1. 备份数据库

pg_dump --file "/home/back/pgsql-all-"$(date +%F+%T)".backup" --host "0.0.0.11" --port "5432" --username "postgres" --dbname "postgres" --verbose --role "postgres" --format=c --blobs --encoding "UTF8"

2.还原数据库

pg_restore --username "postgres" --no-password --role "postgres" --dbname "hrmwv2" --verbose /home/back/pgsql-all-postgres-2020-07-22+11:03:28.backup

八 重新加载数据库配置的方法有三种:

1. 用超级用户运行

postgres=# SELECT pg_reload_conf();

2. 用UNIX的kill手动发起HUP信号

$kill -HUP PID

3.使用pg_ctl命令触发SIGHUP信号

$pg_ctl reload

猜你喜欢

转载自blog.csdn.net/yang_z_1/article/details/111885234