【連載】如何掌握openGauss資料庫核心技術?祕訣一:拿捏SQL引擎(1)
?
openGauss :The Core Technologies
華為公司從開始自研資料庫至今已經有近20年曆史,在去年6月30日, 華為正式宣佈開源資料庫能力,開放openGauss資料庫原始碼,併成立openGauss開源社群,社群官網同步上線。從開源至今的短短不到一年半的時間,openGauss的版本在不斷的進行迭代升級,如今已更新至2.1.0版本。
據上半年統計報告顯示,openGauss社群官方網站訪問量78萬+;官方網站訪客人數7萬+;官方網站安裝包下載量16萬+,下載遍及全球49個國家328個城市;社群開發者人數1200+;社群累計需求程式碼PR提交數達到2600+,累計Commit數達到4500+。
越來越多的企業簽署社群CLA,參與社群程式碼貢獻。並且,其中有6家合作伙伴釋出基於openGauss的商業發行版,例如 雲和恩墨基於openGauss商業發行版“MogDB”就已經落地郵儲銀行、民生銀行。
此外,openGauss的熱度也在不斷地攀升,在短短一年半的時間內,一躍國產資料庫排行榜前三的席位,倍受大家的關注。
-
openGauss資料庫SQL引擎
-
openGauss資料庫執行器技術
-
openGauss儲存技術
-
openGauss事務機制
-
openGauss資料庫安全
感興趣的小夥伴記得關注我們的公眾號~
openGauss資料庫SQL引擎
資料庫的SQL引擎是資料庫重要的子系統之一,它對上負責承接應用程式傳送過來的SQL語句,對下則負責指揮執行器執行執行計劃。其中優化器作為SQL引擎中最重要、最複雜的模組,被稱為資料庫的“大腦”,優化器產生的執行計劃的優劣直接決定資料庫的效能。
SQL引擎概覽
SQL引擎是資料庫系統重要組成部分,它的主要職責是負責將應用程式輸入的SQL在當前負載場景下生成高效的執行計劃,在SQL的高效執行上扮演重要角色。SQL在SQL引擎裡執行過程,如圖7-1所示。
圖1 SQL執行流程
從圖7-1中可以看出,應用程式的SQL需要經過SQL解析生成邏輯執行計劃、經過查詢優化生成物理執行計劃,然後將物理執行計劃轉交給查詢執行引擎做物理運算元的執行操作。
SQL解析通常包含詞法分析、語法分析、語義分析幾個子模組。SQL語言是介於關係演算和關係代數之間一種描述性語言,它吸取了關係代數中一部分邏輯運算元的描述,而放棄了關係代數中“過程化”的部分,SQL解析主要的作用就是將一個SQL語句編譯成為一個由關係運算元組成的邏輯執行計劃。
描述語言的特點是規定了需要獲取的“WHAT”,而不關心“HOW”,也就是隻關注結果而不關注過程,因此SQL語言描述性的特點導致查詢優化在資料庫管理系統中具有非常重要的作用。
查詢重寫則是在邏輯執行計劃的基礎上進行等價的關係代數變換,這種優化也可以稱為代數優化,雖然兩個關係代數式獲得的結果完全相同,但是它們的執行代價卻可能有很大的差異,這就構成了查詢重寫優化的基礎。
在早期的資料庫管理系統中,通常採用基於啟發式規則的方法來生成最優的物理執行計劃,但是這種基於規則的優化的靈活度不夠,常常導致產生一些次優的執行計劃,而代價估算的引入,則從根本上解決了基於規則優化的不足。
基於代價的優化器一方面生成“候選”的物理執行路徑,另一方面對這些執行路徑計算它們的執行代價,這樣就建立了執行路徑的篩選標準,從而能夠通過比較代價而獲得最優的物理執行計劃。
SQL解析
SQL語句在資料庫管理系統中的編譯過程符合編譯器實現的常規過程,需要進行詞法分析、語法分析和語義分析。
§ 詞法分析:從查詢語句中識別出系統支援的關鍵字、識別符號、操作符、終結符等,每個詞確定自己固有的詞性。
§ 語法分析:根據SQL語言的標準定義語法規則,使用詞法分析中產生的詞去匹配語法規則,如果一個SQL語句能夠匹配一個語法規則,則生成對應的抽象語法樹(Abstract Syntax Tree,AST)。
§ 語義分析:對語法樹(AST)進行有效性檢查,檢查語法樹中對應的表、列、函式、表示式是否有對應的後設資料,將抽象語法樹轉換為邏輯執行計劃(關係代數表示式)。
在SQL語言標準中,確定了SQL語言的關鍵字以及語法規則資訊,SQL解析器在做詞法分析的過程中會將一個SQL語句根據關鍵字資訊以及間隔資訊劃分為獨立的原子單位,每個單位以一個詞的方式展現,例如有SQL語句:
SELECT w_name FROM warehouse WHERE w_no = 1;
可以劃分的關鍵字、識別符號、操作符、常量等原子單位,如表7-1所示。
詞性 |
內容 |
關鍵字 |
SELECT、FROM、WHERE |
識別符號 |
w_name、warehouse、w_no |
操作符 |
= |
常量 |
1 |
表1 詞法分析的特徵
語法分析會根據詞法分析獲得的詞來匹配語法規則,最終生成一個抽象語法樹(AST),每個詞作為語法樹的葉子結點出現,如圖7-2所示。
圖2 抽象語法樹
抽象語法樹表達的語義還僅僅限制在能夠保證應用的SQL語句符合SQL標準的規範,但是對於SQL語句的內在含義還需要做有效性的檢查。
§ 檢查關係的使用:FROM子句中出現的關係必須是該查詢對應模式中的關係或檢視。
§ 檢查與解析屬性的使用:在SELECT句中或者WHERE子句中出現的各個屬性必須是FROM子句中某個關係或檢視的屬性。
§ 檢查資料型別:所有屬性的資料型別必須是匹配的。
在有效性檢查的同時,語義分析的過程還是有效性語義繫結(Bind)的過程,通過語義分析的檢查,抽象語法樹就轉換成一個邏輯執行計劃,邏輯執行計劃可以通過關係代數表示式的形式來表現,如圖7-3所示。
圖3 關係代數表示式
未完待續......
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31556440/viewspace-2842623/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- openGauss持續聚焦資料庫根技術資料庫
- openGauss儲存技術(一)——行儲存引擎儲存引擎
- 如何掌握C#的核心技術C#
- openGauss SQL引擎 (上)SQL
- 如何掌握python連線redis資料庫?PythonRedis資料庫
- Java技術之掌握資料庫連線工具DBUtils的應用Java資料庫
- 【連載】高效人士的116個IT祕訣(第2版)——祕訣23早晨就來一次突破
- SAP諮詢顧問如何掌握核心技術?
- 不重視技術,何談掌握核心技術?
- openGauss資料庫原始碼解析——慢SQL檢測資料庫原始碼SQL
- 資料庫連線池技術詳解資料庫
- 【連載】高效人士的116個IT祕訣(第2版)——祕訣24為你的時間建一個構造圖
- openGauss核心分析(九):資料庫表的建立過程資料庫
- OPPO雲資料庫訪問服務技術揭祕資料庫
- openGauss資料庫JDBC環境連線配置(Eclipse)資料庫JDBCEclipse
- 8個祕訣成就頂級增長黑客 | 如何運用資料試驗打造增長引擎黑客
- java 資料庫程式設計(一)JDBC連線Sql Server資料庫Java資料庫程式設計JDBCSQLServer
- 爆款“內容營銷”案例四連發,巨量引擎有何祕訣?
- openGauss核心:SQL解析過程分析SQL
- openGauss儲存技術(二)——列儲存引擎和記憶體引擎儲存引擎記憶體
- openGauss資料庫原始碼解析系列文章--openGauss簡介(一)資料庫原始碼
- 三大核心能力,揭示全面釋放資料價值的獨門祕訣
- gluesql/gluesql:一個用Rust編寫的SQL資料庫引擎庫包SQLRust資料庫
- 【連載】高效人士的116個IT祕訣(第2版)——祕訣25快速記錄你的工作日誌
- 核心實戰教程第四期 _ 帶你走進資料庫 SQL 引擎資料庫SQL
- 千萬級MySQL資料庫建立索引,提高效能的祕訣MySql資料庫索引
- 分散式 SQL 資料庫與表格最佳化技術分散式SQL資料庫
- 時序資料庫連載系列:當SQL遇到時序TimescaleDB資料庫SQL
- openGauss核心分析(十):資料庫搜尋引的建立過程資料庫
- CSDN 資料庫Meetup|OceanBase 技術專家講述 SQL 的一生資料庫SQL
- MaxCompute執行引擎核心技術DAG揭秘
- openGauss SQL引擎(下)——查詢最佳化SQL
- DBeaver如何連線一個資料庫資料庫
- Golang 全域性sql資料庫連線GolangSQL資料庫
- c#連線SQL Server資料庫C#SQLServer資料庫
- #資料庫3-1_SQL概述資料庫SQL
- Java技術分享:什麼是資料庫連線池?Java資料庫
- 【技術短影片】OceanBase 5mins Tips | 如何合理的選擇資料庫儲存引擎?資料庫儲存引擎