OceanBase SQL 診斷和調優實踐——【DBA從入門到實踐】第七期

數據庫作為絕大多數應用系統儲存數據的核心系統,在用戶系統需要訪問數據時,有著至關重要的作用。在這些交互中,SQL 語言是應用與數據庫系統之間“溝通”的橋梁,它負責將應用的指令傳達給數據庫。因此,SQL 的性能好壞直接決定了這種“溝通”的效率,進而對系統的用戶響應時間、系統吞吐量以及IT設置成本等關鍵指標產生影響。

那么,什么是 SQL 診斷與調優?

SQL 診斷就是通過一些技術手段來找出“溝通”效率不高的原因或潛在影響“溝通”效率的因素,比如發現執行性能不佳的 SQL、可能存在性能瓶頸的 SQL 等。而 SQL 調優則是通過一系列的技術手段,來提高 SQL 的執行效率,解決 SQL 的性能瓶頸,從而達到提高應用與數據庫“溝通”效率的目的。

《DBA 從入門到實踐》第七期將在5月22日(周三)如期而至,為大家講解:

  • ODP(OceanBase Database Proxy) SQL 路由原理。
  • 如何分析 SQL 監控視圖。
  • 如何閱讀和管理 OceanBase SQL 執行計劃。
  • 最常見的 SQL 調優方式。
  • SQL 性能問題的典型場景和排查思路。

點擊下方鏈接報名學習

【DBA從入門到實踐】第七期

內容搶“鮮”知

(一)ODP 路由原理

路由是 OceanBase 分布式數據庫中的一個重要功能,是分布式架構下,實現快速訪問數據的利器。

Partition 是 OceanBase 數據存儲的基本單元。當我們創建一張 Table 時,就會存在表和 Partition 的映射。非分區表中,不考慮主備時,一張 Table 對應一個 Partition;分區表中一個 Table 會對應多個 Partition。

路由實現了根據 OBServer 的數據分布精準訪問到數據所在的機器,還可以根據一定的策略將一致性要求不高的讀請求發送給副本機器,充分利用機器的資源。路由選擇輸入的是用戶的 SQL、用戶配置規則、OBServer 狀態,路由選擇輸出的是一個可用 OBServer 地址。

其路由實現邏輯如下圖所示:

1715853371

(二)分析 SQL 監控視圖

OceanBase 數據庫 V4.x 版本中有著非常豐富的視圖,通過這些視圖可以獲取 OceanBase 集群各種數據庫對象的基本信息和實時狀態信息。這些視圖分為兩大類:數據字典視圖和動態性能視圖。

豐富的視圖展示了 OceanBase 數據庫的內部架構及系統運行的詳細狀態。通過視圖,我們可以便捷地查看 OceanBase 數據庫的系統組成及實時狀態,了解組件之間的關系,內部視圖是學習 OceanBase 數據庫的最好途徑之一,其相應的數據字典視圖見下圖。

1715853382

監控指標相關的數據來源于 OceanBase 數據庫內部的動態性能視圖,所有監控指標都可以通過 SQL 語句進行訪問。動態性能視圖分為 GV$ 視圖和 V$ 視圖,外部監控系統(例如 OCP)通過在每個數據庫服務器上部署代理進程,通過 SQL 接口定期拉取本機上的監控信息(V$ 視圖),部分全局信息(例如 Root Service 相關)通過中心節點采集。監控數據統一匯報給監控系統數據庫,并按照各種維度聚合(集群維度、租戶維度、節點維度、Unit 維度),從而構建整個監控大盤。

(三)如何閱讀和管理 OceanBase SQL 執行計劃

執行計劃(Execution Plan)是對一條 SQL 查詢語句在數據庫中執行過程的描述。用戶可以通過 EXPLAIN 命令查看優化器針對指定 SQL 生成的邏輯執行計劃。如果要分析某條 SQL 的性能問題,通常需要先查看 SQL 的執行計劃,排查每一步 SQL 執行是否存在問題。因此,讀懂執行計劃是 SQL 優化的先決條件,而了解執行計劃的算子是理解 EXPLAIN 命令的關鍵。

(四)最常見的 SQL 調優方式

當用戶已經學習完如何通過 EXPLAIN 命令查看優化器針對 SQL 生成的邏輯執行計劃,以及如何通過 Hint 和 Outline 來人為控制優化器的行為,使優化器生成指定的計劃。就可以以上述內容為基礎,繼續了解 OceanBase SQL 性能調優中最基礎的內容:第一部分是統計信息和計劃緩存的介紹,第二部分是 OceanBase 數據庫的使用者需要了解的幾種性能調優手段。

(五)SQL 性能問題的典型場景和排查思路

