1、查看队列情况

SELECT * FROM gp_toolkit.gp_resqueue_status;

如果出现了资源占用大于1.1 e+11SQL,则可能存在不合理执行计划的SQL, 基本跑不出来, 库也会很卡。

2、查看用户归属的队列

select * from gp_toolkit.gp_resq_role ;
 
3、查看某账号下运行中sql
SELECT * from pg_stat_activity  where current_query <> '<IDLE>' and waiting ='f' and usename = 'etl_user';
所有账号都有权限查看。
Query_start字段就是SQL真正启动时间点
 
4、等待中sql
SELECT * from pg_stat_activity  where current_query <> '<IDLE>' and waiting ='t';
 
5、检查执行时间超长的SQL
执行如下SQL 检查是否有select  * from pg_stat_activity where current_query<>'<IDLE>' and query_start < now() - interval '10 mins';
 
6、终止sql
----终止sql的语句, 下语句的数字是procid,可以通过上一页的语句查到:
      select pg_cancel_backend(27334);
-----终止sql的同时终止会话。
      select pg_terminate_backend(27334);
超级账号才有终止权限, 如:super_user账号
      一定要在数据库里终止一个SQL或任务, 因为在BDI界面终止一个外部程序任务事实上SQL没有终止,还继续运行。
 
7、执行计划:explain  SQL
     执行SQL前用explain  SQL 查看执行计划
    如果执行计划存在针对很大的表做Broadcast Motion 或Nested Loop步骤则 不合理, 则尝试以下动作:
    执行收集表的统计信息语句:ANALYZE 表名; 
     一般analyze 一天的分区: ANALYZE 表名_1_prt_data_part_20150305;
     “_1_prt_”是数据库分区表名固定段。 “data_part_”是我们自动脚本里生成的分区名前缀。
      重新看执行计划,如果合理了,则代表源表缺少统计信息导致执行计划不合理。 只有在表的数据量发生大变化时或重来没收集过时需要做一次收集。
 
8、执行计划:explain  SQL
    ANALYZE完源表重新看执行计划,如果还不合理,执行一下set optimizer to on;  更换一个执行计划生成器。
    重新生成执行计划。如果合理了,则后续在在SQL前加上:set optimizer to on;  不要所有SQL加这个,因为该特性未发布。
    如果还不合理, 则需要优化SQL, 即把SQL由多张表关联拆开。
 
9、后台运行SQL, 免输入密码
    nohup psql -h 10.154.147.130 -d 'dbname=gpadmin user=etl_user password=etl_pppp' -f /home/bdiunivers/aa.sql -L /home/bdiunivers/aa.log &
   用psql 命令跑aa.sql文件,如果文件里有多个SQL, 想一个SQL报错后不往下跑, 则在aa.sql 文件的第一行加上下面内容, 行末没有分号       \set ON_ERROR_STOP
 
10、报内存不足
    sql可用内存不够大时,可以用以下方法临时加大。 如选择的表分区数很多可能会报内存不足,可以使用该方法。例如:
    SET statement_mem='500MB';
    SELECT * FROM my_big_table WHERE column='value' ORDER BY id limit 10;
    RESET statement_mem;
 
11、left  join 右表非常庞大
      如果以后业务场景中确实存在left join 右表非常庞大,并且关联字段重复值比较高,可以采取以下方式:
         1,按照关联字段进行数据打散
         2,在会话级别设置以下参数
              set max_statement_mem='8GB'
              set statement_mem='4GB'
              set gp_workfile_per_query=0
 
12、使用super_user创建外部表的过程:

a. 删除并重建err表。

drop table if exists  masadw .err_ext_表名;

CREATE TABLE masadw.err_ext_表名 (    cmdtime timestamp with time zone,    relname text,    filename text,    linenum integer,    bytenum integer,    errmsg text,    rawdata text,    rawbytes bytea) DISTRIBUTED RANDOMLY;

b.把err表修改owner为etl_user

ALTER TABLE masadw.err_ext_表名 OWNER TO etl_user;

c. 创建外部表:

drop EXTERNAL TABLE if exists masadw.ext_表名;

CREATE EXTERNAL TABLE masadw.ext_表名 (    time_id integer,    area_id integer,    grp_code character varying(50),    cust_id bigint,    usr_id bigint,    svc_code character varying(50)) LOCATION (    'gphdfs://hacluster/tmp/zht/NEW_表名.TXT') FORMAT 'text' (delimiter E'' null E'' escape E'OFF')ENCODING 'UTF8'LOG ERRORS INTO masadw.err_ext_表名 SEGMENT REJECT LIMIT 10 PERCENT;

d.把外部表修改owner为etl_user:

ALTER EXTERNAL TABLE masadw.ext_表名 OWNER TO etl_user;

 
 13、不要创建default分区
       不要创建default分区, 更不要把大量数据放到default分区, 因为default分区在每个sql都会扫描。
 
14、找出需要做vacuum的表
        select * from gp_toolkit.gp_bloat_diag ;
        这些表需要做空间回收操作
        一般vacumm 和analyze一起执行: vacuum analyze 表名
 
15、找出没有统计信息需要做ANALYZE的表
    select 'ANALYZE '||smischema||'.'||smitable||';' from gp_toolkit.gp_stats_missing where smisize = 'f' and smitable like '%_1_prt_%' and smitable not like 'err_%' and  smitable not like 'ext_%' and smitable like '%201503%' order by smitable limit 10;
      所有存储过程在最后增加GPDB. analyze_partition(表名, 日期)收集一个分区表信息。
 
16、经常检查数据库状态   gpstate -e
 
17、经常用nmon命令检查seg节点资源占用率
 
18、经常检查各机器/data目录 gpssh -f allhosts
 
19、经常检查各模式下表数量,总共不要超过10万 
select schemaname,count(*) from gp_tables group by schemaname order by 2 desc
 
 

GP DBA基本操作的更多相关文章

  1. 基于USB网卡适配器劫持DHCP Server嗅探Windows NTLM Hash密码

    catalogue . DHCP.WPAD工作过程 . python Responder . USB host/client adapter(USB Armory): 包含DHCP Server . ...

  2. MongoDB【第三篇】MongoDB基本操作

    MongoDB的基本操作包括文档的创建.删除.和更新 文档插入 1.插入 #查看当前都有哪些数据库 > show dbs; local 0.000GB tim 0.000GB #使用 tim数据 ...

  3. Mysql DBA 20天速成教程,DBA大纲

    Mysql DBA 20天速成教程 基本知识1.mysql的编译安装2.mysql 第3方存储引擎安装配置方法3.mysql 主流存储引擎(MyISAM/innodb/MEMORY)的特点4.字符串编 ...

  4. 走向DBA[MSSQL篇] 详解游标

    原文:走向DBA[MSSQL篇] 详解游标 前篇回顾:上一篇虫子介绍了一些不常用的数据过滤方式,本篇详细介绍下游标. 概念 简单点说游标的作用就是存储一个结果集,并根据语法将这个结果集的数据逐条处理. ...

  5. MySQL(一) -- MySQL学习路线、数据库的基础、关系型数据库、关键字说明、SQL、MySQL数据库、MySQL服务器对象、SQL的基本操作、库操作、表操作、数据操作、中文数据问题、 校对集问题、web乱码问题

    1 MySQL学习路线 基础阶段:MySQL数据库的基本操作(增删改查),以及一些高级操作(视图.触发器.函数.存储过程等). 优化阶段:如何提高数据库的效率,如索引,分表等. 部署阶段:如何搭建真实 ...

  6. Django--ORM基本操作

    一.字段 AutoField(Field) - int自增列,必须填入参数 primary_key=True BigAutoField(AutoField) - bigint自增列,必须填入参数 pr ...

  7. ORACLE数据库 DBA常用知识

    <常用命令参考> 个系统变量值 SQL> show user --显示当前连接用户 SQL> show error --显示错误 SQL> set heading off ...

  8. MYSQL基本操作(上)

    很久之前,就想做个Mysql的小结,毕竟数据库知识是软件研发的基本技能,这里话不多说,开始总结一波. 数据库基本概念 数据库为高效的存储和处理数据的介质(主要分为磁盘和内存两种),一般关系型数据库存储 ...

  9. linux的基本操作(mysql 的基本操作)

    Mysql 的基本操作 在前面两个章节中已经介绍过MySQL的安装了,但是光会安装还不够,还需要会一些基本的相关操作.当然了,关于MySQL的内容也是非常多的,只不过对于linux系统管理员来讲,一些 ...

随机推荐

  1. D. Powerful array 离线+莫队算法 给定n个数,m次查询;每次查询[l,r]的权值; 权值计算方法:区间某个数x的个数cnt,那么贡献为cnt*cnt*x; 所有贡献和即为该区间的值;

    D. Powerful array time limit per test seconds memory limit per test megabytes input standard input o ...

  2. HTML5实现端访问时禁止放大和缩小网页

    <title>html5禁止和移动.缩放网页</title><meta name="viewport" content="width=dev ...

  3. 接入qq登录功能出现的问题

    在调用qq授权的接口时,出现以上错误. 原因是: 打包的应用签名和第一次上传包的签名不一致造成的 解决方法: 第一种方法:用上次打包apk的keystore重新打包apk,使签名一致. 第二种方法:联 ...

  4. Cocoapod安装使用和常见问题

    1.cocoapod的按照,cocoapod是运行在ruby环境下的,在ruby环境的 ,像cocoapod这样的开源项目时放在放在rubygems服务器上面的,但国内访问https://rubyge ...

  5. poj 2125(最小割)

    题目链接:http://poj.org/problem?id=2125 思路:将最小点权覆盖转化为最小割模型,于是拆点建图,将点i拆成i,i+n,其中vs与i相连,边容量为w[i]-,i+n与vt相连 ...

  6. hadoop报错java.io.IOException: Bad connect ack with firstBadLink as 192.168.1.218:50010

    [root@linuxmain hadoop]# bin/hadoop jar hdfs3.jar com.dragon.test.CopyToHDFS Java HotSpot(TM) Client ...

  7. js实现还可输入多少个字

    // 还可输入的字数个数 function checkLength(obj, len) { var maxChars = len; if (obj.value.length <= maxChar ...

  8. GPU instancing

    参考 https://www.cnblogs.com/hont/p/7143626.html github地址 https://github.com/yingsz/instancing/ 补充2点: ...

  9. ShutIt:一个基于 Python 的 shell 自动化框架

    ShutIt是一个易于使用的基于shell的自动化框架.它对基于python的expect库(pexpect)进行了包装.你可以把它看作是“没有痛点的expect”.它可以通过pip进行安装. Hel ...

  10. unknown encoder libvpx

    brew install ffmpeg --with-libvpx or brew reinstall ffmpeg --with-libvpx