MySQL資料庫在IO性能優化方面的設置選擇(硬體)

来源:https://www.cnblogs.com/xuliuzai/archive/2019/02/19/10402826.html
-Advertisement-
Play Games

提起MySQL資料庫在硬體方面的優化無非是CPU、記憶體和IO。下麵我們著重梳理一下關於磁碟I/O方面的優化。 1.磁碟冗餘陣列RAID RAID(Redundant Array of Inexpensive Disk)的基本目的是把小型廉價的硬碟合併成一塊大容量的硬碟,用於解決數據冗餘性並降低成本, ...


提起MySQL資料庫在硬體方面的優化無非是CPU、記憶體和IO。下麵我們著重梳理一下關於磁碟I/O方面的優化。

1.磁碟冗餘陣列RAID

RAID(Redundant Array of Inexpensive Disk)的基本目的是把小型廉價的硬碟合併成一塊大容量的硬碟,用於解決數據冗餘性並降低成本,且提高數據處理性能。

1.1 RAID的優點

RAID的優點可以從高傳輸速率和容錯兩方面來闡述:

(1)提高傳輸速率。RAID通過在多個磁碟上同時存儲和讀取數據來大幅提高存儲系統的數據吞吐量(Throughput)。在RAID中,可以讓很多磁碟驅動器同時傳輸數據,而這些磁碟驅動器在邏輯上又是一個磁碟驅動器,所以使用RAID可以達到單個磁碟驅動器幾倍、幾十倍甚至上百倍的速率。這也是RAID最初想要解決的問題。因為當時CPU的速度增長很快,而磁碟驅動器的數據傳輸速率無法大幅提高,所以需要有一種方案解決二者之間的矛盾。

(2)通過數據校驗提供容錯功能。普通磁碟驅動器無法提供容錯功能,如果不包括寫在磁碟上的CRC(迴圈冗餘校驗)碼的話。RAID容錯是建立在每個磁碟驅動器的硬體容錯功能之上的,所以它提供更高的安全性。在很多RAID模式中都有較為完備的相互校驗/恢復的措施,甚至是直接相互的鏡像備份,從而大大提高了RAID系統的容錯度,提高了系統的穩定冗餘性。

1.2RAID常見類別

RAID0 數據在從記憶體緩衝區寫入磁碟時,根據磁碟數量將數據分成N份,這些數據同時併發寫入N塊磁碟,使得數據整體寫入速度是一塊磁碟的N倍。讀取時也是一樣的。因此RAID0具有極快的數據讀寫速度。但是RAID0不做數據冗餘,N塊磁碟中只要一塊損壞,數據完整性就被破壞,所有的數據都會損壞,即任何一塊硬碟的損壞都將導致數據的丟失。

 

RAID1 數據在寫入磁碟時,將一份數據同時寫入兩塊磁碟,這樣任何一塊磁碟損壞都不會導致數據丟失,插入一塊新磁碟就可以通過複製數據的方式自動修複,具有極高的可靠性。但對應的存儲能力有所降低,如兩塊相同硬碟組成的RAID1,則容量為其中一塊硬碟的大小,即磁碟利用率為50%。

 

RAID5 RAID5也是一種普遍使用的RAID類型,是一種存儲性能、數據安全和存儲成本兼顧的存儲解決方案。磁碟空間利用率要比RAID1高,存儲成本相對較低。RAID5 和RAID4、RAID3相比,校驗數據分佈在陣列中的所有磁碟上,而沒有採用專門的校驗磁碟。對於數據和校驗數據,它們的寫操作可以同時發生在完全不同的磁碟上。因此, RAID5 不存在 RAID4 中的併發寫操作時的校驗盤性能瓶頸問題。另外, RAID5 還具備很好的擴展性。當陣列磁碟 數量增加時,並行操作量的能力也隨之增長,可比 RAID4 支持更多的磁碟,從而擁有更高的容量以及更高的性能。RAID5 的磁碟上同時存儲數據和校驗數據,數據塊和對應的校驗信息存保存在不同的磁碟上,當一個數據盤損壞時,系統可以根據同一條帶的其他數據塊和對應的校驗數據來重建損壞的數據。與其他 RAID 等級一樣,重建數據時, RAID5 的性能會受到較大的影響。

 

說明:圖中零散分佈 ABCD為校驗數據

