postgres 生产问题定位sql

查询当前进程连接


select pid,query_start,query,client_addr from pg_stat_activity where pid in (
	select a.pid from pg_locks a 
        join pg_class b on a.relation=b.oid

)
-- and state ='active'
-- and datname like 'database%'
-- and query like '%project_subsys%'
order by query_start

postgresql死锁查询

 --查询是否锁表了
select oid from pg_class where relname='可能锁表了的表'
--pid 是进程
select pid from pg_locks where relation='上面查出的oid'
--如果查询到了结果,表示该表被锁 则需要释放锁定
select pg_cancel_backend(上面查到的pid)

批量杀死查询进程

select pg_terminate_backend(t.pid) from (
select pid,query_start,query,client_addr from pg_stat_activity where pid in (
	select a.pid from pg_locks a 
        join pg_class b on a.relation=b.oid

)
and state in ('active','idle')
-- and datname like 'database%'
-- and query like '%project_subsys%'
)t where t.query_start<now() -interval '1 m';

查询空间碎片大小排序

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
;

查询单表空间碎片大小

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

查出表大小按大小排序并分离data与index

--查出表大小按大小排序并分离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

处理多余的空间碎片

#(堵塞)
vacuum full public.table#(非堵塞,重建索引 ) run_job_pkey 索引  databasename  数据库名字
pg_repack -i run_job_pkey --no-kill-backend -d databasename 

#(非堵塞,重建表) run_job 表  databasename  数据库名字
pg_repack -t run_job --no-kill-backend -d databasename 

连接数据库语句

 psql -h localhost 'dbname=postgres user=postgres password=123456'

导出postgres sql

pg_dump -h localhost -p 5432 -U postgres(用户) postgres(database) -a --column-inserts -t pg_proc(表名) -f pg_proc.sql

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
以下是 Postgres DBA 日常管理 SQL: 1. 检查数据库大小和使用情况: ``` SELECT pg_size_pretty(pg_database_size('database_name')); SELECT pg_size_pretty(pg_total_relation_size('table_name')); ``` 2. 检查当前活动的连接: ``` SELECT * FROM pg_stat_activity; ``` 3. 检查慢查询: ``` SELECT query, total_time, calls, rows FROM pg_stat_statements ORDER BY total_time DESC LIMIT 10; ``` 4. 检查表的索引: ``` SELECT relname, indexrelname, idx_scan, idx_tup_read, idx_tup_fetch FROM pg_stat_all_indexes WHERE schemaname = 'schema_name' ORDER BY idx_scan DESC LIMIT 10; ``` 5. 检查表的空间使用情况: ``` SELECT relname, pg_size_pretty(pg_total_relation_size(relid)) FROM pg_catalog.pg_statio_user_tables ORDER BY pg_total_relation_size(relid) DESC LIMIT 10; ``` 6. 检查表的主键和外键: ``` SELECT tc.table_schema, tc.constraint_name, tc.table_name, kcu.column_name, ccu.table_schema AS foreign_table_schema, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name AND ccu.table_schema = tc.table_schema WHERE constraint_type = 'FOREIGN KEY' AND tc.table_schema = 'schema_name'; ``` 7. 检查表的统计信息: ``` SELECT * FROM pg_stats WHERE tablename = 'table_name' ORDER BY attname; ``` 8. 检查表的空间占用情况: ``` SELECT nspname || '.' || relname AS "relation", pg_size_pretty(pg_total_relation_size(C.oid)) AS "total_size" FROM pg_class C LEFT JOIN pg_namespace N ON (N.oid = C.relnamespace) WHERE nspname NOT IN ('pg_catalog', 'information_schema') AND C.relkind <> 'i' AND nspname !~ '^pg_toast' ORDER BY pg_total_relation_size(C.oid) DESC LIMIT 10; ``` 这些 SQL 可以帮助 Postgres DBA 进行日常管理和维护工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值