1. 程式人生 > >GreenPlum之日常SQL指令碼筆記(二)

GreenPlum之日常SQL指令碼筆記(二)

1.檢視資料庫中大於100MB的表的傾斜情況

(資料傾斜率公式:最大子節點資料量/平均節點資料量。為避免整張表的資料量為空,同時對結果的影響很小,在平均節點資料量基礎上加上一個很小的值)

SELECT table_name,max_div_avg,pg_size_pretty(total_size) table_size FROM (
SELECT table_name,
MAX(size)/(AVG(size)+0.001) AS max_div_avg,
CAST(SUM(size) AS BIGINT) total_size
FROM
(SELECT gp_segment_id,
oid::regclass table_name,
pg_relation_size(oid) size
FROM gp_dist_random('pg_class')
WHERE relkind='r'
AND relstorage IN ('a','h')) t
GROUP BY table_name)tab WHERE total_size >= 104857600
ORDER BY total_size DESC;

2.佇列限制,執行和等待查詢的數量:

select * from pg_resqueue_status 

3.檢視role分配的resource queue

SELECT rolname, rsqname FROM pg_roles, pg_resqueue WHERE pg_roles.rolresqueue=pg_resqueue.oid;

4.查詢所有的resource queue的當前活動sql 

 SELECT usename, rsqname, locktype, objid, transaction,
 pid, mode, granted, waiting
 FROM pg_stat_activity, pg_resqueue, pg_locks
 WHERE pg_stat_activity.procpid=pg_locks.pid
 AND pg_locks.objid=pg_resqueue.oid;

5.各主、映象節點存放的檔案系統路徑

select * from pg_filespace_entry;

6.檢視資料庫空間大小

SELECT *,pg_size_pretty(sodddatsize) dbsize FROM gp_toolkit.gp_size_of_database ORDER BY sodddatsize desc;

7.檢視活動語句的優先順序

select *from gp_toolkit.gp_resq_priority_statement;
8.檢視鎖資訊
SELECT locktype, database, c.relname, l.relation, l.transactionid, l.transaction, 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; 

9.修改某個資料庫為只讀狀態(要求管理員許可權)

alter database mp_mvt set default_transaction_read_only= on ;

10.檢視哪些節點掛了

select *from gp_segment_configuration where status = 'd';

11.當前資料庫使用狀態

select * from pg_stat_database;

12.檢視GP對應的PostgreSQL版本資訊

SELECT VERSION();


