天天看點

CPU 以及記憶體從哪些方面影響 MySQL 性能?

松哥原創的 Spring Boot 視訊教程已經殺青,感興趣的小夥伴戳這裡-->Spring Boot+Vue+微人事視訊教程

影響 MySQL 性能的因素很多,今天咱們來看看 CPU 和記憶體是如何影響 MySQL 性能的,以及我們在購買伺服器的時候,該如何挑選這些配置。

CPU

在挑選資料庫伺服器的時候,是買多核 CPU 還是高主頻 CPU?相信有小夥伴可能遇到過類似的問題,作為開發工程師,公司負責采購的小夥伴可能會向我們抛出上面這個問題,那麼該如何回答呢?

有人說我既要多核又要高主頻,抱歉,很多時候公司的預算都是有限的,沒法做到魚與熊掌兼得。這個時候我們就需要了解一點 MySQL 的運作機制了,根據 MySQL 的運作機制來确定到底該選什麼樣的 CPU!

首先我們要看我們的應用是不是 CPU 密集型,即是不是計算密集型。如果是 CPU 密集型應用,那麼我們要加快 SQL 語句的處理速度,這個時候 CPU 的頻率顯然就比核數重要了。另外,MySQL 不支援多 CPU 對同一 SQL 并發處理,也就是說,不管 CPU 多強或多弱,我們隻能用一個 CPU 核心來處理這一條 SQL,多個 CPU 對提高一個 SQL 的處理效率是沒有幫助的。

如果我們要提高系統的并發量,這個時候就要考慮 CPU 的核數問題了。多個 CPU 雖然無法提高一條 SQL 的執行效率,但是可以提高 SQL 的并發量,在同一時間,一個 CPU 可以處理一條 SQL,那麼要是有 10 個 CPU 就可以同時處理 10 條 SQL,這樣就可以有效提高 QPS。

現在小夥伴們出去找工作,很多網際網路公司都是用的 MySQL,這種網際網路應用最大的特征就是高并發,那麼毫無疑問,對于這種應用,我們應該考慮多核 CPU。

老版本的 MySQL 對于多核 CPU 的支援并不完美,是以如果我們選擇多核 CPU,應該考慮使用目前最新版的 MySQL,最新版的 MySQL 對多核 CPU 的支援更加流暢。

另外大家還需要注意不要在 64 位的 CPU 上運作 32 位的伺服器。

記憶體

記憶體的磁盤 IO 肯定是大于硬碟的,是以如果能将資料緩存在記憶體中,這樣就不用每次去硬碟中讀取資料了,這樣的話,資料庫的效率必然還要再提升一個台階。

記憶體對資料庫性能的影響有兩方面:

  1. 讀取效率,從記憶體中讀取資料肯定比從硬碟中讀取資料要快。
  2. 寫入效率,當記憶體比較大的時候,我們需要往硬碟中寫資料的時候,就不用每次都寫,可以先緩存着,攢夠了再一次性寫入(延緩寫入)。

不過我們也不能盲目的加記憶體,還是要在了解 MySQL 運作機制的前提下,合理加記憶體。

以常見的 MyISAM 和 InnoDB 存儲引擎為例:

  • MyISAM 會将索引存入緩存,而資料存儲交由作業系統處理。
  • InnoDB 會同時在記憶體中緩存資料和索引,進而提高資料庫的運作效率。

是以,如果我們選擇不同的存儲引擎,對記憶體的要求也是不一樣的。

另一方面需要注意,生産伺服器的記憶體一般都比較大,如果伺服器的記憶體是 128G,資料庫檔案隻有 50G,此時發現資料庫運作很慢,那麼很明顯,這個時候加記憶體肯定是無法解決問題的,還是要具體問題具體分析。

另外在選擇記憶體時選擇伺服器主機闆支援的最大記憶體頻率,盡量不要選擇不同品牌的記憶體混用;如果需要多個記憶體條,要確定不同記憶體條的頻率、電壓、校驗技術、型号等相同,同時單個記憶體條容量也要盡可能大(不過話說回來,如果購買雲伺服器,可能并不需要考慮這些)。

好啦,今天就和小夥伴們随便扯一扯,當然影響 MySQL 性能的還有其他因素,咱們後面接着聊。