pg和MySQL读性能_【PG性能】Postgresql性能相关(操作系统及数据库简单说明)

--pg 性能调整相关

--内存

buffer cache 直接对磁盘进行操作的数据会缓存到buffer cache

page cache   文件系统中的数据则交给page cache进行缓存

--cache不自动回收,数据库需要内存时,cache可以很快被回收,如果没用到交换分区,可说明内存够用

-释放缓存

sync

echo 1 > /proc/sys/vm/drop_caches

--vmstat  虚拟内存、进程、cpu等整体情况

-r 当前队列中有几个进程在等待

-b  当前有多少个进程进入不可中断式睡眠状态

-swpd  已使用的交换分区的大小

-free  空闲内存大小

-buff 已使用的buffer大小

--cache 已使用的page cache大小

-si/so 从磁盘交换到swap分区和从swap分区交换的磁盘大小

-bi/bo 从磁盘读取和写入到磁盘的大小,单位blocks/s

-in 每秒被中断的进程数

-cs 每秒多少个cpu进程在进进出出

--iostat  监控磁盘输入输出

--mpstat cpu详细性能信息

--sar  默认保存28天,目录 /var/log/sa   修改 /etc/sysconfig/sysstat

--查看某一时间段

sar -q -f /var/log/sa/sa15 -s 22:00:00 -e 23:00:00

sar -q  #汇总cpu状况

sar -b  #汇总io状况

--linux I/O 调度

##查看当前支持的调度算法

dmesg | grep -i scheduler

--cfg 绝对公平调度算法 ,默认

--noop 电梯调度算法  适合ssd

--deadline  绝对保障算法

--查看当前磁盘sda的io调度算法

cat /sys/block/sda/queue/scheduler

--临时修改

echo noop > /sys/block/sda/queue/scheduler

##磁盘预读扇区

/sbin/blockdev --getra /dev/sda  #默认256,可设置16384或更大

/sbin/blockdev --setra 16384 /dev/sda

#或

echo 16384 /sys/block/sda/queue/read_ahead_kb

##禁用swap

swapoff -a

##启用

swapon -a

--透明大页,要关闭

cat /sys/kernel/mm/transparent_hugepage/enabled

echo never > /sys/kernel/mm/transparent_hugepage/enabled

##numa guanbi

numactl -hardware

--or

numastat

#可编辑 /etc/grub.conf 行末加numa=off禁用

##数据库方面

--统计信息

pg_stat_database

--缓存命中率,如果低于1,可尝试调整shared_buffers

select blks_hit::float/(blks_read + blks_hit) as cache_hit_ratio from pg_stat_database where datname=current_database();

--事务提交率,低于1,检查是否死锁或其他超时太多

select xact_commit::float/(xact_commit +xact_rollback) as successful_xact_ratio from pg_stat_database where datname=current_database();

--优化后建议执行以下语句,方面对比优化前后数据

pg_stat_reset()

--表级统计信息

pg_stat_user_tables

--索引使用率

select sum(idx_scan)/(sum(idx_scan) + sum(seq_scan)) as idx_scan_ratio from pg_stat_all_tables where schemaname='your_schema';

select relname,idx_scan::float/(idx_scan+seq_scan+1) as idx_scan_ratio from stat_all_tables where schemaname='your schema' order by idx_scan_ratio asc;

--语句级统计信息 通过pg_stat_statements ,postgres 日志、auto_explain 来获取

pg_stat_statements

--开启

shared_preload_libraries='pg_stat_statements'

pg_stat_statements.track=all

create extension pg_stat_statements;

--查询平均执行时间最长的3条查询

select calls,total_time/calls as avg_time,left(query,80) from pg_stat_statements order by 2 desc limit 3;

--查看执行计划 analyze可以得到真正执行计划

explain analyze select * from tb1;

--除了analyze选项,可以使用其他

explain (analyze on ,timing on,verbose on,buffers on) select * from tb1;

--session 级别 log_xxx_stat判断问题,使用的系统资源等,

set client_min_messages=log;

set log_parser_stats=on;

set log_planner_stats=on;

--or

set client_min_messages=log;

set log_parser_stats=off;

set log_planner_stats=off;

set log_statement_stats=on;

--重建索引

create unique index concurrently on mytb1 using btree(id);

--id 字段有两索引

select schemaname,relname,indexrelanme,pg_relation_size(indexrelid) as index_size,idx_scan,idx_tup_read,idx_tup_fetch from pg_stat_user_indexes where indexrelname in (select indexname from pg_indexes where schemaname='public' and tablename='mytb1');

--开启事务删除主机索引,同时将第二索引更新为主键约束

begin;

alter table mytb1 drop constraint mytb1_pkey;

alter table mytb1 add constraint mytb1_id_idx primary key using index mytb1_id_idx;

end;

--对于大规模,可通过pg_repack工具进行定时索引重建

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值