Postgresql 常用数据库管理SQL

一、数据库参数设置

  1. 修改数据库时区
ALTER DATABASE mydb SET timezone TO 'Asia/Shanghai'

二、数据库统计分析

1. pg_stat_database

通过pg_stat_database可以大概了解数据库的历史情况。

select
 datname as 数据库名, 
 numbackends as 连接数,
 xact_commit as 事务提交总量,
 xact_rollback as 事务回滚总量,
 tup_returned as 全表扫描行数,
 tup_fetched as 索引返回行数
 deadlocks as 死锁数量
from pg_stat_database
order by datname
字段 说明
datid 数据库的oid
datname 数据库名
numbackends 访问当前数据库的连接数量
xact_commit 该数据库事务提交总量:和下面的rollback和作为TPS统计
xact_rollback 该数据库事务rollback总量,如果特别多,需要看业务是否有问题了
blks_read 总磁盘物理读的块数,这里的read可能是从 cache中读取,如果很高需要结合blk_read_time看是否真的存在从磁盘读取的情况
blks_hit 从shared buffer命中块数
tup_returned 对于表来说,是全表扫描的行数;对于索引是通过索引返回的索引行数,如果这个值明显大于tup_fetched,说明当前数据库存在大量的全表扫描。可结合pg_stat_statments查找慢SQL,也可结合pg_stat_user_table找全表扫描次数和行数最多的表
tup_fetched 通过索引返回的行数
tup_inserted 插入的行数
tup_updated 更新的行数
tup_deleted 删除的行数
conflicts 与恢复冲突取消的查询次数,只会在备机上发生
temp_files 产生临时文件的数量,如果这个值很高,说明存在很多排序,hash,或者聚合这种操作,需要调大work_mem
temp_bytes 临时文件的大小
deadlocks 死锁的数量,如果这个值很大说明业务逻辑有问题
blk_read_time 数据库中花费在读取文件的时间,这个值很高说明内存较小,需要频繁从磁盘读入数据文件
blk_write_time 数据库中花费在写数据文件的时间,pg中脏页一般写入page cache,如果这个值较高,则说明cache较小,操作系统的cache需要更积极的写入
stats_reset 统计信息重置的时间

2. pg_stat_user_tables

通过查询pg_stat_user_tables,可以基本清除哪些表的全表扫描次数较多,表中DML哪种操作多,也可以了解垃圾数据的数量。

select
 schemaname as 模式名, 
 relname  as 表名,
 seq_scan as 全表扫描次数,
 seq_tup_read as 全表返回行数,
 idx_scan as 索引扫描次数,
 idx_tup_fetch as 索引返回行数
from pg_stat_user_tables
order by schemaname, relname
字段 说明
relid 表oid
schemaname 模式名
relname 表名
seq_scan 这个表进行全表扫描的次数
seq_tup_read 全表扫描的数据行数,如果这个值很大说明操作这个表的SQL语句很可能是全表扫描,需要结合执行计划分析
idx_scan 索引扫描的次数
idx_tup_fetch 通过索引扫描返回的行数
n_tup_ins 插入的数据行数
n_tup_upd 更新的数据行数
n_tup_del 删除的数据行数
n_tup_hot_upd hot update的数据行数,这个值与n_tup_upd接近说明更新性能较好,不需要更新索引
n_live_tup 活的行数量
n_dead_tup 死记录个数
n_mod_since_analyze 上次analyze的实际
last_vacuum 上次手动vacuum的实际
last_autovacuum 上次autovacuum的实际
last_analyze 上次analyze时间
last_autoanalyze 上次自动analyze时间
vacuum_count acuum次数
autovacuum_count 自动vacuum次数
analyze_count analyze次数
autoanalyze_count 自动analyze次数

3. pg_stat_user_indexes

可以知道当前哪些索引频繁使用,哪些是无效索引。无效索引可以删除掉,减少磁盘空间的使用和提升insert、delete、update的性能

select
 schemaname as 模式名, 
 relname  as 表名,
 indexrelname as 索引名,
 idx_scan as 索引扫描次数,
 idx_tup_read as 索引读取行数
 idx_tup_fetch as 索引返回行数
from pg_stat_user_indexes
order by schemaname, relname, indexrelname
字段 说明
relid 相关表的oid
indexrelid 索引的oid
schemaname 模式名
relname 表名
indexrelname 索引名
idx_scan 通过索引扫描的次数,如果该值很小,说明该索引很少被用到,可以考虑删除
idx_tup_read 通过任意索引方法返回的索引行数
idx_tup_fetch 通过索引方法返回的数据行数

你可能感兴趣的:(Postgresql,数据仓库)