當用戶完成了如何閱讀和管理 SQL 的執行計劃,以及常見的幾種 SQL 調優方式,就獲得了學習這一小節的基礎知識。當用戶遇到由于 SQL 原因導致的性能問題時,一般可以通過以下幾個步驟進行排查:

  1. 通過全鏈路追蹤確認各階段耗時占比,確認耗時長的階段是什么?
  2. 如果上一步顯示慢在 observer 模塊,則可以通過 oceanbase.gv$ob_sql_audit 分析具體是 observer 內的什么階段耗時長了?
  3. 如果上一步耗時長的階段在執行階段,則先根據上文的內容判斷是否存在 buffer 表、大小賬號、硬解析等問題?
  4. 如果上述問題均不存在,則需要通過 explain extended 展示的執行計劃來分析優化器的估行和真實行數是否有巨大差距,如果有明顯差距,則需要手動收集統計信息。否則就進一步考慮是需要創建更合適的索引、通過 hint 調整計劃形態、通過 hint 調整并行度等。

在該小節中,首先會為大家展示上面排查步驟中提到的幾個常被用于進行 SQL 性能問題分析的工具,然后介紹如何通過這幾個工具找到 SQL 性能優化的方向,最后會對 SQL 調優的最典型的場景和常見問題進行一個匯總。?

更多精彩內容請鎖定5月22日《DBA從入門到實踐》第七期~

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16381.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16381.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16381.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

弱類型解析

php中 轉化為相同類型后比較 先判斷數據類型后比較數值 var_dump("asdf"0);#bool(true) var_dump("asdf"1);#bool(false) var_dump("0asdf"0);#bool(true) var_dump("1asdf"1);#bool(true)1、md5撞庫 例&#xff1a; <?php incl…

【智能算法應用】模擬退火算法求解多車型車輛路徑問題HFVRP

目錄 1.算法原理2.多車型車輛路徑HFVRP數學模型3.結果展示4.參考文獻5.代碼獲取 1.算法原理 模擬退火算法&#xff08;Simulated Annealing, SA&#xff09;是一種通用概率算法&#xff0c;用于在給定一個大的搜索空間內尋找問題的近似最優解。這種算法受到物理中退火過程的啟…

ffplay 使用文檔介紹

ffplay ffplay 是一個簡單的媒體播放器,它是 FFmpeg 項目的一部分。FFmpeg 是一個廣泛使用的多媒體框架,能夠解碼、編碼、轉碼、復用、解復用、流化、過濾和播放幾乎所有類型的媒體文件。 ffplay 主要用于測試和調試,因為它提供了一個命令行界面,可以方便地查看媒體文件的…

消息隊列拉模式下的訂閱關系不一致問題及解決方法

引言 在分布式系統中&#xff0c;消息隊列&#xff08;Message Queue&#xff0c;MQ&#xff09;是一種常用的組件&#xff0c;用于解耦生產者和消費者&#xff0c;緩解系統負載&#xff0c;提升系統的可靠性和可擴展性。在Java行業中&#xff0c;常見的消息隊列中間件有Apach…

煙囪ERP系統

一、煙囪系統定義 “煙囪式”系統&#xff0c;來自維基百科的解釋是&#xff1a;一種不能與其他系統進行有效協調工作的信息系統&#xff0c;又稱為孤島系統。 二、煙囪系統的案例 比如&#xff1a;就像以下一樣&#xff0c;各個系統之間是獨立的&#xff0c;所有對接是通過…

深度學習復盤與小實現

文章目錄 一、查漏補缺復盤1、python中zip()用法2、Tensor和tensor的區別3、計算圖中的迭代取數4、nn.Modlue及nn.Linear 源碼理解5、知識雜項思考列表6、KL散度初步理解 二、處理多維特征的輸入1、邏輯回歸模型流程2、Mini-Batch (N samples) 三、加載數據集1、Python 魔法方法…

【Android】安卓設備上的Fastboot模式詳解與使用指南

原諒把你帶走的雨天 在漸漸模糊的窗前 每個人最后都要說再見 原諒被你帶走的永遠 微笑著容易過一天 也許是我已經 老了一點 那些日子你會不會舍不得 思念就像關不緊的門 空氣里有幸福的灰塵 否則為何閉上眼睛的時候 又全都想起了 誰都別說 讓我一個人躲一躲 你的承諾 我竟然沒懷…

c++筆記3

優先隊列 普通的隊列是一種先進先出的數據結構&#xff0c;元素在隊列尾追加&#xff0c;而從隊列頭刪除。優先隊列是一種按照優先級決定出隊順序的數據結構&#xff0c;優先隊列中的每個元素被賦予級別&#xff0c;隊首元素的優先級最高。 例如&#xff1a;4入隊&#xff0c…

多文件和靜態/動態鏈接以及虛擬內存管理

