gaussdb 日常运维命令总结【01】

1. 确认数据库连接情况(用户流量)

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';

2. 确认集群和数据库是否处于正常运行状态,可对外提供数据服务

01. 实例状态

  • 查询返回集群状态,正常状态应为Normal,Balanced为Yes
gs_om -t status
  • 详细查看集群个节点上的实例进程状态
gs_om -t status --detail

02. 会话信息

  • 查询数据库当前会话情况
select * from pg_stat_activity;
  • 当前CN会话数和允许的最高连接会话数量
show max_active_statements;
  • 当前CN的数据库连接数,以用户和线程ID分组
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

3. 检查日志信息

01. 查看系统日志和操作日志位置

echo $GAUSSLOG

02. 运行日志分析:数据库实例
在gsql客户端输入命令 “\set VERBOSITY verbose”进入verbose模式。verbose模式会显示详细的错误信息。在错误码中可以查询相关错误信息对应的处理办法。

03. 运行日志分析:集群类
通过查看cm日志进行集群运行分析

cd /GAUSSLOG/cm

4. 黑匣子日志

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文件会占用磁盘空间。

5. 检查空间信息

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);

6. 锁信息检查

锁是数据库控制并发的核心手段,检查相关信息可以监控数据库的事务和运行状况。

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'; 

7. 运行数据统计

查看数据库当前的会话、事务和语句的运行情况

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;

8. 检查对象

表、索引、分区、约束等是数据库的核心存储对象,其核心信息和对象维护的是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;

09. sql检查和调优

对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;
  • 当GUC参数enable_resource_record 为on时,GS_WLM_SESSION_HISTORY视图中
    的记录每隔3分钟被转储到系统表GS_WLM_SESSION_INFO中一次,同时
    GS_WLM_SESSION_HISTORY视图中的记录被删除;
  • 当GUC参数enable_resource_record 为off时,记录在GS_WLM_SESSION_HISTORY视图中的存留时间达到超期时间(超期时间为3分钟)后会被删除。

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;

10. 检查定时任务

检查数据库定时任务执行情况,确保后台任务正确执行,尤其关心统计信息收集等核心任务。
查询用户的定时任务(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);

11. 整集群备份恢复

备份
开启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

12. 单表或多表备份恢复

检查各节点的${BIGDATA_HOME}/mppdb/.mppdbgs_profile文件中是否包含如下内容。如果没有包含,请增加。

export LD_LIBRARY_PATH="/usr/openv/lib":$LD_LIBRARY_PATH

执行备份

  • 单表备份直接使用–tablename tbl_backup;
  • 多表备份使用–logical --table-list /home/roack/bklist.txt
  • bklist.txt中存储着表名。示例中为磁盘备份,要备份到NBU,请使用–media-type NBU,端口指定为未被占用的端口即可。
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

13. 用户模式备份恢复

示例:标识将数据库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

14. 数据库备份和恢复

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

15. 检查基本信息

基本信息包括版本、容量检查等,定期检查数据库信息并登记在案是数据库生命周期的重要内容之一。

版本检查

select version();

容量检查

select pg_table_size('table_name');
select pg_database_size('database_name');

16. 挂载卸载浮动

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

17. 网络相关

客户端测试

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防火墙

你可能感兴趣的:(GaussDB)