/*
部分GP優化總結:

not in==》改用left join去重後的表關聯來實現

cost:返回第一行記錄前的啟動時間,和返回所有記錄的總時間(以磁碟頁面存取為單位計量)
rows:根據統計資訊估計SQL返回結果集的行數
width:返回的結果集的每一行的長度,這個長度值是根據pg_statistic表中的統計資訊來計算的

hash join: 先對其中一張關聯的表計算hash值,在記憶體中用一個散列表儲存,然後對另外一張表進行全表掃描,之後將每一行與這個散列表進行關聯。
nestedloop:關聯的兩張表中的資料量比較小的表進行廣播,如笛卡爾積:select * fromtest1,test2
merge join:將兩張表按照關聯鍵進行排序,然後按照歸併排序的方式將資料進行關聯,效率比hash join差。full outer join只能採用merge join來實現。

雜湊關聯 - 用關聯欄位做雜湊鍵,對小表建立雜湊表。然後掃描大表,計算大表每行關聯欄位的雜湊鍵,從雜湊表中查詢雜湊值相同的行。通常雜湊關聯是速度最快的關聯方式。解釋計劃中的Hash Cond是關聯欄位。
巢狀迴圈 - 遍歷大資料集,對其每一行,掃描小資料集,並找到匹配的行。巢狀迴圈關聯需要廣播一個表的資料,以便另一個表的資料可以和該表的每一行進行比較。對於小表或者使用索引的表效能良好。也用於笛卡爾關聯和範圍關聯。對大表使用巢狀關聯效能不佳。如果查詢節點使用巢狀迴圈關聯操作符,則檢查SQL,確保結果是期望的。設定配置引數enable_nestloop 為 OFF (預設)以優先使用雜湊關聯。
合併關聯 - 對兩個資料集排序,然後合併。合併關聯對已經排序的資料效能很好,但是較少使用。如要使用合併關聯,設定 enable_mergejoin 為 ON。

關聯鍵強制型別轉換 
一般,表按照指定的分佈鍵作hash分部。如果兩個表按照id:intege、id:numericr分佈,關聯時,需要有一個表id作強制型別轉化,因為不同型別的hash值不一樣,因而導致資料重分佈。
關聯鍵與分部鍵不一致
group by、開窗函式、grouping sets會引發重分佈

1、批量資料處理後,無論成功與否,都應該進行vaccumanalyze <table_name>.
 
2、對於大表的DISTINCT操作,請用 GROUPBY操作進行替代
 
3、對於大表的UNION操作,請用UNIONALL 加 group by進行改寫
 
4、巢狀查詢操作,儘量改寫成連線查詢操作
 
5、大表更新操作,儘量通過外連線+插入+truncate進行替代
 
6、大表刪除操作,儘量通過外連線+插入+truncate進行替代
 
7、儘量避免進行儲存過程函式巢狀導致鎖衝突,考慮使用其它語言進行總體排程,比如shell,Java,c等。
 
8、儘量避免在資料庫中使用序列,遊標, 迴圈,考慮對資料進行整體操作。
 
9、避免高度頻繁的建表刪表操作,容易造成字典破碎和字典鎖的問題,因此可以通過臨時表和其它語言方式替代。
 
11、檢查大表的hash鍵定義是否可以保證每個segment儲存均勻,資料處理均勻,以及大表連線操作過程中可以儘量避免motion操作。從目前業務看,可以考慮客戶ID, 電話號碼作為首選的hash鍵,然後進行檢查。
 
12、為了加快開發進度,減少開發時的彼此影響,建議每個開發人員裝一個gp虛擬機器,相關表放入少量記錄,進行單步測試。通過單步測試後,統一提交到測試伺服器上進行聯合測試和壓力測試。
 
13、執行較大操作時,不建議使用pgadmin完成操作,建議寫成shell指令碼在後臺進行測試。避免頻繁不正常中斷操作,對整個開發產生影響
 
14、儘量避免不正常中斷操作,如需不正常中斷操作,請使用函式pg_cancel_backend函式,並耐心等待3~5分鐘,再繼續相關操作,避免造成資料字典破壞。

聚合函式太多:
一條SQL中聚合函式太多,而且可能由於統計資訊不夠詳細或者SQL太負責,錯選hashaggregate來執行,導致記憶體不足。解決方法:
拆分成多個SQL來執行,減少hashaggregate使用的記憶體執行enable_hashagg=off,把hashaggregate引數關掉,強制不採用。將會採用groupaggregate,這樣排序時間會長一些,但是記憶體可控,建議採用這種方式比較簡單。

資源佇列:
資料寫入、查詢分別使用不同的使用者,GP建立使用者時為不同使用者指定不同的資源佇列。

其它優化技巧:
用group by對distinct改寫,因為DISTINCT要進行排序操作用UNION ALL加GROUP BY的方式對UNION改寫儘量使用GREENPLUM自身提供的聚合函式和視窗函式去完成一些複雜的分析
*/






相關推薦

GreenPlum日常SQL指令碼筆記()

1.檢視資料庫中大於100MB的表的傾斜情況 (資料傾斜率公式:最大子節點資料量/平均節點資料量。為避免整張表的資料量為空,同時對結果的影響很小,在平均節點資料量基礎上加上一個很小的值) SELECT table_name,max_div_avg,pg_size_pret

GreenPlum日常SQL指令碼筆記(一)