多目標文件鏈接 //stack.c char stack[512]; int top -1; void push(char c){stack[top] c; }char pop(void){return stack[top--]; }int is_empty(void){return top 1; }// main.c #include <stdio.h> int a,b 1; int main(){ push(a); push(b); push(c); while(!is…

Vue項目中npm run build 卡住不執行的幾種情況(實戰版)

方法一 一&#xff1a;比較常見是鏡像導致的原因 我們可以找到build/check-versions文件 將這段代碼注釋,重新運行就可以解決這個問題 if (shell.which(npm)) {versionRequirements.push({name: npm,currentVersion: exec(npm --version),versionRequirement: packageConfig.en…

MySQL 存儲過程返回更新前記錄

在MySQL中&#xff0c;如果我們想在存儲過程中返回更新前的記錄&#xff0c;這通常不是直接支持的&#xff0c;因為UPDATE語句本身不返回更新前的數據。但是&#xff0c;我們可以通過一些策略來實現這個需求。 1.MySQL 存儲過程返回更新前記錄常用的方法策略 以下是一個常見的…

應用程序圖標提取

文章目錄 [toc]提取過程提取案例——提取7-zip應用程序的圖標 提取過程 找到需要提取圖標的應用程序的.exe文件 復制.exe文件到桌面&#xff0c;并將復制的.exe文件后綴改為.zip 使用解壓工具7-zip解壓.zip文件 在解壓后的文件夾中&#xff0c;在.rsrc/ICON路徑下的.ico文件…

代碼隨想錄-Day20

654. 最大二叉樹 給定一個不重復的整數數組 nums 。 最大二叉樹 可以用下面的算法從 nums 遞歸地構建: 創建一個根節點&#xff0c;其值為 nums 中的最大值。 遞歸地在最大值 左邊 的 子數組前綴上 構建左子樹。 遞歸地在最大值 右邊 的 子數組后綴上 構建右子樹。 返回 nums…

ROS | 激光雷達包格式

ros激光雷達包格式&#xff1a; C實現獲取雷達數據 &#xff1a; C語言獲取雷達數據&#xff1a; Python語言獲取雷達數據&#xff1a; python不需要編譯&#xff0c;但是需要給它一些權限 chmod x lidar_node.py(當前的文件名字&#xff09; C實現雷達避障&#xff1a; python…

【Xilinx】常用的全局時鐘資源相關Xilinx器件原語

1 概述 常用的與全局時鐘資源相關的Xilinx器件原語包括&#xff1a; IBUFGIBUFGDS、OBUFGDS 和 IBUFDS、OBUFDSBUFGBUFGPBUFGCEBUFGMUXBUFGDLLIBUFDS_GTXE1IBUFDS_GTE2IBUFDS_GTE3OBUFDS_GTE3IBUFDS_GTE4OBUFDS_GTE4DCM 剛開始看到這寫源語&#xff0c;免不了好奇這些源語對應的…

IDEA如何對多線程進行debug

開發中使用到多線程的時候不少,但是debug起來還是比較困難的,因為默認每次只會進入一個線程,這樣有些問題是發現不了的,其實IDEA也是支持進入每個線程來debug的 寫一個簡單的demo public class ThreadDebug {public static void main(String[] args) {MyThread myThread new…

c++ set/multiset容器

在C標準庫中&#xff0c;set 和 multiset 是兩種非常有用的關聯容器&#xff0c;它們包含唯一元素&#xff08;對于set&#xff09;或可重復元素&#xff08;對于multiset&#xff09;&#xff0c;并且默認情況下這些元素都是自動排序的。它們通過鍵&#xff08;即存儲的元素本…

異方差的Stata操作(計量114)

以數據集 nerlove.dta 為例&#xff0c;演示如何在 Stata 中處理異方差。 此數據集包括以下變量&#xff1a; tc ( 總成本 ) &#xff1b; q ( 總產量 ) &#xff1b; pl ( 工資率 ) &#xff1b; pk ( 資本的使用成本 ) &#xff1b; pf ( 燃料價格 ) &#xff1b; …

GESP等級大綱

CCF編程能力等級認證概述 CCF編程能力等級認證&#xff08;GESP&#xff09;為青少年計算機和編程學習者提供學業能力驗證的規則和平臺。GESP覆蓋中小學階段&#xff0c;符合年齡條件的青少年均可參加認證。C & Python編程測試劃分為一至八級&#xff0c;通過設定不同等級…

[自動駕駛技術]-6 Tesla自動駕駛方案之硬件(AI Day 2021)

1 硬件集成 特斯拉自動駕駛數據標注過程中&#xff0c;跨250萬個clips超過100億的標注數據&#xff0c;無論是自動標注還是模型訓練都要求具備強大的計算能力的硬件。下圖是特斯拉FSD計算平臺硬件電路圖。 1&#xff09;神經網絡編譯器 特斯拉AI編譯器主要針對PyTorch框架&am…