zoukankan      html  css  js  c++  java
  • gp 日常使用脚本

    --查询某schema下所有函数的属主
    SELECT n.nspname AS "Schema",p.proname AS "Name",pg_catalog.pg_get_userbyid(p.proowner) AS "Owner" 
    FROM pg_catalog.pg_proc p 
    LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace 
    WHERE n.nspname='dwbi02' ORDER BY 2;
    
    --查询某schema下所有函数的详细信息
    SELECT n.nspname, p.proname, pg_catalog.pg_get_userbyid(p.proowner) AS "Owner",
     CASE WHEN proallargtypes IS NOT NULL THEN
        pg_catalog.array_to_string(ARRAY(
          SELECT
            CASE
              WHEN p.proargmodes[s.i] = 'i' THEN ''
              WHEN p.proargmodes[s.i] = 'o' THEN 'OUT '
              WHEN p.proargmodes[s.i] = 'b' THEN 'INOUT '
              WHEN p.proargmodes[s.i] = 'v' THEN 'VARIADIC '
            END ||
            CASE
              WHEN COALESCE(p.proargnames[s.i], '') = '' THEN ''
              ELSE p.proargnames[s.i] || ' ' 
            END ||
            pg_catalog.format_type(p.proallargtypes[s.i], NULL)
          FROM
            pg_catalog.generate_series(1, pg_catalog.array_upper(p.proallargtypes, 1)) AS s(i)
        ), ', ')
      ELSE
        pg_catalog.array_to_string(ARRAY(
          SELECT
            CASE
              WHEN COALESCE(p.proargnames[s.i+1], '') = '' THEN ''
              ELSE p.proargnames[s.i+1] || ' '
              END ||
            pg_catalog.format_type(p.proargtypes[s.i], NULL)
          FROM
            pg_catalog.generate_series(0, pg_catalog.array_upper(p.proargtypes, 1)) AS s(i)
        ), ', ')
      END AS "data_types" 
      FROM pg_catalog.pg_proc p 
      LEFT JOIN pg_catalog.pg_namespace n ON n.oid = p.pronamespace
      WHERE 1=1
          AND n.nspname <> 'pg_catalog'
          AND n.nspname <> 'information_schema'
          AND n.nspname = 'dmc' order by 2,3;
          
          
    --某schema下,表数量统计(正则过滤分区表子分区)
    SELECT count(*) FROM pg_tables WHERE tablename !~ '.*_1+_prt_.*$'AND schemaname = 'ctl';
    
    --查询一个库下各schema占用的空间
    SELECT pg_size_pretty(cast( sum(pg_total_relation_size( schemaname  || '.' || tablename)) AS bigint)), schemaname
    FROM pg_tables t INNER JOIN pg_namespace d ON t.schemaname=d.nspname  GROUP BY schemaname;
    
    SELECT pg_size_pretty(cast( sum(pg_total_relation_size( schemaname  || '.' || tablename)) AS bigint)), schemaname
    FROM pg_tables t INNER JOIN pg_namespace d ON t.schemaname=d.nspname  WHERE schemaname in ('mad','mad_ods','dwbi_ods','coupon_ods') GROUP BY schemaname;
    
    SELECT pg_size_pretty(cast( sum(pg_total_relation_size( schemaname  || '.' || tablename)) AS bigint)), schemaname
    FROM pg_tables t INNER JOIN pg_namespace d ON t.schemaname=d.nspname  WHERE schemaname = 'mad' GROUP BY schemaname;
    
    --统计某张表的分区数量
    SELECT p.schemaname, p.tablename, count(*) prt_count
    FROM pg_partitions p
    WHERE p.tablename='表名(不含schema名称)' 
    GROUP BY 1,2
    ORDER BY 2;
    
    --统计AO分区表数量(不含子表)
    SELECT count(*) FROM pg_class c 
    LEFT JOIN pg_namespace n 
    ON c.relnamespace = n.oid 
    WHERE relstorage IN ('c','a') 
    AND c.oid NOT IN(SELECT parchildrelid FROM pg_partition_rule);
    
    --统计AO表分区数量
    SELECT count(*) FROM pg_class c 
    LEFT JOIN pg_namespace n 
    ON c.relnamespace = n.oid 
    WHERE relstorage IN ('c','a') 
    AND c.oid IN(SELECT parchildrelid FROM pg_partition_rule);
    
    --查询分区数量大于100的AO表
    SELECT * FROM
    (
    SELECT n.nspname, c.relname, count(*) part_count FROM pg_class c 
    LEFT JOIN pg_namespace n 
    ON c.relnamespace = n.oid 
    INNER JOIN pg_partitions p
    ON p.tablename=c.relname
    AND p.schemaname=n.nspname 
    WHERE c.relstorage IN ('c','a') 
    AND c.oid NOT IN(SELECT parchildrelid FROM pg_partition_rule) 
    GROUP BY n.nspname, c.relname 
    ) a
    WHERE part_count >= 100
    ORDER BY 3 DESC;
    
    --统计分区表大小(不含索引)
    SELECT p.schemaname,p.tablename,sum(sotdsize) 
    FROM pg_partitions p LEFT JOIN  (SELECT autnspname, autrelname, sotdsize  FROM gp_toolkit.__gp_user_tables a, gp_toolkit.gp_size_of_table_disk b  
    WHERE a.autoid = b.sotdoid) b on p.partitionschemaname = b.autnspname AND p.partitiontablename = b.autrelname 
    GROUP BY 1,2 
    ORDER BY 1,2;
    
    --统计某分区表大小(含索引)
    SELECT p.schemaname, p.tablename, round(sum(pg_total_relation_size(p.schemaname || '.' || p.partitiontablename))/1024/1024) "MB"
    FROM pg_partitions p
    WHERE p.tablename='employee_daily' 
    GROUP BY 1,2
    ORDER BY 2;
    
    --统计某schema下各分区表大小(含索引)
    SELECT p.schemaname, p.tablename, round(sum(pg_total_relation_size(p.schemaname || '.' || p.partitiontablename))/1024/1024) "MB"
    FROM pg_partitions p
    WHERE p.schemaname ='mad' 
    GROUP BY 1,2 
    ORDER BY 2;
    
    --查询所有非分区表名
    SELECT t.schemaname, t.tablename 
    FROM pg_tables t, pg_partitions p 
    WHERE t.tablename <> p.tablename AND t.tablename <> p.partitiontablename AND t.schemaname='mad' 
    GROUP BY 1,2
    ORDER BY 2;
    
    --查询所有表名(不含分区表子表)
    SELECT n.nspname,c.relname 
    FROM pg_class c, pg_namespace n 
    WHERE c.relnamespace = n.oid AND n.nspname NOT LIKE 'pg_%' AND n.nspname NOT LIKE 'gp_%' 
    AND n.nspname <> 'information_schema' AND relkind IN('r') AND relstorage <> 'x' 
    AND c.oid NOT IN(SELECT parchildrelid FROM pg_partition_rule);
    
    --Greenplum查询争用(表锁)
    SELECT l.locktype, l.database, c.relname, l.relation, l.transactionid, l.pid, l.mode, l.granted,a.current_query 
    FROM pg_locks l, pg_class c, pg_stat_activity a WHERE l.relation=c.oid AND l.pid=a.procpid ORDER BY c.relname;
    
    --用函数杀SQL
    -------------------------------------
    --一般查询SQL
    SELECT pg_cancel_backend(procpid);
    
    --其他SQL
    SELECT pg_terminate_backend(procpid);
    -------------------------------------
    
    --查询某张表的数据分布均衡性
    SELECT gp_segment_id,count(*) FROM schemaname.tablename GROUP BY gp_segment_id ORDER BY count(*) DESC;
    
    --查询数据分布均匀性
    SELECT * FROM gp_toolkit.gp_skew_idle_fractions; --siffraction字段值大于0.1的需要重新选择分布键
    
    --保证全库统计信息是最新的情况下,查询表膨胀情况
    SELECT * FROM gp_toolkit.gp_bloat_diag; --bdidiag字段内容显示膨胀程度
    
    --查询用户情况
    SELECT rolname,rolsuper,rolinherit,rolcreaterole,rolcanlogin,rolconnlimit,rolresqueue,oid FROM pg_roles ORDER BY 8;
    
    --查询所有外部表
    SELECT n.nspname,c.relname 
    FROM pg_class c, pg_namespace n 
    WHERE c.relnamespace = n.oid AND n.nspname NOT LIKE 'pg_%' AND n.nspname NOT LIKE 'gp_%' 
    AND n.nspname <> 'information_schema' AND relkind IN('r') AND relstorage = 'x' 
    AND c.oid NOT IN(SELECT parchildrelid FROM pg_partition_rule);
    
    --重组表 消除膨胀
    d+ dwbi01_ods.boh__bohrscsales
    ALTER TABLE dwbi01_ods.boh__bohrscsales SET WITH (REORGANIZE=TRUE) DISTRIBUTED RANDOMLY;
    ALTER TABLE dwbi01_ods.boh__bohrscsales SET WITH (REORGANIZE=TRUE) DISTRIBUTED BY (transaction_code);
    ANALYZE dwbi01_ods.boh__bohrscsales;
    
    --检测字段是否适合用作分布键
    select COUNT(bizdate), gp_segment_id from dwbi01_ods.boh__bohrscsales group by 2;
    
    --查询角色配置情况(使用资源组时)
    SELECT rolname, rolsuper, rolinherit, rolcreaterole, rolcanlogin, rsgname FROM pg_roles, pg_resgroup WHERE pg_roles.rolresgroup=pg_resgroup.oid;
    
    
    --查询膨胀率大于20的AO表
    SELECT nspname, relname, AVG(percent_hidden)
    FROM
    (
       SELECT n.nspname, c.relname, (gp_toolkit.__gp_aovisimap_compaction_info(c.oid)).percent_hidden percent_hidden
       FROM pg_class c, pg_namespace n
       WHERE c.relnamespace = n.oid
         AND relstorage IN ('c','a')
         AND c.oid NOT IN(SELECT parchildrelid FROM pg_partition_rule)
    ) t
    WHERE t.percent_hidden > 20
    GROUP BY nspname, relname
    ORDER BY 3 DESC;
    
    --查询溢出文件大小(详细)
    select * from gp_toolkit.gp_workfile_entries;
    
    --查询溢出文件大小
    select * from gp_toolkit.gp_workfile_usage_per_query;
    
    --查询每个Segment上的溢出文件大小
    select * from gp_toolkit.gp_workfile_usage_per_segment;
    
    --查询表的分布键
    SELECT att.nspname,att.relname,string_agg (a.attname, ',') attby 
    FROM 
    (
     SELECT c.oid,n.nspname,c.relname,regexp_split_to_table (array_to_string (d.attrnums, ','),',')::int as attnu
     FROM gp_distribution_policy d 
     LEFT JOIN pg_class c ON c.oid = d.localoid 
     LEFT JOIN pg_namespace n ON n.oid = c.relnamespace  
     WHERE c.oid = 'ods.oracletest'::regclass
    ) att
    LEFT JOIN pg_attribute a ON a.attrelid = att.oid
    WHERE att.attnu = a.attnum
    GROUP BY 1,2;
    
    --查询前20张大表
    SELECT tabs.nspname AS schema_name,
           COALESCE(parts.tablename, tabs.relname) AS table_name,
           ROUND(SUM(sotaidtablesize) / 1024 / 1024, 3) AS table_MB,
           ROUND(SUM(sotaidtablesize) / 1024 / 1024 / 1024, 3) AS table_GB,
           ROUND(SUM(sotaididxsize) / 1024 / 1024 / 1024, 3) AS index_GB,
           ROUND(SUM(sotaididxsize) / 1024 / 1024, 3) AS index_MB
    FROM gp_toolkit.gp_size_of_table_and_indexes_disk sotd,
        (
        SELECT c.oid, c.relname, n.nspname
        FROM pg_class c, pg_namespace n
        WHERE n.oid = c.relnamespace
        AND c.relname NOT LIKE '%_err'
        ) tabs
    LEFT JOIN pg_partitions parts 
    ON tabs.nspname = parts.schemaname
    AND tabs.relname = parts.partitiontablename
    WHERE sotd .sotaidoid = tabs.oid
    GROUP BY tabs.nspname, COALESCE(parts.tablename, tabs.relname)
    ORDER BY 4 DESC
    LIMIT 20;
    
    --资源队列属性视图
    SELECT * FROM pg_catalog.pg_resqueue_attributes;
    
    
    
    --查询Filespace和Locating
    SELECT a.dbid,a.content,a.role,a.port,a.hostname,b.fsname,c.fselocation FROM gp_segment_configuration a,pg_filespace b,pg_filespace_entry c WHERE a.dbid=c.fsedbid AND b.oid=c.fsefsoid ORDER BY 2,6;
    
    --日期计算:
    riqi::date + interval '1 month' --"riqi"增加1月
    riqi::date - interval '1 day'   --"riqi"减去1天
  • 相关阅读:
    redis 实例
    redis 常用命令
    redis sets类型及操作
    简单说说PHP优化那些事
    C# IEnumerable与IQueryable ,IEnumerable与IList ,LINQ理解Var和IEnumerable
    全文搜索引擎 elasticsearch.net
    .net 异步
    并行开发 8.用VS性能向导解剖你的程序
    并行开发 7.简要分析任务与线程池
    并行开发 6.异步编程模型
  • 原文地址:https://www.cnblogs.com/kingle-study/p/12532162.html
Copyright © 2011-2022 走看看