RAID10  結合RAID0和RAID1兩種方案。Raid 10其實結構非常簡單,首先創建2個獨立的Raid1,然後將這兩個獨立的Raid1組成一個Raid0,當往這個邏輯Raid中寫數據時,數據被有序的寫入兩個Raid1中。磁碟1和磁碟2組成一個Raid1,磁碟3和磁碟4又組成另外一個Raid1;這兩個Raid1組成了一個新的Raid0。如寫在硬碟1上的數據0、2、4、6 寫在硬碟2中則為數據0、2、4、6,硬碟3中的數據為1、3、5、7,硬碟4中的數據則為1、3、5、7,因此數據在這四個硬碟上組合成Raid10,且具有raid0和raid1兩者的特性。雖然Raid10方案造成了50%的磁碟浪費,但是它提供了200%的速度和單磁碟損壞的數據安全性,並且當同時損壞的磁碟不在同一Raid1中,就能保證數據安全性。假如磁碟中的某一塊盤壞了,整個邏輯磁碟仍能正常工作的。 當我們需要恢復RAID 10中損壞的磁碟時,只需要更換新的硬碟,按照RAID10的工作原理來進行數據恢復,恢複數據過程中系統仍能正常工作。原先的數據會同步恢復到更換的硬碟中。

 1.3 總結

 為資料庫伺服器配置RAID的時候,建議採用RAID10配置,儘管RAID10會更浪費空間,但它提供了更好的性能。直觀地將,採用RAID5時,由於需要更新校驗數據信息,所以每寫一次數據,都需要讀取數據奇偶信息,經過計算後,再更新校驗數據,讓後再寫入實際數據,而RAID10則是直接寫入數據。

2. 儘可能地使用SSD硬碟

SSD(Solid State Disk 或 Solid State Drive 固態硬碟)是一種基於永久性存儲器的電腦外部存儲設備。

與傳統磁碟相比,其性能非常驚艷。

特點 數據對比
高IOPS IOPS 即1秒內能夠完成的讀寫次數,是存儲性能的最直接的表現。傳統磁碟每秒差不多可以完成200次IO請求,而SSD每秒鐘可以高達60萬次。
低延遲 低延遲 即主機下達存儲指令後,存儲介質完成存儲並返回正確應答的時間。傳統磁碟由於驅動馬達轉動碟片和搖動磁頭手臂,完成單個IO需要2000微妙左右,而SSD只需要不到100微妙。
低功耗 如果使用傳統的磁碟來創建接近SSD性能的磁碟陣列總功耗高達幾百到上千瓦;而一塊PCIe SSD的功耗不會超過25瓦。
大容量 傳統磁碟容量在4TB以下,並且增長困難,而PCIe SSD已有單盤 12.8TB的容量,並且增長趨勢可期。
故障率低且可預測 傳統磁碟由於是機械部件,故障不可預測,年故障率在百分之三左右,而SSD的故障可以預測,年故障率在千分之五以內。
抗震能力強,且無噪音 傳統磁碟是機械旋轉設備,對震動敏感,甚至引發磁碟停轉,同時馬達也會發出噪音;而SSD完全是電子元件,抗震能力強,且不雜訊。

3 IO調度策略--SSD推薦設置為noop,SATA為deadline

3.1  IO調度器

每個塊設備或者塊設備的分區,都對應有自身的請求隊列(request_queue),而每個請求隊列都可以選擇一個I/O調度器來協調所遞交的requestI/O調度器的基本目的是將請求按照它們對應在塊設備上的扇區號進行排列,以減少磁頭的移動,提高效率。每個設備的請求隊列里的請求將按順序被響應。實際上,除了這個隊列,每個調度器自身都維護有不同數量的隊列,用來對遞交上來的request進行處理,而排在隊列最前面的request將適時被移動到請求隊列中等待響應。

 IO調度器在內核棧中所處位置如下:

      

 3.2 調度演算法

內核中實現的IO調度器主要有四種--Noop,Deadline,CFG, Anticipatory。

如果簡單概括總結的的話:1.NOOP 先進先出  2.Deadline 截止時間調度程式 3.CFQ 完全公平排隊I/O調度程式 4.AS(預料I/O調度程式) .

Noop調度演算法是內核中最簡單的IO調度演算法。Noop調度演算法也叫作電梯調度演算法,它將IO請求放入到一個FIFO隊列中,然後逐個執行這些IO請求,當然對於一些在磁碟上連續的IO請求,Noop演算法會適當做一些合併。這個調度演算法特別適合那些不希望調度器重新組織IO請求順序的應用。

Deadline演算法的核心在於保證每個IO請求在一定的時間內一定要被服務到,以此來避免某個請求饑餓。

CFQ(Completely Fair Queuing)演算法,顧名思義,絕對公平演算法。它試圖為競爭塊設備使用權的所有進程分配一個請求隊列和一個時間片,在調度器分配給進程的時間片內,進程可以將其讀寫請求發送給底層塊設備,當進程的時間片消耗完,進程的請求隊列將被掛起,等待調度。 每個進程的時間片和每個進程的隊列長度取決於進程的IO優先順序,每個進程都會有一個IO優先順序,CFQ調度器將會將其作為考慮的因素之一,來確定該進程的請求隊列何時可以獲取塊設備的使用權。

