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. PhpMyAdmin 配置文件现在需要一个短语密码的解决方法

    新版本的PhpMyAdmin 增强了安全性,需要在配置文件设置一个短语密码.否则进入之后会有“配置文件现在需要一个短语密码.”的红色警叹提示. 解决方法: 1.将 phpMyAdmin/librari ...

  2. C#网络编程系列文章(五)之Socket实现异步UDPserver

    原创性声明 本文作者:小竹zz 本文地址http://blog.csdn.net/zhujunxxxxx/article/details/44258719 转载请注明出处 文章系列文件夹 C#网络编程 ...

  3. node.js 入门

    什么是Node.js?还服务器端javascript?对于这个概念我在这篇文章不做解释,可以自己去搜索了解下,服务器端js不是新技术,只是最近的node.js的火爆让他爆发了,我会在以后的文章里解释什 ...

  4. 求出10000以内所有的完全数-python

    题目: 如何用python去求出下一个(大于28的)完全数? (求出10000以内所有的完全数) 分析: 如果一个数恰好等于它的因子之和,则称该数为"完全数".各个小于它的约数(真 ...

  5. js 的函数参数的默认值问题

    js函数参数设置默认值   php有个很方便的用法是在定义函数时可以直接给参数设默认值,如: function simue ($a=1,$b=2){ return $a+$b; } echo simu ...

  6. Python数据驱动ddt

    import ddtimport unittest """ddt模块包含了一个类的装饰器ddt和两个方法的装饰器: data:包含多个你想要传给测试用例的参数: file ...

  7. HDU4781(2013成都站A题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4781 题目大意:给你n个点m条边,要求你构造一个符合条件的有向联通图(若无法构造输出-1,否则输出任意 ...

  8. 从ELK到EFK

    https://my.oschina.net/itshare/blog/775466 http://blog.51cto.com/467754239/1700828 日志系统 日志就是程序产生的,遵循 ...

  9. MongoDB实践-自定义ASP.NET Session Store

    Session由来 由于HTTP协议是无状态的,客户端与服务器端进行“请求-响应”操作后,建立的连接就释放了,服务器端根本不知道刚才是哪个客户端访问的.但是有些场景是需要知道客户端的状态的,最典型的就 ...

  10. Nginx 解决WebSocket TCP 转发问题

    背景:   IM 即时通讯时候  , 前期我用的是IP 没什么问题,当然上线肯定要搞个域名搞搞了! 那么问题来了------>Nginx  我按照原先那样配置时候不行了, 连接不了. 解决方法: ...