CPU 以及內存從哪些方面影響 MySQL 性能?
影響 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 肯定是大于硬盤的,所以如果能將數據緩存在內存中,這樣就不用每次去硬盤中讀取數據了,這樣的話,數據庫的效率必然還要再提升一個臺階。
內存對數據庫性能的影響有兩方面:
- 讀取效率,從內存中讀取數據肯定比從硬盤中讀取數據要快。
- 寫入效率,當內存比較大的時候,我們需要往硬盤中寫數據的時候,就不用每次都寫,可以先緩存著,攢夠了再一次性寫入(延緩寫入)。
不過我們也不能盲目的加內存,還是要在了解 MySQL 運行機制的前提下,合理加內存。
以常見的 MyISAM 和 InnoDB 存儲引擎為例:
- MyISAM 會將索引存入緩存,而數據存儲交由操作系統處理。
- InnoDB 會同時在內存中緩存數據和索引,從而提高數據庫的運行效率。
所以,如果我們選擇不同的存儲引擎,對內存的要求也是不一樣的。
另一方面需要注意,生產服務器的內存一般都比較大,如果服務器的內存是 128G,數據庫文件只有 50G,此時發現數據庫運行很慢,那么很明顯,這個時候加內存肯定是無法解決問題的,還是要具體問題具體分析。
另外在選擇內存時選擇服務器主板支持的最大內存頻率,盡量不要選擇不同品牌的內存混用;如果需要多個內存條,要確保不同內存條的頻率、電壓、校驗技術、型號等相同,同時單個內存條容量也要盡可能大(不過話說回來,如果購買云服務器,可能并不需要考慮這些)。
好啦,今天就和小伙伴們隨便扯一扯,當然影響 MySQL 性能的還有其他因素,咱們后面接著聊。
本文轉載自微信公眾號「江南一點雨」,可以通過以下二維碼關注。轉載本文請聯系江南一點雨公眾號。