自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

從Oracle的SQL管理能力,看國產(chǎn)庫差距

原創(chuàng) 精選
數(shù)據(jù)庫 Oracle
SQL 解析,簡單描述就是將用戶提交的 SQL 語句,交由數(shù)據(jù)庫內(nèi)核,經(jīng)多個步驟后生成最終的執(zhí)行計劃,并交由執(zhí)行器來完成執(zhí)行。

SQL,作為與數(shù)據(jù)庫交互的主要方式,其管理能力對數(shù)據(jù)庫的安全穩(wěn)定運(yùn)行至關(guān)重要。作為數(shù)據(jù)庫的標(biāo)桿性產(chǎn)品,Oracle 在這方面能力非常全面;與之相對的是國產(chǎn)數(shù)據(jù)庫還存在一定的差距。當(dāng)前很多企業(yè)正面臨國產(chǎn)化替代的過程,更需正視這一差距,通過在生態(tài)工具、實(shí)施方案及自研增強(qiáng)等多種手段加以完善補(bǔ)充。下文從Oracle能力為基礎(chǔ),介紹相關(guān)能力作用及國產(chǎn)數(shù)據(jù)庫當(dāng)前現(xiàn)狀。文中選擇了部分國內(nèi)主流數(shù)據(jù)庫產(chǎn)品及開源產(chǎn)品作為對比,其相關(guān)能力取自官網(wǎng)和部分朋友的反饋。對比中加入了開源數(shù)據(jù)庫,主要是因?yàn)椴糠謬a(chǎn)數(shù)據(jù)庫是基于開源數(shù)據(jù)庫二次化開發(fā)而來,此處列入方便對比。這里特別感謝幾位的朋友大力支持。

1. SQL 管理能力大對比

在下文展開之前,我們先通過一張表格做個全局性的概覽。

圖片圖片

1).SQL 解析

SQL 解析,簡單描述就是將用戶提交的 SQL 語句,交由數(shù)據(jù)庫內(nèi)核,經(jīng)多個步驟后生成最終的執(zhí)行計劃,并交由執(zhí)行器來完成執(zhí)行。這其中關(guān)鍵能力有兩個,一是執(zhí)行計劃緩存,一是解析過程的跟蹤。

? 計劃緩存

執(zhí)行計劃的緩存可以加速后續(xù)相同語句的執(zhí)行速度,大部分?jǐn)?shù)據(jù)庫都內(nèi)置了緩存能力,當(dāng)然有利就有弊,有了緩存能力就需考慮緩存的更新機(jī)制等問題。Oracle Shard Pool 中的 Library Cache,保存了SQL對應(yīng)的多個執(zhí)行計劃(以游標(biāo)的形式存在)。可以說 Oracle 對執(zhí)行計劃的存儲控制,是我見過最為完善的,考慮到很多情況(如綁定變量、數(shù)據(jù)特征等等)。國產(chǎn)數(shù)據(jù)庫大多也支持了執(zhí)行計劃緩存,但管理粒度比較粗放且很多細(xì)節(jié)是未知的,相關(guān)文檔資料較少。

? 過程跟蹤

解析過程的跟蹤,作為 SQL 優(yōu)化的基礎(chǔ),理解執(zhí)行計劃的生成過程非常重要;數(shù)據(jù)庫自身是否提供了一個窗口可以去觀察內(nèi)部執(zhí)行機(jī)理,對于 DBA 優(yōu)化非常實(shí)用。優(yōu)化器生成執(zhí)行的計劃的過程是比較復(fù)雜的,當(dāng)一條語句的執(zhí)行計劃較差,一個很好的入口就是查看下優(yōu)化器生成執(zhí)行計劃的過程。Oracle 提供了等待事件10053,可以對整個執(zhí)行過程做了詳細(xì)的了解,通過對這個事件的閱讀可以幫我們回答很多問題。例如為什么選擇這個索引?多個近似成本的執(zhí)行計劃的選擇?等等。國產(chǎn)數(shù)據(jù)庫在這方面功能差距較大,大多沒有提供這一能力,很多時候是要靠 DBA 的經(jīng)驗(yàn)來評估判斷的。

圖片圖片

2).執(zhí)行計劃

執(zhí)行計劃,可以語句在數(shù)據(jù)庫中的執(zhí)行路徑,是了解數(shù)據(jù)庫運(yùn)行機(jī)理的重要窗口。在此部分需提供的能力包含幾個,分別是執(zhí)行計劃的查看、固定、遷移和銷毀。

