select * from pg_stat_activity;
select usename,client_addr,query from pg_stat_activity;
select distinct * from (select usename 用户名,client_addr 监听地址,count(1) over(partition by usename,client_addr) 连接数,count(1) over() 连接总数 from pg_stat_activity)a;
select query from pg_stat_activity where current_timestamp -query_start > interval '1 days';
select usename,client_addr,query,query_start,state_change from pg_stat_activity;
select usename,client_addr,query,query_start,state_change from pg_stat_activity where CLIENT_ADDR = '具体IP';
01. 实例状态
gs_om -t status
gs_om -t status --detail
02. 会话信息
select * from pg_stat_activity;
show max_active_statements;
select usename,pid,application_name,client_addr from pg_stat_activity order by usename,pid;
select pg_terminate_backent(pid);
03. 参数检查
show max_active_statements;
04. 修改参数
gs_guc reload -Z coordinator -N all -I all -c "max_active_statements=10"
gs_guc reload -Z datanode -N all -I all -c "max_active_statements=10"
05. 实例异常
当连接数据库出现缓慢、挂起等现象,需要进行诊断和分析,甚至可能需要重新启动数据库实例
06. 信息采集
通过采集系统的Hang信息,系统状态信息等,可以分析系统挂起的原因,间隔采样,可以用于对比变化,辅助分析。
gs_collector --begin-time="20180131 23:00" --end-time="20180201 20:00" -h host1
07. 清理运行日志
注意:请谨慎清理,确保所有清理的日志不影响未来的问题定位。
cd $GAUSSLOG
rm 日志名称
08. 停库:安全停库
如果数据库出现异常需要重新启动,可以通过示范命令等待用户业务结束后退出,以保证主备关系的实例数据一致
gs_om -t stop -m smart
09. 停库:强行停库
如果安全方式不能顺利关闭数据库,可以不等业务结束,直接退出集群。主备关系的实例数据可能不一致。
gs_om -t stop -m immediate
01. 查看系统日志和操作日志位置
echo $GAUSSLOG
02. 运行日志分析:数据库实例
在gsql客户端输入命令 “\set VERBOSITY verbose”进入verbose模式。verbose模式会显示详细的错误信息。在错误码中可以查询相关错误信息对应的处理办法。
03. 运行日志分析:集群类
通过查看cm日志进行集群运行分析
cd /GAUSSLOG/cm
01. 设置core文件生成的最大数目
core文件数超出所设置数目时,新生成的core文件将会覆盖旧的core文件。避免Gaussdb频繁异常和重启反复产生core文件快速占据磁盘空间。
gs_guc set -Z datanode -N all -I all -c "bbox_dump_count=4"
gs_guc set -Z coordinator -N all -I all -c "bbox_dump_count=4"
02. 设置core文件的生成路径
不设置时,Gaussdb将从 /proc/sys/kernel/core_pattern下读取路径。
如果路径不合法(不存在,不是一个目录或用户没有写权限),core文件将生成在数据库的data目录下
mkdir /corefiles
chmod 750 /_pathcorefiles
gs_guc set -Z datanode -N all -I all -c "bbox_dump_path='/corefiles'"
gs_guc set -Z coordinator -N all -I all -c "bbox_dump_path='/corefiles'"
03. 启用黑匣子日志(core文件)记录功能
开启收集core文件的功能对操作系统有如下影响:对性能有一定的影响,尤其是进程频繁异常时对性能影响更大。core文件会占用磁盘空间。
01. 查看所有表空间
\db
select oid,spcname from pg_tablespace;
select pg_tablespace_location(tablespace_oid);
02. 查看表占用的空间大小
select t_name,pg_size_pretty(pg_relation_size(t_name)) from (values('store_sales'),('date_dim'),('store')) as names1(t_name);
锁是数据库控制并发的核心手段,检查相关信息可以监控数据库的事务和运行状况。
01. 锁信息
查询数据库中的锁信息
select * from pg_locks;
查询等待锁的线程状态信息
select * from pg_thread_wait_status where wait_status = 'acquire lock';
02. 锁故障排查
数据库出现锁竞争和阻塞时,需要排查和处理锁定,必要时通过kill阻塞进程消除锁定
03. 查询阻塞会话
查询返回会话的ID、用户信息、查询状态、以及导致阻塞的表,模式信息
select w.query as waiting_query,w.pid as w_pid, w.usename as w_user,
l.query as locking_query,
l.pid as l_pid,
l.usename as l_user,
t.schemaname||'.'||t.relname as tablename
from pg_stat_activity w join pg_locks l1 on w.pid = l1.pid
and not l1.granted join pg_locks l2 on l1.relation =l2.relation
and l2.granted join pg_stat_activity l on l2.pid = l.pid join pg_stat_user_tables t on l1.relation = t.relid where w.waiting limit 1;
04. 杀阻塞会话
根据会话ID结束会话
select pg_terminate_backend(139834762084352);
05. 杀掉所有空闲进程
SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE STATE='idle';
查看数据库当前的会话、事务和语句的运行情况
01. 查询事务时间
查询线程的启动时间、事务启动时间、sql启动时间以及状态变更时间
select backend_start,xact_start,query_start,state_change from pg_stat_activity;
02. 查询系统中长时间运行的查询语句
查询后会按执行时间从长到短顺序返回语句列表,第一条就是当前系统用时最长的查询语句。
返回的结果中包含了系统调用的sql语句和用户执行的sql语句,请根据实际找到用户执行时间长的语句。
若当前系统较为繁忙,可以通过current_timestamp - query_start 大于某一阈值来查看过滤。
select query from pg_stat_activity where current_timestamp -query_start > interval '1 days';
03. 会话统计信息
查看当前服务器的会话计数信息
select count(*) from pg_stat_activity;
查询当前使用内存最多的会话信息
select * from pv_session_memory_detail() order by usedsize desc limit 10;
表、索引、分区、约束等是数据库的核心存储对象,其核心信息和对象维护的是DBA重要的日常工作。
01. 锁信息
查询数据库中的锁信息
select * from pg_locks;
查询等待锁的线程状态信息
select * from pg_thread_wait_status where wait_status = 'acquire lock';
02. 表结构查询
\d+ table_name
03. 表统计信息
查询最后的统计信息分析收集时间。统计信息影响执行计划,当sql执行异常时,需要重点分析统计信息。
select relid.schemaname,relname,last_analyze,analyze_count from pg_stat_all_tables where last_analyze is not null;
04. 统计信息收集,收集统计信息是一项复杂任务,需要详细设计
更新单表的统计信息
analyze tablename;
更新全库的统计信息
analyze;
05. 索引信息数据
\d+ index_name
查询叶块数和聚簇因子,聚簇因子过高接近于行数可能代表索引效率不高。
select * from pg_index where indrelid =(select oid from pg_class where relname ='table_name');
06. 索引定义查询
查询索引的建立语句
select * from pg_indexes where tablename ='table_name';
07. 分区对象查询
分区类型、数量,边界值等
select * from dba_part_tables;
selelct * from dba_tab_partitions;
08. 约束信息
select * from pg_constraint;
对sql进行持续关注和分析,在sql自诊断的辅助下优化sql的效率、性能。
01. sql自诊断
当前CN上正在执行的作业的warning信息。
select warning from gs_wim_session_statistics;
当前CN上历史执行的作业的warning信息。
select warning from gs_wim_session_history;
查看更久的历史作业warning信息
select warning from gs_wim_session_info;
02. 查看sql执行计划
只生成执行计划,不实际执行
explain select...
生成执行计划,并执行,显示执行的概要信息。显示中加入了实际的运行时间统计,包括在每个规划节点内部花掉的总时间(毫秒)和它实际返回的行数。
explain analyze select...
生成执行计划,并执行,显示执行期间的全部信息
explain performance select...
03. 统计类信息收集
建议定时任务执行统计信息,更新单个表的统计信息
analyze tablename;
更新全库的统计信息
analyze;
04. 增加plan hint协助调优
select /*+ */ * from t1,(select /*+ */ from t2) where 1=1;
检查数据库定时任务执行情况,确保后台任务正确执行,尤其关心统计信息收集等核心任务。
查询用户的定时任务(job)信息,确保任务在期望的时间执行成功,这是dba的重要工作之一。
查看当前用户的定时任务信息。
select job,dbname,log_user,start_date,last_date,this_date,next_date,broken,status,interval,failures,what from user_jobs;
查询所有用户的定时任务信息。
select job_id,dbname,log_user,start_date,last_satrt_date,this_run_date,next_run_date,interval,failure_count from pg_job;
01. 创建定时任务
创建测试表
create table test(id int,time date);
创建向表test插入数据的用户自定义存储过程
create or replace procdeure prc_job_1()
as
N_NUM integer :=1;
begin
for i in 1..1000 loop
insert into test values(i,sysdate);
end loop;
end;
/
创建定时任务执行存储过程,dbms_job.submit可以通过call或select调用。定时任务中要执行的sql语句,可以是一个或多个‘DML’,‘匿名块’,‘调用存储过程的语句’或3种混合的场景。
call dbms_job.submit('call public.prc_job_1();',sysdate,'interval "1 minute"',:a);
02. 启动定时任务
call dbms_job.broken(1,false);
03. 停止定时任务
call dbms_job.broken(1,true);
04. 删除定时任务
call dbms_job.remove(1);
备份
开启wal日志归档
python GaussRoach.py -t config --archive=true -p
执行备份,备份到NBU
python GaussRoach.py -t backup --master-port 6000 --media-destination samplepolicy --media-type NBU --metadata-destination /home/userA/metadata
执行备份,备份到磁盘
python GaussRoach.py -t backup --master-port 6000 --media-destination /home/userA/media --media-type Disk --metadata-destination /home/userA/metadata
关闭wal日志归档
python GaussRoach.py -t config --achive=falsh -p
说明:
开启wal日志归档是为了保证备份(或恢复)开始到结束期间,用户变更也能被完整备份。备份所使用的端口号仅需要设置为一个未被占用的端口即可
恢复
使用NBU上的备份恢复
python GaussRoach.py -t restore --clean --master-port 6000 --media-destination samplepolicy --media-type NBU --backup-key 20160121_190923 --metadata-destination /home/userA/metadata
使用磁盘上的备份恢复
python GaussRoach.py -t restore --clean --master-port 6000 --media-destination /home/userA/media --media-type Disk --backup-key 20160121_190548 --metadata-destination
检查各节点的${BIGDATA_HOME}/mppdb/.mppdbgs_profile文件中是否包含如下内容。如果没有包含,请增加。
export LD_LIBRARY_PATH="/usr/openv/lib":$LD_LIBRARY_PATH
执行备份
python GaussRoach.py -t backup --master-port 6000 --media-destination /home/userA/backup --media-type disk --agent-port 7000 --dbname postgres --tablename tbl_backup --metadata-destination /home/userA/metadata
或
python GaussRoach.py -t backup --master-port 6000 --media-destination samplepolicy --media-type disk --agent-port 7000 --logical --table-list /home/roack/bklist.txt --dbname postgres --metadata-destination /home/userA/metadata
恢复
python GaussRoach.py -t restore --master-port 6000 --media-destination /home/userA/backup --media-type Disk --agent-port 7000 --dbname postgres --tablename tbl_backup --backup-key 20160126_164639 --metadtata-destination /home/userA/metadata-destination /home/userA/metadata
或
python GaussRoach.py -t restore --master-port 6000 --media-destination /home/userA/media --media-type Disk --agent-port 7000 --logical --table-list /home/roach/blikst.txt --backup-key 20180605_185302 --dbname postgres --metadata-destination /home/userA/metadata
示例:标识将数据库human_resource下,hr和public两个模式中的所有数据以及对象定义导出且导出后的内容将保存在/home/omm/backup/MPPDB_backup.sql
gs_dump -U jack -W Bigdata@123 -f /home/omm/backup/MPPDB_backup.sql -p 25308 human_resource -n hr -n public -F d
gs_restore -U jack -W Bigdata@123 -f /home/omm/backup/MPPDB_backup.sql -p 25308 -d human_resource -n hr -n public -e -c
gs_dump -U jack -W Bigdata@123 -f /home/omm/backup/MPPDB_backup.tar -p 25308 human_resource -F -t
gs_restore -U jack -W Bigdata@123 -f /home/ommdbadmin/backup/MPPDB_backup.tar -p 25308 -d human_resource -F t
基本信息包括版本、容量检查等,定期检查数据库信息并登记在案是数据库生命周期的重要内容之一。
版本检查
select version();
容量检查
select pg_table_size('table_name');
select pg_database_size('database_name');
VM机的eth0,物理机的bond0
示例:删除浮动ip
ip addr delete 10.164.36.123/24 dev eth0:1
ip addr delete 10.164.36.123/24 dev bond0:1
示例:绑定浮动ip
ifconfig eth0:1 10.61.151.123/24
ifconfig bond00:1 10.61.151.123/24
客户端测试
ping 10.11.12.123
curl -kv 10.11.12.123:5432
telnet 10.11.12.123 5432
说明:是否为物理网络不通
服务端测试
netstat -anlp | grep 5432
说明:服务端进程是否正常
sudo /usr/sbin/arping -I bond0 -c 5 -U -s 10.58.14.133 -b 10.58.34.254
说明:服务端流量测试,虚拟机eth0或物理机bond0,-s指定ip ,-b指定网关
gsql -U 用户 -d 数据库 -W 密码 -h IP地址 -p 端口
说明:测试集群间是否可以跨服务器登录
服务端OS防火墙
systemctl stop firewalld.service
systemctl disable firewalld
systemctl status firewalld.service
说明:永久关闭OS防火墙