Anticipatory演算法的核心是局部性原理,它期望一個進程做完一次IO請求後還會繼續在此處做IO請求。在IO操作中,有一種現象叫“假空閑”(Deceptive idleness),它的意思是一個進程在剛剛做完一波讀操作後,看似是空閑了,不讀了,但是實際上它是在處理這些數據,處理完這些數據之後,它還會接著讀,這個時候如果IO調度器去處理另外一個進程的請求,那麼當原來的假空閑進程的下一個請求來的時候,磁頭又得seek到剛纔的位置,這樣大大增加了尋道時間和磁頭旋轉時間。所以,Anticipatory演算法會在一個讀請求做完後,再等待一定時間t(通常是6ms),如果6ms內,這個進程上還有讀請求過來,那麼我繼續服務,否則,處理下一個進程的讀寫請求。

對於一些非旋轉磁頭氏的存儲設備,使用Noop的效果更好。因為對於旋轉磁頭式的磁碟來說,IO調度器的請求重組要花費一定的CPU時間,但是對於SSD磁碟來說,這些重組IO請求的CPU時間可以節省下來,因為SSD提供了更智能的請求調度演算法,不需要內核去畫蛇添足。

3.3 性能對比 

以下性能Report是在SSD存儲介質下,各調度策略的性能表現。

通過數據對比,我們也可以發現:SSD推薦設置為noop。

(網上還有一個別人相關的測試報告,大家可以參閱  https://www.percona.com/blog/2009/01/30/linux-schedulers-in-tpcc-like-benchmark/)

4.其它的註意事項

例如:進程打開文件數:65535 ;文件系統:選XFS(centos7已經預設是XFS了)等等。

 

 

參考文獻:

1. https://www.cnblogs.com/cobbliu/p/5389556.html

2.《MySQL 運維內參》

3. 網路分享

 

本文版權歸作者所有,未經作者同意不得轉載,謝謝配合!!!


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

-Advertisement-
Play Games
更多相關文章
  • 1、添加源 預設情況Centos7中無Nginx的源,最近發現Nginx官網提供了Centos的源地址。因此可以如下執行命令添加源: 2、安裝Nginx 通過yum search nginx看看是否已經添加源成功。如果成功則執行下列命令安裝Nginx。 3、啟動Nginx並設置開機自動運行 執行以下 ...
  • 安裝 JDK Tomcat 的安裝依賴 JDK,在安裝 Tomcat 之前需要先安裝 Java JDK。輸入命令 java -version,如果顯示 JDK 版本,證明已經安裝了 JDK java -versionopenjdk version "1.8.0_161"OpenJDK Runtime ...
  • 1.Download MySQL Community Server 訪問mysql官方網站轉到下載頁https://dev.mysql.com/downloads/mysql/5.6.html#downloads 選擇mysql-community-5.6版本 2.解壓安裝包 3.創建用戶組,授權 ...
  • 硬體接入方式: RJ45 網線: 單片機自帶MAC+外部PHY; EN28J60 ; W5500/W5100等硬體協議棧 IC ... GPRS : SIM800C, SIM868 ... NBIOT : BC95; BC20 M5310-A; M5311 ... WIFI : ESP8266 ; ...
  • 初識 vi/vim 文本編輯器 1.vi 和 vim 相同,都是文本編輯器,在 vi 模式下可以查看文本,編輯文本,是 Linux 最常用的命令,vi 模式下分為三部分,第一部分一般模式,在一般模式中可以進行搜索字元等按鍵操作,按下 i,o,a任意一個字元就可以進入編輯模式,按 ESC 回到一般模式 ...
  • 該表羅列支持 Window Server 2016 上安裝和功能的 Microsoft 伺服器應用程式。 此信息用於快速參考,不用於替代有關單個產品的規格、要求、公告或每個伺服器應用程式的常規通信的說明。 請參考每種產品的正式文檔以充分瞭解相容性和選項。 Microsoft 伺服器應用程式已發佈Mi... ...
  • 一、Linux版本 二、複製粘貼多個JDK出來,如下 三、配置多個JDK環境變數 在/etc/profile文件後面追加如下內容 截圖如下: 四、最後不要忘記使環境配置生效 通過列印JDK環境變數來驗證JDK環境變數配置成功,如下命令 看列印出來的字元串是否與剛剛在/etc/profile里配置的內 ...
  • 一、Linux版本 二、上傳並解壓apache tomcat 7.0.90壓縮包,然後複製粘貼出來多個tomcat 解壓縮 三、複製粘貼(我是在原tomcat名稱後面直接追加 2、 3) 四、修改環境配置,添加TOMCAT_HOME等環境變數 在/etc/profile文件後面追加如下內容 如圖所示 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...