CPU资源和可用内存大小
生活随笔
收集整理的這篇文章主要介紹了
CPU资源和可用内存大小
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
從上一節我們舉得例子可以看到,每當大促系統繁忙的時候,我們可以監控到的CPU資源,內存資源都是十分緊張的,特別是對于一些計算密集型的應用,CPU越可能是影響整個系統的功能,成為系統的瓶頸,所以首先對MYSQL性能又影響的呢,就是這兩種資源,也就是CPU資源,和可用的內存大小,另外一方面就是咱們工作所需要的熱數據大小遠遠大于可用內存大小時,IO系統就可能成為我們的瓶頸,網絡我們也可以看做是另外一種IO資源,網絡往往發生在大量數據被查詢時,特別是我們使用Memcache這種存儲引擎,當緩存大量生效時,就會產生大量的網絡傳輸,從而影響服務器的性能,所以當出現IO系統瓶頸時,最有效的方法就是升級IO子系統,來增加可用內存,網絡及IO資源呢,也是堆數據庫性能影響的第二個硬件因素,下面我們會分別介紹服務器硬件會對MYSQL性能有什么樣的影響,和如何對他們進行優化,首先來看我們如何來選擇CPU,經常有人會問我這樣的問題,我們是需要更多地CPU呢,還是需要更快的CPU,這個在我們升級服務器,或者是在購買服務器硬件的時候,經常會被采購硬件的同事問到,他經常要求我們選擇我們所需要的CPU的頻率和CPU的數量,當然完美的情況下我們都想做到最好,我們想要最高頻率的CPU,同時也想要更多的核心數,但是現實往往是很殘酷的,有些原因只能讓我們選擇一種,其中某些原因還是成本的因素,那我們首先要有一些了解之后才能做正確的選擇,首先我們要看我們的應用是否是CPU密集型的,而對于CPU密集型的應用呢,要加快SQL語句的處理速度,顯然是更好的CPU,不是更多的CPU,這里還有一點要注意,我們之前也提到過,對于目前版本的MYSQL而言,不支持對多CPU的對同一SQL并發處理,也就是不管CPU多復雜,或者多簡單,我們只能用到一個CPU的核心進行處理,這時多個CPU對提高SQL的處理效率呢,顯然是沒有幫助的,接下來我們還要研究系統的并發量如何呢?雖然單個SQL無法利用到多個CPU的資源,而如果我們要提高系統的吞吐量呢,并發處理量呢,那么這個時候我們就需要CPU數量越多越好,我們來想象一下,如果一個CPU可以處理一個SQL,那是不是40個CPU可以處理40個SQL
細心地朋友可能發現到了,之前我們定義了衡量數據庫處理能力的指標,QPS,指的是同時處理SQL的數量,這里要強調一下的是,QPS是每秒鐘處理SQL的數量,而這里所說的并發處理SQL的次數,可能是在納秒級的,這完全取決于SQL的執行情況,MYSQL大量的被應用到WEB類應用中,這里應用通常是非常大的,所以在這種情況下,CPU的數量可能比頻率就更加重要一些,同時我們還要考慮使用MYSQL的使用版本,MYSQL的版本也會決定如何選擇CPU,老版本的MYSQL對多核的支持都不知道,對于MYSQL5.0之前的版本,是非常嚴重的,而對于MYSQL5.6來說呢,對于多核CPU的支持已經有了很大的改善,我們可以放心的使用16核,32核這樣的CPU,所以要使用多個CPU的話,還要建議大家使用最新的MYSQL,達到最好的性能,關于如何使用CPU還有最后一個問題,也需要我們來注意的,這個問題現在來說已經不是問題了,就是我們選擇32位的CPU還是64位的CPU,這個選項現在來看已經是完全多余的,因為64位架構的CPU呢,現在已經成為一種默認的配置了,我們現在想買32位的服務器可能也已經買不到了,同時MYSQL的64位的CPU呢,做到了完美的支持,所以下面的注意事項才是我們的選項的重點,在64位架構CPU上,使用32位的操作系統,大家不要以為這種情況是很難發生的,其實這種情況是經常發生的,特別是在一些云服務器,或虛擬主機上,當然有些公司的服務器上也會出現這種情況,這一般是因為運維人員在按照操作系統的時候,使用了錯誤的版本系統而造成的,不要小看忽略這個問題,對于一些大公司,也可能出現這樣的錯誤,特別是對于一些非生產環境,比如說開發和測試環境,更容易出現這種情況了,32位的操作系統呢,意味著我們不能使用大量的內存,而且在32位系統上,任何一個單獨的進程呢,不能存儲4G以上的內存,所以大家要知道,MYSQL本身是一個單線程的服務,所以如果我們使用了32位的操作系統,實際上對MYSQL有一個極大的限制,所以大家要注意這一點,說完了CPU,我們來說說內存,內存的大小直接影響數據庫的性能,目前內存的IO效率呢要遠遠高于磁盤,就是和SSD和Fushion-IO相比呢,內存的IO速率也要高的多
所以把數據緩存到內存中,進行讀取,可以大大提高數據庫的性能
常用的MYSQL存儲引擎中呢,MyISAM會把索引緩存到內存中,數據通過操作系統來緩存
而InnoDB是在內存中同時緩存索引和數據,從而提高數據庫的運行效率
關于內存的配置呢,有幾個提示需要大家注意,內存雖然是越多越好,但是對于性能的影響也是有個限度的,我們不能指望通過增加內存無限的增加系統的性能
數據庫可以利用的內存是有限的,一般當緩存的數據和磁盤上已有的數據呢,一樣時,就是當所有的數據都被緩存到緩存后,會增加緩存內存的大小,就沒有意義了,如果我們數據文件是100個G,如果我們的內存只有64個G的情況下,增加內存,擴大數據庫的緩存區大小來獲取性能的提升,如果我們的數據文件是100個G,而我們的內存已經是256個G了,那你數據庫的緩存池呢,大小達不到196個G的情況下,就不能指望通過增加服務器內存的方式來獲得性能提升,當然這個也不是絕對的,雖然數據庫不能應用多出來的內存,但是多用內存也會增加操作系統等其他服務的性能,緩存不但會對讀有益處,同時也會對寫有益處,關于緩存的一個常見的誤區就是,只有讀在緩存中受益
如果有足夠的內存,就完全可以避免磁盤讀取的請求,如果所有的數據都可以放到內存中,一旦所有緩存數據熱起來,所有數據被緩存起來之后,所有的讀操作都會在緩存中,但是寫入是不同的問題,寫入可以像讀一樣,在內存中完成,但是遲早我們要把寫到內存的數據寫入到磁盤上,但是雖然是這樣的,緩存對寫入還是有好的影響
他雖然不能避免磁盤的寫入操作,但是可以對寫操作進行延緩,把多次寫入變成一次寫入
比如我們電商網站中,對每一個產品會有一個瀏覽的計數器,如果每次用戶查詢這個商品的時候呢,顯然會造成大量的IO操作,如果我們只更新內存的計數器,當技術器增長到100以后,再統一寫入到磁盤,這樣就把100次寫入就變成了1次操作,從而增加了服務器的性能,數據庫就提供了類似的一些功能,可以在緩存池中,把對同一數據庫的寫操作呢,合并成一次,然后最后寫入到磁盤設備上,那么我們如何配置內存呢,涉及到內存的選擇問題,這里還有一個建議,就是內存的主頻和CPU的主頻是類似的,所以撿一塊大家選擇服務器主頻最高的內存,頻率越高表示內存的讀取速度越快,因此我們選擇內存時,應該選擇主板支持的主頻最高的內存,應該注意的是,服務器內存通常來說呢,是組成購買升級的,每個通道盡量使用相同的品牌,相同顆粒,相同電壓,相同校驗技術,相同型號的內存條,另外呢我們選擇的單條容量要盡量大,這就意味著我們所花費的成本呢,會增加
當然也可以根據我們數據庫的大小來選擇合適的內存,比如我們目前的數據庫,可能有100個G,我們選擇128G內存就已經足夠了,但是還是要考慮到數據的增長速度,以及增長幅度的因素,來選擇更大的內存,比如256G呢
?
總結
以上是生活随笔為你收集整理的CPU资源和可用内存大小的全部內容,希望文章能夠幫你解決所遇到的問題。