--1.指定月份總共多少天 SELECT EXTRACT(DAY FROM CAST('2017-08-01' AS DATE) + INTERVAL '1 month' - INTERVAL '1

資料結構與演算法美專欄學習筆記-叉樹基礎(上)

樹 節點的定義 樹中的元素稱之為節點 高度的定義 節點的高度:節點到葉子節點的最長路徑 樹的高度:跟節點的高度 深度的定義 根節點到這個節點所經歷的邊的個數 層的定義 節點的深度+1   二叉樹 滿二叉樹 除了葉子結點外每個節點都有左右兩個子節點 完全二叉樹 葉子結

資料結構與演算法美專欄學習筆記-叉樹基礎(下)

二叉查詢樹 Binary Search Tree  二叉查詢樹的定義 二叉查詢樹又稱二叉搜尋樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的節點的值都大於這個節點的值。 二叉查詢樹的查詢操作 二叉樹類、節點類以及查詢方法的程式碼實現

數據結構與算法美專欄學習筆記-叉樹基礎(下)

binary 特性 child 數據大小 del delet 動態擴容 eve 怎麽 二叉查找樹 Binary Search Tree 二叉查找樹的定義 二叉查找樹又稱二叉搜索樹。其要求在二叉樹中的任意一個節點,其左子樹中的每個節點的值,都要小於這個節點的值,而右子樹的

SQL學習筆記|

高階SQL語句: TOP:用於返回規定要反回的記錄數目。對於擁有大量資料的大型表實用。 註釋:並非所用的資料庫都支援Top語句。 SQL Server 的語法: SELECT TOP  數字|百分比  列名 FROM 表名 MySQL和Oracle的語法: MyS

C#使用技巧呼叫JS指令碼方法

在上篇 C#使用技巧之呼叫JS指令碼方法一 中向大家介紹了C#呼叫js檔案中的js方法,今天給大家介紹另一種呼叫方法: 1、建立WinForm專案。 2、在From1上增加一個文字框一個按鈕。 3、進入Form1.cs編碼後臺程式碼。 Form1.cs程式碼如下: 1 private void b

關於產品的一些思考——(四十)網易有道雲筆記協同版

mil 新版本 strong dsm article 思考 post 有道 就會 ————————————————————2014.07.17———————————————————— 先前的使用體驗,補上。 在使用協同版的時候。一個筆記僅僅要點擊了編輯。就會生

sql server 性能優化和日常管理維護 筆記

sel .text reads where 導入 語句 data offset file 1.將sqlserver Profile收集到的trace 比如 duration >5000ms 的trace 文件 導入到sample 表分析或者用查詢優化器顧問分析

node.js學習筆記版本問題

nodejs targe tle 下一個 .cn blank 網站 mage 功能 一、版本說明 進入node.js官網https://nodejs.org/en/download/ 點擊上面的【All download options】進入到所有下載列表的地址 下載地

Java基礎學習筆記十三 Java核心語法反射

負責 目錄 boolean tostring 筆記 str 編譯 三種 進制 類加載器 類的加載 當程序要使用某個類時,如果該類還未被加載到內存中,則系統會通過加載,鏈接,初始化三步來實現對這個類進行初始化。 加載就是指將class文件讀入內存,並為之創建一個Clas

Oracle學習筆記PL/SQL編程

.cn 數據操作 dmi int 直接 字節 sql編程 gin number SQL(Structure Query Language)的含義是結構化查詢語句,最早由Boyce和Chambedin在1974年提出,稱為SEQUEL語言。1976年

網絡安全基礎筆記(傳輸層安全)

一個 keys 字符串交換 web安全 恢復 xinit images 流量 分享 web安全威脅 web流量安全方法 SSL 兩層協議組成。會話通過握手協議創建。 會話狀態:會話標識符、對等證書、壓縮方法、密碼規格、主密鑰(C/S共享的48字節的會話密鑰)、可

小程序學習筆記:頁面文件詳解 .json文件

fresh 小程序 整體 屬性 spa hit rbac style mdi 頁面配置文件—— pageName.json 每一個小程序頁面可以使用.json文件來對本頁面的窗口表現進行配置,頁面中配置項會覆蓋 app.json 的 window 中相同的配置

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記銘文升級版

.get frame 結果 取數據 lena echarts object 原理 四種 銘文一級: Spring Boot整合Echarts動態獲取HBase的數據1) 動態的傳遞進去當天的時間 a) 在代碼中寫死 b) 讓你查詢昨天的、前天的咋辦? 在頁面中放一個時間插

【慕課網實戰】Spark Streaming實時流處理項目實戰筆記十一銘文升級版

win7 小時 其他 har safari 北京 web 連接 rim 銘文一級: DataV功能說明1)點擊量分省排名/運營商訪問占比 Spark SQL項目實戰課程: 通過IP就能解析到省份、城市、運營商 2)瀏覽器訪問占比/操作系統占比 Hadoop項目:userAg

《構建法》讀書筆記:第一、、十六章

信息系統 做到 而是 需要 根據 style 成本 讀書 找到 這周看了鄒欣老師《構建之法》的1,2,16章,獲益匪淺。這本書寫得妙趣橫生,用阿超小飛幾個人的生活場景和幽默的比喻幫我理解著軟件工程的相關概念,讓我對軟件工程有了初步的了解:原來開發軟件並不是我們想的

《構建法》第一、、十六章閱讀筆記

gpo 技術 天都 出現問題 語言 出現 私有 .cn 概念 第一章 問題一:1.2.4軟件工程的目標--創造"足夠好"的軟件 什麽是好軟件? 原文1.一些同學認為,所謂好軟件,就是軟件沒有Bug,所謂軟件工程,就是把軟件中的Bug都

學習筆記T-SQL插入數據INSERT語法和數據庫編程實戰技巧[圖]

INSERT 數據庫 IT 編程 學習 一直以來就有寫博客的習慣,記錄一下學習心得、生活點滴等等,感覺也蠻好的,去年開始萌生了建立一個讀書和文學博客的想法,於是就開始實施了,中途也遇到不少難題,不過還好,都逐漸解決了,雖然我在技術方面有欠缺,但好在有同學們幫忙。 今天想和大家分享的學習筆記

Java學習筆記十一:Java面向對象的三大特性繼承

類構造 接下來 多重 通過 prot 圖片 等級 ++ class Java面向對象的三大特性之繼承 一:繼承的概念;   繼承是java面向對象編程技術的一塊基石,因為它允許創建分等級層次的類。   繼承就是子類繼承父類的特征和行為,使得子類對象(實例)具有父