开发者学堂课程【PostgreSQL 实战进阶:PostgreSQL 性能优化和体系化运维(二)】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/112/detail/1907
PostgreSQL 性能优化和体系化运维(二)
内容介绍:
一、操作系统优化
二、数据库配置优化
三、日常操作
四、运维方案
三、日常操作:
下面学习数据库日常操作,比如查看这个数据库的版本 select 可以看到很详细PG的版本,然后它是基于什么平台,GCC 编译的,是什么时候创建的,64位,有很详细的信息。
查看一个数据库启动多久,用 select pg_postmaster_start_time();这个函数。
查看最后 load 配置文件的时间,select pg_conf_load_time();这个文件可以手工load。
查看显示数据库时区的,show timezone,都是亚洲上海的时间就够了。
查看还有哪些数据库psql -1,
查看当前用户,select user.select current_user.session_user,实际上他是个特殊的函数。
查看当前连接的数据库名称
select current_catalog,current_database();
查看当前客户端的 IP 及端口
select inet_dient__addr(),inet_dient_port();
查看当前数据库服务器的 IO 及端口
select inet_server_addr(),inet_server_port();
查询当前session的后台服务进程的pid
Select pq_backend_pid();
查看参数配置
Show shared_buffers
Select current_setting (‘shared_buffer’);
查看当前正在写的 WAL 文件
9X:select pg_xlogfile_name(pg_current_xlog_location());
>=10版本:select pg_walfile_name(pg_current_wal_lsn_());
查看当前 WAL 的 buffer 还有多少字节没有刷到磁盘中
9X:select pg_xlog_location_diff
(pg_current_xlog_insert_location(),pg_current_xlog_location());
>=10版本:select pg_wal_lsn_diff
(pg_current_wal_insert_lsn(),pg_current_wal_lsn());
查看数据库实例是否正在做基础备份
Select pg_is_in_backup(),pg_backup_start_time();
当前数据库实例是Hot Standby状态还是正常数据库状态
Select pg_is_in_recovery();
Pg_controldata lgrep state
查看数据库的大小
Select pg_database_size(‘osdba’);
查看表的大小
Select pg_size_pretty(pg_relation_size(‘ipdb2’));
Select pg_size_pretty(pg_total_size(‘ipdb2’));
查看某个表上索引的大小
Select pg_size_pretty(pg_indexes_size(‘ipdb2’));(ipdb2是表名)
查看表空间的大小
Select pg_size_pretty(pg_tablespace_size(‘pg_global’));
Select pg_size_pretty(pg_tablespace_size(‘default’));
查看表对应的数据文件
Select pg_relation_filepath(‘test01’);
让配置生效
Pg_ctl reload
Select pg_reload_conf();
切换 Log 日志文件
Select pg_rotate_logfile();
切换 WAL 日志文件
9.
x:select pg_switch_xlog();
10.
>=10版本:selectpg_switch_wal();
手工产生checkpoint
Checkpoint;
查询正在运行的SQL(也能看到等待事件)
Select*from pg_stat_activity;
取消一个长时间运行的查询SQL(非DML)
Select pg_cancel_backend(pid);
终止一个进行运行的SQL(包括DML)
Select pg_terminate_backend(pid);
杀掉除自己之外的连接(危险)
Select usename,datname,client_addr,pg_terminate_backend(pid)from pg_stat_activity where pid<>
Pg_backend_pid();
查看备库
Select*from pg_stat_relication;
暂停备库的wal日志应用
select pg_xlog_replay_pause();
继续备库的wal日志应用
pg_xlog_replay_resume();
检查备库的wal日志应用是否暂停了
pg_is_xlog_replay_paused();
在整个这个日常操作里面,在PG里面很多的命令,这些命令可以做很多这些事情。
四、运维方案:
制定运维整体方案,首先其实是要制定一个完善的运维的一个整体的方案,比如运维的环境的监控,日常数据库的管理要哪些内容,数据库备份与恢复性能监控,性能调用,环境里面经常监控 CPU 网络,这个里面以 为 C PU 过高,网络流量过大,然后磁盘空间监控,日常的时候,包括数据库的年龄监控,如果年龄超了很多,数据可能就停了,这个东西也是要经常看的,包括表和物化视图上索引的数量,以及数据库级的统计信息。日常数据库管理包括实例状态检查、PG 监听是否正常、WAL日志检查表空间检查、日志检查、备份有效性检查的方法。数据库备份与恢复包括备份策略设定、物理备份、逻辑备份、备份脚本、恢复脚本或恢复操作过程、如何防止误删除。性能监控包括检查等待事件、磁盘 IO 监控、TOP 10 SQL、数据库的每秒查询的行,插入的行,删除的行,更新的行。性能调优包括 OS 层面优化、PG 参数优化、SQL 优化、IO 优化、结构优化,如读写分离、分库分表。
在运维的工作里面,比如表、索引、物化视图这些空间的年龄的、Deadtuple,其中还有一个比较需要注意序列剩余次数的监控,还包括HA、备份,归档,备库延迟状态等等都需要检查。
网卡利用率,CPU 利用率,IO 利用率,内存利用率
慢 SQL 及当时的 analyze 执行计划
TOP SQL
数据库级别统计信息:回滚数,提交数,命中率,死锁次数,IO TIME,tuple DML次数
运维工具比较细。