? 查看執(zhí)行計劃

可以說優(yōu)化SQL的第一步就是獲得一份準(zhǔn)確詳實(shí)的執(zhí)行計劃。這里要區(qū)分兩種情況,一種是根據(jù)用戶提交的語句生成的執(zhí)行計劃,一種是對執(zhí)行過或進(jìn)行中的語句獲得其執(zhí)行計劃。前者是優(yōu)化器新生成的執(zhí)行計劃,但不代表是真實(shí)執(zhí)行的,兩者可能會存在差異。Oracle提供了多種手段查看執(zhí)行計劃,而且可查詢當(dāng)前正在執(zhí)行的或已結(jié)束語句的執(zhí)行計劃。國產(chǎn)數(shù)據(jù)庫也都提供了查看執(zhí)行計劃的手段,但一般僅支持第一種方式且信息輸出粒度也較Oracle存在一定差距。

? 固定執(zhí)行計劃

令DBA一個非常頭疼的問題就是執(zhí)行計劃不穩(wěn)定,受多種因素影響會出現(xiàn)這一現(xiàn)象,對于前端業(yè)務(wù)來說就會出現(xiàn)忽慢忽快的問題。為了使SQL語句的執(zhí)行穩(wěn)定下來,可以考慮對一些關(guān)鍵語句進(jìn)行固定執(zhí)行計劃的工作。Oracle提供了多種手段達(dá)到這一目的。一種是常見的Hint方式,這種方式比較直接,但會導(dǎo)致失去其他優(yōu)化的可能性的同時,需要手工修改語句;另外Oracle還提供了其他多種手段,從9i的Stored Outline、10g的SQL Profile到11g的SQL Plan Management,實(shí)現(xiàn)從被動到主動、從固定到靈活地實(shí)現(xiàn)了執(zhí)行計劃的穩(wěn)定性。這方面國產(chǎn)數(shù)據(jù)庫也都提供了一定的能力,但相對來說能力較少,還處于被動補(bǔ)救的狀態(tài),尚不支持主動防御性的能力。

? 遷移執(zhí)行計劃

當(dāng)數(shù)據(jù)庫需要遷移時,除了數(shù)據(jù)本身遷移外,還有很重要的一部分就是執(zhí)行計劃的遷移,這對于在新環(huán)境的穩(wěn)定運(yùn)行很關(guān)鍵。Oracle提供了多種方式完成遷移過程,國產(chǎn)數(shù)據(jù)庫這方面比較缺失。

? 清理執(zhí)行計劃

如果一條語句的某個執(zhí)行計劃異常,常見的一個方式是讓其失效后,由優(yōu)化器重新生成一份執(zhí)行計劃。這時就需要能精準(zhǔn)銷毀到指定執(zhí)行計劃的能力。Oracle是提供了專有的命令來完成清理,當(dāng)然也可以通過權(quán)限變更等手段間接來清理掉執(zhí)行計劃。國產(chǎn)數(shù)據(jù)庫部分具備精確清理的能力,部分尚不具備。

圖片圖片

3).SQL 優(yōu)化

? 診斷優(yōu)化

當(dāng)出現(xiàn)某條語句性能比較差的情況,固然可以通過DBA人工來完成優(yōu)化,但更優(yōu)的方式是系統(tǒng)內(nèi)置的診斷優(yōu)化的能力。以O(shè)racle為例,就提供了一組這樣的能力,它通過對數(shù)據(jù)對象、統(tǒng)計信息、SQL語句本身等多維度評估,給出優(yōu)化建議,用戶更可以基于優(yōu)化建議一鍵完成優(yōu)化動作。這邊可大大提高優(yōu)化效率、降低優(yōu)化成本,減輕DBA的工作壓力。這方面國產(chǎn)數(shù)據(jù)庫也具備一定能力,但一般都是通過外置工具來完成。

? 自動優(yōu)化

上面談到的優(yōu)化動作是指人為主動干預(yù),診斷優(yōu)化指定語句,數(shù)據(jù)庫還可以提供自動優(yōu)化能力。Oracle一方面通過將若干上述能力組合實(shí)現(xiàn)了批量自動優(yōu)化;一方面還提供一種自適應(yīng)特性,即在語句執(zhí)行過程中,動態(tài)根據(jù)執(zhí)行情況實(shí)時干預(yù)后面的執(zhí)行邏輯,修正執(zhí)行計劃達(dá)到最優(yōu)。部分國產(chǎn)數(shù)據(jù)庫也具備了類似的能力,但具體還待驗(yàn)證。

