PostgreSQL10.0preview效能增強-(多維分析)更快,更省記憶體hashedaggregationwithgroupingsets
標籤
PostgreSQL , 10.0 , hashed aggregation with grouping sets
背景
grouping sets 是多維分析語法,PostgreSQL 從9.5開始支援這種語法,常被用於OLAP系統,資料透視等應用場景。
《PostgreSQL 9.5 new feature – Support GROUPING SETS, CUBE and ROLLUP.》
由於多維分析的一個QUERY涉及多個GROUP,所以如果使用hash agg的話,需要多個HASH table,平行計算. 9.5, 9.6的時候,還不支援一個QUERY使用多個HASH TABLE平行計算。
10.0 擴充套件了聚合NODE,支援hashAggregate並行開多個hashtable,以及MixedAggregate策略用於sort grouping時雜湊表的資料倒騰。
使用時對使用者完全透明,同時優化器在使用hash agg, multi hashtable,時,會盡量的減少重複SORT。
總而言之,grouping set多維分析會更快(即使包含排序),更省記憶體。
Support hashed aggregation with grouping sets.
This extends the Aggregate node with two new features:
HashAggregate can now run multiple hashtables concurrently,
and a new strategy MixedAggregate populates hashtables while doing sorted grouping.
The planner will now attempt to save as many sorts as possible when
planning grouping sets queries, while not exceeding work_mem for the
estimated combined sizes of all hashtables used. No SQL-level changes
are required. There should be no user-visible impact other than the
new EXPLAIN output and possible changes to result ordering when ORDER
BY was not used (which affected a few regression tests). The
enable_hashagg option is respected.
Author: Andrew Gierth
Reviewers: Mark Dilger, Andres Freund
Discussion: https://postgr.es/m/87vatszyhj.fsf@news-spur.riddles.org.uk
例子
+explain (costs off) select a, b, grouping(a,b), sum(v), count(*), max(v)
+ from gstest1 group by grouping sets ((a),(b)) order by 3,1,2;
+ QUERY PLAN
+--------------------------------------------------------------------------------------------------------
+ Sort
+ Sort Key: (GROUPING("*VALUES*".column1, "*VALUES*".column2)), "*VALUES*".column1, "*VALUES*".column2
+ -> HashAggregate
+ Hash Key: "*VALUES*".column1
+ Hash Key: "*VALUES*".column2
+ -> Values Scan on "*VALUES*"
+(6 rows)
這個patch的討論,詳見郵件組,本文末尾URL。
PostgreSQL社群的作風非常嚴謹,一個patch可能在郵件組中討論幾個月甚至幾年,根據大家的意見反覆的修正,patch合併到master已經非常成熟,所以PostgreSQL的穩定性也是遠近聞名的。
參考
相關文章
- Android效能優化:手把手教你如何讓App更快、更穩、更省(含記憶體、佈局優化等)Android優化APP記憶體
- PostgreSQL10.0preview效能增強-hashindexmetapagecache、高併發增強SQLViewIndex
- PostgreSQL10.0preview效能增強-分割槽表效能增強(plan階段加速)SQLView
- Glide 這樣用,更省記憶體!!!IDE記憶體
- Facebook開源Mask R-CNN的PyTorch 1.0基準,比mmdetection更快、更省記憶體CNNPyTorch記憶體
- 記憶體效能分析工具記憶體
- PostgreSQL10.0preview效能增強-間接索引(secondaryindex)SQLView索引Index
- PostgreSQL10.0preview效能增強-支援64bitatomicSQLView
- Unity效能分析(三)記憶體分析Unity記憶體
- 震精-PostgreSQL10.0preview效能增強-WARM提升一倍效能SQLView
- PostgreSQL10.0preview效能增強-OLAP提速框架,FasterExpressionEvaluationFramework(含JIT)SQLView框架ASTExpressFramework
- PostgreSQL10.0preview功能增強-自由定義統計資訊維度SQLView
- JVM效能調優,記憶體分析工具JVM記憶體
- PostgreSQL10.0preview效能增強-pg_xactalign(cacheline對齊)SQLView
- Web函式請求多併發上線,Web服務部署更快更省!Web函式
- 谷歌Chrome瀏覽器引入省記憶體/省電模式:減少記憶體佔用谷歌Chrome瀏覽器記憶體模式
- 效能調優(cpu/IO/JVM記憶體分析)JVM記憶體
- 更省更快,如何使用 Serverless 搭建個人專屬網盤?Server
- 劍指immer,更快更強的limu
- PostgreSQL10.0preview功能增強-增加ProcArrayGroupUpdate等待事件SQLView事件
- 記憶體增強型例項規格族re4記憶體
- 哪個更快:Java堆還是本地記憶體Java記憶體
- PostgreSQL10.0preview功能增強-OLAP增強向量聚集索引(列儲存擴充套件)SQLView索引套件
- PostgreSQL10.0preview功能增強-國際化功能增強,支援ICU(InternationalComponentsforUnicode)SQLViewUnicode
- Linux效能優化:記憶體使用情況分析Linux優化記憶體
- 效能優化——記憶體洩漏(2)工具分析篇優化記憶體
- 記憶體分析與記憶體洩漏定位記憶體
- Ubuntu記憶體分析Ubuntu記憶體
- JVM記憶體分析JVM記憶體
- 阿里雲記憶體增強型re4e雲伺服器配置效能及優惠價格阿里記憶體伺服器
- Oracle12c中效能最佳化增強新特性之資料庫智慧快閃記憶體Oracle資料庫記憶體
- MapStructPlus 1.4.0 釋出,體積更輕量!效能更強!Struct
- 關於redis記憶體分析,記憶體優化Redis記憶體優化
- Chrome記憶體怪獸,比Firefox、Opera、IE更佔記憶體Chrome記憶體Firefox
- PostgreSQL10.0preview功能增強-更強可靠性,過去式事務狀態可查(杜絕unknown事務)SQLView
- 記憶體管理中關於記憶體每次增長的大小記憶體
- 效能優化——記憶體洩漏(3)程式碼分析篇優化記憶體
- 谷歌NLP新模型「大鳥」突破BERT限制,稀疏注意力機制更省記憶體谷歌模型記憶體