「分散式技術專題」基於代價解析的最優路徑規劃
CBO代價解析
在過去資料庫主要使用基於規則的最佳化器( RBO),基於規則將SQL解析生成的關係表示式進行等價交換,形成更優的方案,例如,有一個多表查詢SQL
select a.c_id,sum(c.price) from a,b,c where a.c_id=c.c_id and c.o_id=b.o_id group by a.c_id order by sum(c.price) desc;
如果直接解析,將會把 a,b,c查詢的一部分建立為CROSS JOINS,再建立FILTER。再未最佳化的情況下,CROSS JOINS將產生大量的中間資料。即使試圖執行這樣的計劃也沒有意義。
取而代之,利用 RBO規則引擎,將會把cross join修改成按key進行兩表連線的方式。確實會比CROSS JOINS更好。
同樣的表連線,將大表放入記憶體和將小表放入記憶體明顯會有效率上的差異,但給予規則,此類設計會很複雜。
而基於 CBO,將會明顯提升效率。所以在資料庫的CBO設計中,主要參考了傳統關係型資料庫,將CPU時間、記憶體需求和網路頻寬使用率作為三個影響查詢執行效率的三個維度。
在資料庫中記為成本。同時根據表的內部統計資訊,在邏輯計劃轉換成物理計劃時,派生多個不同的物理計劃,並對每個物理計劃進行評價,估計實現這個轉換的代價。除列舉外同時考慮使用動態規劃演算法。
考慮有多個查詢同時進行,每個查詢的成本不同,如何做到更高併發的查詢計劃,需要進行權衡,這基本意味著需要以儘可能少的資源儘可能快地執行查詢。在資料庫中,使用成本概念進行建模,捕獲例如 CPU成本、記憶體需求和網路頻寬使用率之類的屬性,探索查詢執行計劃的不同變體,分配成本並進行比較,選擇總成本最低的變體執行。這種方法巧妙地平衡了叢集對於查詢響應速度、高併發等需求。
在查詢計劃中,每項操作的成本均以適合於該操作型別的計算方式及該操作涉及的資料統計資訊進行計算。
path
查詢執行計劃的拆分彙總
表掃描(讀取表;執行時與過濾器結合使用)、過濾器( SQL的where子句或查詢計劃程式推斷出的任何其他條件)、投影(計算輸出表示式)、JOIN、聚合、排序(ORDER BY)、限制(LIMIT等)、排序和限制組合(例如order by limit)、其他。
表掃描統計
表從讀取資料的任何過濾條件的使用,例如表中如果存在分割槽,過濾條件排除掉某些分割槽後,則統計資訊將考慮使用更小的資料集,並且更加準確。
過濾統計
在進行過濾操作時將分析過濾條件,並計算估算值,包括以下:資料行透過過濾條件的機率(得到過濾器之後的預期行數);過濾條件涉及的列的不同值的數量;不屬於過濾條件的列的不同值的數量(如果原始不同值數量大於透過過濾器的資料行的預期數量),理想狀態下,估算值 =輸入行數*非空值分數/去重值。
投影統計
按關係型理論考慮投影,投影的結果大小是可精確計算的,通常,投影與過濾器類似,不同之處在於,投影不會影響操作後的預期行數,對於投影,將計算以下型別的列統計資訊:投影產生不同值的數量, NULL投影產生的值,投影產生的最小值/最大值。如果投影表示式是直接返回的,則無需統計。如果是將其作為過濾器或連線操作時,則這些統計資訊對於正確估計過濾器條件或連線返回的行數很重要。
CBO從概念上來說是簡單的,流程上考慮替代查詢計劃,選擇並執行最佳計劃,但細節上比傳統關係型資料庫需要考慮的更多,傳統資料庫基本只需要考慮磁碟IO即可。
在未使用 CBO最佳化器前,針對1TB資料量的TPC-DS資料,在查詢某些SQL時(如query72),需要至少三個小時或以上才可以出結果,而在增加CBO最佳化器後,進行查詢將時間縮短到了5分鐘左右,效率整整提升了至少10倍到100倍。
以上為基於代價解析的最優路徑規劃, 「分散式技術專題」是國產資料庫 hubble 團隊精心整編,專題會持續更新,歡迎大家保持關注。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026685/viewspace-2935004/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【三維路徑規劃】基於RRT三維路徑規劃
- 「分散式技術專題」SQL 解析的 AP/TP 判別分散式SQL
- 「分散式技術專題」基於Gossip協議的去中心服務分散式Go協議
- 2.基於取樣的路徑規劃:RRT
- 「分散式技術專題」事務基礎及特性分散式
- 「分散式技術專題」併發系列一:基於加鎖的併發控制分散式
- 「分散式技術專題」併發系列二:基於時間的併發控制分散式
- 「分散式技術專題」副本機制分散式
- 「分散式技術專題」故障恢復分散式
- 路徑規劃: 淺談路徑規劃演算法演算法
- 「分散式技術專題」獨立儲存的優勢與劣勢分散式
- 「分散式技術專題」剖析一個SQL的解析及執行過程分散式SQL
- 【優化求解】基於蟻群演算法柵格地圖路徑規劃matlab優化演算法地圖Matlab
- 「分散式技術專題」非獨立儲存的優勢與劣勢分散式
- 分散式賬本技術的優勢分散式
- 【路徑規劃】基於蟻群的多無人機攻擊排程無人機
- 基於禁忌搜尋演算法的TSP路徑規劃matlab模擬演算法Matlab
- 「分散式技術專題」去中心化服務與中心化服務的優劣分散式中心化
- 「分散式技術專題」資料切分與合併分散式
- 「分散式技術專題」常用的 SQL 運算元介紹分散式SQL
- 分散式鏈路追蹤技術分散式
- 簡單的路徑規劃案例分享
- 技術分享| 基於 Etcd 的分散式鎖實現原理及方案分散式
- 基於ACO蟻群最佳化的UAV最優巡檢路線規劃演算法matlab模擬演算法Matlab
- HDFS分散式儲存的意義及技術解析分散式
- 基礎路徑規劃演算法(Dijikstra、A*、D*)總結演算法
- 路徑規劃之A*演算法演算法
- 基於身份的分段:三種技術路線解析與建議
- 基於 NVMe SSD 的分散式檔案儲存 UFS 效能提升技術解析分散式
- 2018 技術規劃
- 機器人路徑規劃 A*與D*機器人路徑規劃演算法詳述機器人演算法
- 「分散式技術專題」資料分佈(原理、資料分片)分散式
- 「分散式技術專題」資料庫常見的JOIN演算法分散式資料庫演算法
- 華為CloudNative分散式資料庫技術解析Cloud分散式資料庫
- 基於區塊鏈底層技術的分散式雲端儲存專案招聘go開發區塊鏈分散式Go
- 解決基於TypeScript 的 RN專案相對路徑引入元件的問題TypeScript元件
- 「分散式技術專題」資料分佈(資料複製、資料分片及優劣勢)分散式
- 遊戲AI研究(三):路徑規劃遊戲AI