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天

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM