pg日常运维

pg日常运维

1、kill真正运行的语句

SELECT pg_terminate_backend(PID);

2、批量kill相关的语句,例如:删除订单导出再用的sql

select pg_terminate_backend(pid) from pg_stat_activity where datname = 'ins_dw_prd' and usename='etl_admin' and query like 'insert into export_ordermain%'

3、查找表名

 SELECT tablename,* FROM pg_tables where schemaname='ins_dw_prd9';

4、数据量

--数据库中单个表的大小(不包含索引)
select pg_size_pretty(pg_relation_size('表名'));

--查出所有表(包含索引)并排序
SELECT table_schema || '.' || table_name AS table_full_name, pg_size_pretty(pg_total_relation_size('"' || table_schema || '"."' || table_name || '"')) AS size
FROM information_schema.tables
ORDER BY
pg_total_relation_size('"' || table_schema || '"."' || table_name || '"') DESC limit 20

--查出表大小按大小排序并分离data与index
SELECT
table_name,
pg_size_pretty(table_size) AS table_size,
pg_size_pretty(indexes_size) AS indexes_size,
pg_size_pretty(total_size) AS total_size
FROM (
SELECT
table_name,
pg_table_size(table_name) AS table_size,
pg_indexes_size(table_name) AS indexes_size,
pg_total_relation_size(table_name) AS total_size
FROM (
SELECT ('"' || table_schema || '"."' || table_name || '"') AS table_name
FROM information_schema.tables
) AS all_tables
ORDER BY total_size DESC
) AS pretty_sizes

5、全部表的索引信息

-- 索引索引的信息
select * from pg_indexes;

-- 创建索引的语句
select indexdef
from pg_indexes
where tablename in (
    'f_invoice')
  and indexdef not like 'CREATE UNIQUE INDEX%'
  and schemaname != 'ins_dw_prd10';

6、清理表数据,不删表结构

TRUNCATE table_name;

7、并行建索引

CREATE INDEX CONCURRENTLY "idx_f_invoice_create_time" 
ON "ins_dw_prd12"."f_invoice" USING btree ( "create_time" ) 
WITH (FILLFACTOR=100) ;

8、查询指定分区表信息

SELECT
    nmsp_parent.nspname AS parent_schema ,
    parent.relname AS parent ,
    nmsp_child.nspname AS child ,
    child.relname AS child_schema
FROM
    pg_inherits JOIN pg_class parent
        ON pg_inherits.inhparent = parent.oid JOIN pg_class child
        ON pg_inherits.inhrelid = child.oid JOIN pg_namespace nmsp_parent
        ON nmsp_parent.oid = parent.relnamespace JOIN pg_namespace nmsp_child
        ON nmsp_child.oid = child.relnamespace
WHERE
    parent.relname = 'table_name';

9、表分区各子表记录总数统计

-- 其中,tbl_log为表名
SELECT table_name, count(*)
FROM tbl_log,
     LATERAL (
         SELECT relname FROM pg_class WHERE pg_class.oid = tbl_log.tableoid) AS table_name
GROUP BY table_name
ORDER BY table_name;

10、查看两个字段的存储线性相关性(correlation)

analyze table_name;
select * from pg_stats where tablename='table_name';

select correlation from pg_stats where tablename='test_indexscan' and attname='id';  

11、查看这个表和索引占用了多少数据块

select relpages from pg_class where relname='table_name'; 
select relpages from pg_class where relname='index_name'; 

12、log_fdw,通过SQL查看当前实例实时日志

13、pg12视图监控索引创建进度

SELECT * FROM pg_stat_progress_create_index ;


pid: 索引创建进程号
relid: 表的OID
index_relid: 索引的OID
phase: 索引创建的当前处理阶段
current_locker_pid: 阻塞索引创建的进程号
blocks_total: 当前处理阶段需要处理的数据块
lockers_done: 当前处理阶段已完成的数据块
tuples_total: 当前处理阶段需要处理的记录数
tuples_done: 当前处理阶段已完成的记录数
partitions_total: 当在分区表上创建索引,当前处理阶段需要处理的总分区数
partitions_done: 当在分区表上创建索引,当前处理阶段已处理的总分区数。

14、pg看锁

select * from pg_locks ;

你可能感兴趣的:(postgreSql)