圖片圖片

4).執(zhí)行過程

? 查看過程

對SQL執(zhí)行過程的全方位追蹤,也非常重要,可以真實(shí)了解語句的執(zhí)行狀態(tài),根據(jù)執(zhí)行過程中暴露出的問題有針對性的進(jìn)行調(diào)整優(yōu)化。要做到對語句執(zhí)行追蹤是比較難的,需要兼顧效率、開銷、粒度等。Oracle在這方面做的非常突出,其提出的事件模型較好地解決了這一問題。其提供了豐富的手段可以對正在執(zhí)行或已經(jīng)執(zhí)行結(jié)束的語句實(shí)現(xiàn)過程查看。國產(chǎn)數(shù)據(jù)庫在這方面差距還是很明顯的,也看到有國內(nèi)產(chǎn)品在仿照Oracle的方式來實(shí)現(xiàn)這一能力。

? 慢SQL

慢SQL,是DBA優(yōu)化的入手點(diǎn),這里談到的慢SQL狹義上指執(zhí)行時長超過預(yù)期的SQL,廣義上是對更多資源粒度使用超出預(yù)期語句的集合。這方面Oracle基于AWR的存儲庫,提供了豐富的維度去檢索查詢語句。國產(chǎn)數(shù)據(jù)庫這方面做到稍顯單薄些,大多僅有對運(yùn)行時間超長語句的輸出。

圖片圖片

5).其他能力

除了上述能力外,還有些能力也有助于對SQL的管理。例如可以重點(diǎn)標(biāo)識語句的“著色”功能,用于升序遷移評估的SQL回放功能,用于調(diào)整對象進(jìn)而影響執(zhí)行計劃的不可見索引,用于應(yīng)急處理語句的雨具重寫功能等。這部分功能比較零散,大多根據(jù)實(shí)踐中不斷增強(qiáng),各廠商差異較大。

圖片圖片

2. 國產(chǎn)數(shù)據(jù)庫實(shí)施建議

針對國產(chǎn)庫現(xiàn)狀的不足,在實(shí)施過程中可根據(jù)以下幾個方面進(jìn)行準(zhǔn)備

1).制定開發(fā)規(guī)范

充分地了解國產(chǎn)數(shù)據(jù)庫的技術(shù)特點(diǎn),制定有針對性的設(shè)計開發(fā)規(guī)范。很多國產(chǎn)數(shù)據(jù)庫基于多年實(shí)踐,也都提供了開發(fā)規(guī)范,可以充分地予以吸納。特別是針對分布式數(shù)據(jù)庫,對開發(fā)有較多約束,要在系統(tǒng)設(shè)計、遷移之初就基于考慮。通常原則是盡量簡化對數(shù)據(jù)庫的使用,拒絕3B 大SQL(Big SQL) 大事務(wù)(Big transaction) 大批量(Big batch) 。

2).完善工具平臺

基于國產(chǎn)數(shù)據(jù)庫內(nèi)核能力的不足,還需要較長一段時間來完善升級,可通過外部工具或平臺的方式補(bǔ)齊內(nèi)部短板。一方面可通過企業(yè)自研的方式增強(qiáng)對國產(chǎn)庫的管理能力,一方面也可利用一些外圍工具(如海信的DB Doctor、白鱔老師的D-Smart)來增強(qiáng)。

3).培養(yǎng)人與技能

要想使用好國產(chǎn)數(shù)據(jù)庫,更多是需要人員及技能。目前國產(chǎn)數(shù)據(jù)庫在生態(tài)建設(shè)方面還尚屬初期階段,需要企業(yè)內(nèi)部獨(dú)立培養(yǎng)更多的人并具備相應(yīng)的技能。只要充分地了解理解數(shù)據(jù)庫,才能更好地使用它。業(yè)內(nèi)有某公司使用國產(chǎn)數(shù)據(jù)庫,內(nèi)部超千人通過認(rèn)證培訓(xùn)的案例即說明了這點(diǎn)。

責(zé)任編輯:武曉燕 來源: 韓鋒頻道
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號