本文主要分爲三部分:html
數據庫通常都有緩存,因此咱們爲了測試查詢性能,須要將緩存清除。linux
中止數據庫並不能清空緩存,由於緩存是由操做系統建立的,通常只有重啓操做系統能夠徹底清空.
參考思路以下:git
#!/usr/bin/sudo bash gpstop -r sync //清空高速緩存前嘗試將數據刷新至磁盤 //釋放linux內存 echo 1 > /proc/sys/vm/drop_caches echo 2 > /proc/sys/vm/drop_caches echo 3 > /proc/sys/vm/drop_caches gpstart
新一代Greenplum監控管理平臺Pivotal Greenplum Command Center (GPCC)。github
實際使用過程當中發現對於6-8秒的查詢(單表億級數據),GPCC反應比較慢,CPU、IO等信息爲0,目前擬採用其餘工具,實時監控CPU、內存、IO、網絡等信息。redis
http://www.javashuo.com/article/p-mynyvdxx-eh.htmlsql
GPDB 有一個特有的算子:移動( motion )。移動操做涉及到查詢處理期間在 Segment 之間移動數據。motion 分爲廣播( broadcast )、重分佈( redistribute motion )、Gather motion。正是 motion 算子將查詢計劃分割爲一個個 slice ,上一層 slice 對應的進程會讀取下一層各個 slice 進程廣播或重分佈的數據,而後進行計算。數據庫
每個廣播或重分佈或gather會產生一個slice。每個切片在每一個數據節點會對應發起一個進程來處理該slice負責的數據。SQL中要控制切片的數量,若是太多,應適當將sql拆分,避免因爲進程太多,給數據庫、機器帶來太多的負擔,也容易致使sql失效。緩存
Gather motion的做用就在於將每一個節點上面的中間結果集中到主節點上面。bash
總的思路服務器
一、表字段設計
如上面例子所示,優化某些字段的設計,以提升性能
二、表存儲方式
Heap 或 Append-Only存儲:GP默認使用堆表。堆表最好用在小表,如:維表(初始化後常常更新)。Append-Only表不能update和delete。通常用來作批量數據導入。 不建議單行插入。
多列查詢請求
若數據須要頻繁地更新或者插入,則使用行存儲。 若須要同時訪問一個表的不少字段,則使用行存儲。 對於通用或者混合型業務,建議使用行存儲。 若查詢訪問的字段數目較少,或者僅在少許字段上進行聚合操做,則使用列存儲。 若僅經常修改表的某一字段而不修改其餘字段,則使用列存儲。
三、壓縮
對於大AO表和分區表使用壓縮,以提升系統I/O。 在字段級別配置壓縮。 考慮壓縮比和壓縮性能之間的平衡。
壓縮的性能取決於硬件、查詢調優設置、其它因素。
四、列存儲
列存裏面能夠啓動壓縮。
只適合append-only表。
五、索引
高基數的列(惟一值多)
通常來講,在Greenplum數據庫中索引不是必需的。 對於高基數的列存儲表,若是須要遍歷且查詢選擇性較高,則建立單列索引。 頻繁更新的列不要創建索引。 在加載大量數據以前刪除索引,加載結束後再從新建立索引。 優先使用 B 樹索引。 不要爲須要頻繁更新的字段建立位圖索引。 不要爲惟一性字段、基數很是高或者很是低的字段建立位圖索引。 不要爲事務性負載建立位圖索引。 通常來講不要索引分區表。若是須要創建索引,則選擇與分區鍵不一樣的字段。
可優化部分小結果集查詢。
六、分佈鍵
七、 分組擴展
Greenplum數據庫的GROUP BY擴展能夠執行某些經常使用的計算,且比應用程序或者存儲過程效率高。
GROUP BY ROLLUP(col1, col2, col3) GROUP BY CUBE(col1, col2, col3) GROUP BY GROUPING SETS((col1, col2), (col1, col3))
八、分區
黃金法則
目前Greenplum支持LIST和RANGE兩種分區類型。
分區的目的是儘量的縮小QUERY須要掃描的數據量,所以必須和查詢條件相關聯。
只爲大表設置分區,不要爲小表設置分區。 僅在根據查詢條件能夠實現分區裁剪時使用分區表。 建議優先使用範圍 (Range) 分區,不然使用列表 (List) 分區。 根據查詢特色合理設置分區。 不要使用相同的字段既作分區鍵又作分佈鍵。 不要使用默認分區。 避免使用多級分區;儘可能少地建立分區,每一個分區的數據會多些。 經過查詢計劃的 EXPLAIN 結果來確保對分區表執行的查詢是選擇性掃描(分區裁剪)。 對於列存儲的表,不要建立過多的分區,不然會形成物理文件過多: Physical files = Segments * Columns * Partitions。
九、根據監控定位資源佔用較多的狀況:
筆者目前耗費資源比較多的是內存,主要須要優化內存、增長內存。
十、 數據庫配置優化
gp_statement_mem :單個查詢可使用的內存總量。若是它太大,則併發數越小。因此要有所折衷。
十一、硬件選型
硬件考慮因素:
十二、 估值計算
估值計算是統計學的經常使用手段。由於數據量龐大,求精確數值須要耗費巨大的資源,而統計分析並不要求徹底精確的數據,所以估值計算是一種折中的方法,普遍應用於統計分析場景。
秒級任意維度分析1TB級大表 - 經過採樣估值知足高效TOP N等統計分析需求
1三、 服務器參數調整
Greenplum實現了基於數據庫的分佈式數據存儲和並行計算
根據木桶原理以及這篇文章(https://clickhouse.yandex/benchmark.html#[%22100000000%22,[%22Greenplum%22],[%220%22,%221%22,%222%22]])的測試結果,segment節點的PG實例的處理速度決定。若是OLAP的處理速度在3秒內,能夠計算單segment在3秒之內能處理多少速度,而後再作橫向擴展。