從oracle往greenplum遷移,查詢性能不滿足要求的定位以及調優過程

来源:https://www.cnblogs.com/qiannianyuan/archive/2018/08/12/9463312.html
-Advertisement-
Play Games

一、前言 在一次對比oracle和greenplum查詢性能過程中,由於greenplum查詢性能不理想,因此進行定位分析,提升greenplum的查詢性能 二、環境信息 初始情況下,搭建一個小的集群,進行性能測試 PS:由於要求greenplum中的表數據類型和源表類型一直,且索引一致。所以所有字 ...


一、前言

在一次對比oracle和greenplum查詢性能過程中,由於greenplum查詢性能不理想,因此進行定位分析,提升greenplum的查詢性能

 

二、環境信息

初始情況下,搭建一個小的集群,進行性能測試

磁碟 SAS
交換機 千兆
集群大小 4segment
數據量 3億
數據文件大小 68G
表類型 Heap 行表
欄位類型 所有列為varchar
列寬 41列
索引
查詢語句 select count(*) from xxx where gjdqdm = 'CHN' and crrqsj >= '20100101000000' and crrqsj <= '20180101000000' and crkadm = '055'

 

 

 

 

 

 

 

 

PS:由於要求greenplum中的表數據類型和源表類型一直,且索引一致。所以所有欄位都為varchar類型且無索引,因此這方面沒有優化空間。

 

三、優化過程

3.1 結果對比

SQL ORACLE耗時 greenplum耗時
select count(*) from xxx where gjdqdm = 'CHN' and crrqsj >= '20100101000000' and crrqsj <= '20180101000000' and crkadm = '055' 24S 14.1S

 

 

14.1S是不能接受的速度,因此需要查找原因,以期找出性能瓶頸,提供優化方案

 

3.2 分析過程

3.2.1 查看執行計劃

從①處可以看出,所有的耗時都在③的操作,seq scan上。

這裡①處的意思是(摘自官網):

The numbers that are quoted by EXPLAIN are (left to right):

    Estimated start-up cost (time expended before the output scan can start, e.g., time to do the sorting in a sort node)

    Estimated total cost (if all rows are retrieved, though they might not be; e.g., a query with a LIMIT clause will stop short of paying the total cost of the Limit plan node's input node)

    Estimated number of rows output by this plan node (again, only if executed to completion)

    Estimated average width (in bytes) of rows output by this plan node

 ③處的意思是:順序掃描磁碟

 

從②處可以看出,所有的segment都參與了查詢

 

從④處可以看出,所有的列設置為varchar都進行了類型轉換,轉成了text,且沒有走索引(也無索引能用)

 

從⑤出可以看出,實際使用的記憶體遠小於分配的內容,所以這裡可以判斷出問題不在記憶體

 

3.2.2 查看數據分佈情況

 

這裡可以看到數據分佈是非常均勻的,所以不存在其中一臺計算節點耗時特別長的情況

 

3.2.3 查看CPU情況

既然記憶體沒有問題,那就可以嘗試看CPU和磁碟的使用情況了

在其中計算節點使用top命令查看:

這裡是其中一臺計算節點的截圖,這裡說明僅僅對於這一條SQL而言,已經消耗了CPU100%的資源,但是整機還有相當富餘的CPU資源可用

 

3.2.4 查看磁碟情況

使用sar命令查看計算節點情況

PS:這裡僅展示一套機器(實際情況中每一臺計算節點都是相同的情況)

這裡發現iowait一列是基本都為0,但是idle也為0,此處驗證了磁碟io沒有問題,問題出在CPU上

 

3.3 問題解決

前面說到這個greenplum集群建立的時候只在每台結算節點分配了一個segment,所以每台機器上只有一個CPU是忙碌狀態的,而其他的CPU處於空閑狀態

充分的利用CPU資源,就可以顯著提高查詢的性能。

因此,對這套集群的segment進行擴容,將原來的4個segment擴容為54個,並且重新建表後將所有varchar類型換成text,將參與查詢的日期列設置為分區鍵,分佈鍵不變,仍為id列

 

3.4 最終結果

oracle 原集群 擴容後的集群
24S 14.1S 1.5S

 

 

 四、參考資料

https://www.postgresql.org/docs/9.2/static/using-explain.html

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在shell腳本中,變數分兩種,系統變數和自定義變數。 系統預設變數是系統自帶的一些變數,如path為路徑變數 用戶自定義變數為在編寫吧腳本的時候自己定義的一些變數 變數名命名規則 首個字元必須為字母“a-z和A-Z” 中間不能有空格,但是可以使用下劃線“_” 不能使用標點符號 不能使用bash中的 ...
  • 在MCU on Eclipse網站上看到Erich Styger在8月2日發的博文,一篇關於在Amazon FreeRTOS V10中使用運行時統計信息的文章,本人覺得很有啟發,特將其翻譯過來以備參考。原文網址:https://mcuoneclipse.com/2018/08/02/tutorial ...
  • 通過my.ini配置文件修改字元集:客戶端字元集設置:[mysql]default-character-set=utf8 [mysqld] character-set-server=utf8 。設置之後保存,在重啟mysql服務。登錄mysql:mysql -uroot -p (-u用戶名 -p密碼 ...
  • 占座 ...
  • 一、VM安裝(這個大家去百度吧....) 二、centos安裝 版本:centos7 ’https://jingyan.baidu.com/article/a3aad71aa180e7b1fa009676.html(具體可以看這個) 1、安裝好之後,始終用自己的用戶名操作(這個很重要,因為如果在不同 ...
  • mysql在之前寫過一次,那時是我剛剛進入博客,今天介紹一下mysql的python交互,當然前面會把mysql基本概述一下。 一、命令腳本 1、基本命令 (1)啟動服務 以管理員身份運行cmd net start 服務名稱 以管理員身份運行cmd net start 服務名稱 (2)停止服務 以管 ...
  • Solr是Apache軟體基金組織旗下的一個頂級開源項目, 是**基於Lucene的全文搜索服務**, 是一個獨立的企業級搜索應用伺服器, 可以獨立運行於Jetty, Tomcat等Web容器中. 使用Solr可以很方便地實現全文索引和搜索等一系列功能. ...
  • 1. sqlplus / as sysdba 操作系統認證,sys管理員登錄,/後面要有空格。 2. sqlplus "/ as sysdba" 操作系統認證,sys管理員登錄,/後面有無空格都可,為方便記憶,本文統一為有空格。 3. sqlplus username/pwd@TNSNAME(hos ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...