NUMA導致的Oracle性能問題

来源:http://www.cnblogs.com/leohahah/archive/2017/05/25/6903721.html
-Advertisement-
Play Games

背景簡介: Oracle版本:11.2.0.4 OS 版本:OEL5.8 在一次Oracle的Dataguard正常switchover過程中,遇到了一個極其詭異的問題,一條主業務的SQL語句在新主庫的執行時間由之前的毫秒級別完成變成了20-60秒不等,為避免高峰業務超時必須儘快進行優化,否則只能走 ...


背景簡介:

Oracle版本:11.2.0.4   OS 版本:OEL5.8

在一次Oracle的Dataguard正常switchover過程中,遇到了一個極其詭異的問題,一條主業務的SQL語句在新主庫的執行時間由之前的毫秒級別完成變成了20-60秒不等,為避免高峰業務超時必須儘快進行優化,否則只能走回退方案。

優化過程:

其實這個語句在之前將備庫切換為snapshot備庫做測試時表現是非常良好的,但是切換之後立馬出了問題。在備庫實際執行後獲取到的執行計劃與在主庫一模一樣,如下:

獲取執行計劃的語句如下:(語句出自ITPUB大神版主lfree)

select * 
from 
table(dbms_xplan.display_cursor(NVL('&1',NULL),
      NULL,
      'ALL ALLSTATS LAST PEEKED_BINDS cost partition -projection -outline &2'));

這裡的參數1和2全部設置為空即可,此語句可以查出當前會話中上一個執行過語句的真實執行計劃。

此SQL中不涉及視圖,所以這個執行計劃是非常好的,在主庫執行也是毫秒級別的,因此同樣的執行計劃在備庫卻非常慢就很值得思考了。

接下來我利用set autot工具得到了執行此SQL後的統計信息,發現存在大量物理讀。這裡就很搞笑了,真實執行計劃中不存在表掃描,所以出現這麼多的物理讀一定是回表操作特別多,那麼為什麼回表?顯然記憶體不夠。

於是我將SGA加大至80GB(比主庫還大20GB),重啟資料庫再查,問題依舊。

我依然堅信是緩存的問題,那麼必須要搞清為何數據未被緩存至記憶體,對Oracle資料庫來說大多有2個原因:

1、數據太多,記憶體太小。

2、不是熱點數據,被LRU刷出記憶體。

首先排除第二條,原主庫60G的SGA都可以,現在80G的SGA沒理由不可以。

此外註意到一個現象,v$sgainfo中的buffer pool在接近30GB時有一個很長時間的停頓,然後才慢慢增長至接近70G(剩餘部分屬於sharedpool等)。

於是突然想到NUMA的問題,果然:

numactl --hardware的運行結果:

這就尷尬了,在/etc/grub.conf的kernel一行後添加了numa=off,重啟伺服器後果然問題被解決。

事後查看資料庫日誌找到瞭如下信息:

.

因此可以確認是操作系統未關閉NUMA特性引起的(只設置資料庫禁用NUMA的隱含參數是無用的,Oracle在11GR2之後已經預設禁用NUMA,但只是資料庫級別)。

關於Oracle NUMA的相關信息,參考官網文檔:Oracle NUMA Usage Recommendation (文檔 ID 759565.1)

名詞解釋:

什麼是NUMA:

NUMA模式是一種分散式存儲器訪問方式,處理器可以同時訪問不同的存儲器地址,大幅度提高並行性。 NUMA模式下,處理器被劃分成多個"節點"(node), 每個節點被分配有的本地存儲器空間。 所有節點中的處理器都可以訪問全部的系統物理存儲器,但是訪問本節點內的存儲器所需要的時間,比訪問某些遠程節點內的存儲器所花的時間要少得多。

--OK,註意這幾個字:大幅提高並行性。Oracle資料庫絕大多數時候進程都是串列的,除非特意設置並行度,而SQL Server也只有超過cost閾值才會並行,因此資料庫伺服器應該禁用NUMA。

關於NUMA更加詳細的信息參考:

https://www.ibm.com/developerworks/cn/linux/l-numa/index.html

https://technet.microsoft.com/zh-cn/library/ms178144(v=sql.105).aspx

http://www.cnblogs.com/yubo/archive/2010/04/23/1718810.html

 

 

 

 

 


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

-Advertisement-
Play Games
更多相關文章
  • 目錄 1.獲取當前系統時間 2.Oracle中union與union all 1.獲取當前系統時間,並做些加減運算。 2.Oracle中union與union all 如果我們需要將兩個select語句的結果作為一個整體顯示出來,我們就需要用到union或者union all關鍵字。 union和u ...
  • 本文使用的IDE是Visual Studio 2015 ,驅動程式是Neo4j官方的最新版本:Neo4j Driver 1.3.0 ,創建的類庫工程(Project)要求安裝 .NET Framework 4.6版本,Neo4j官方提供的驅動程式使用起來非常簡單,非常依賴於Cypher語言,但是,官 ...
  • 下麵簡單介紹一下如何在Ubuntu上一步一步創建一個SQL Server AG(Always On Availability Group),以及配置過程中遇到的坑的填充方法。 目前在Linux上可以搭建兩種類型的SQL Server AG,一種是高可用性的結構同時使用Cluster伺服器提供業務連續 ...
  • 1.修改配置文件 my.ini 放在 mysql\bin 2.建立data目錄,初始化資料庫 mysqld --initialize 然後會生成一個隨機密碼,一般在 data 目錄下文件名稱一般為 機器名,擴展名為 err(類似 DESKTOP-F7ST7HQ.err) 3.mysqld --ins ...
  • 方法一: 方法二: 有兩個意義上的重覆記錄,一是完全重覆的記錄,也即所有欄位均重覆的記錄,二是部分關鍵欄位重覆的記錄,比如Name欄位重覆,而其他欄位不一定重覆或都重覆可以忽略。 1、對於第一種重覆,比較容易解決,使用 就可以得到無重覆記錄的結果集。 如果該表需要刪除重覆的記錄(重覆記錄保留1條), ...
  • 接著前面的寫 選擇特殊的列 舉個慄子:我想給這些pet們過身日,我就要知道pet們的名字和他們的生日。我該怎麼辦? 操作如下: SELECT name, birth FROM pet; mysql> SELECT name, birth -> FROM pet;+ + +| name | birth ...
  • 從表檢索信息 在前面,我, 創建了一個資料庫test 進入資料庫 創建了一個表pet 插入了一些數據。那麼問題來了,我要是想要瞅一瞅我的表中的數據腫麽辦呢?莫著急,待我一一道來 SELECT語句 語句的一般格式: SELECT what_to_select FROM which_table WHER ...
  • 首先打開navicat,選擇數據傳輸。 你可以選擇一個表或者多個表,然後開始傳輸。 如果出現下圖的問題,則是時間精度不一致 解決方案,則是將數據轉換成文件存儲例如:device.sql,然後將文件中時間精度7改成6,然後執行語句即可。 insert語句直接執行,工具已經幫我們把to_date轉換成m ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...