mysql高並發效能的關鍵要素,mysql並發要素

來源:互聯網
上載者:User

mysql高並發效能的關鍵要素,mysql並發要素

作者:晴落花香

部落格:http://blog.csdn.net/qing_gee

其他網站如有轉載,請務必標明出處!

前言:最近一直在做項目的效能最佳化,經曆了一個多星期的彎路,終於找到了一個突破點,經過和同事(非常感謝,稍後他會將過程寫在他的部落格,我會把串連地址跟貼到本部落格)的努力,我們的期貨交易平台效能在服務端已經得到很好的提升。

首先我們先看一下,我的電腦(i3-3220,4G記憶體,沒有配置innodb_buffer_pool_size參數的情況下,拋開程式的效能,經過1個線程-8個線程的測試結果)環境下,大家可以看到如下的圖,線程並發情況下,時間不斷的攀升,這讓人好苦惱,說好的高效能,高並發呢?

結果:

不過經過一個多星期的努力,不經意間,我在同事的電腦上發現,同樣的代碼測試後,時間和我的不是一個等量級的,要比我的電腦快很多,他的電腦(其他條件等同,CPU為i3-4150),8個商品8000掛單下能達到135ms,首先說明CPU的提升對程式處理來說是非常有效果的,但是依然在高並發的情況下,表現的很差勁。

時至今日,通過比對mysql的設定檔my.ini,不經意間,我們發現innodb_buffer_pool_size在8M和48M的配置下,效能簡直就不在一個等級上,OK,那就繼續調查吧,最終得出如下結論

innodb_buffer_pool_size=2Ginnodb_buffer_pool_instances=1
詳細的解釋,可以看如下介紹
# InnoDB, unlike MyISAM, uses a buffer pool to cache both indexes and# row data. The bigger you set this the less disk I/O is needed to# access data in tables. On a dedicated database server you may set this# parameter up to 80% of the machine physical memory size. Do not set it# too large, though, because competition of the physical memory may# cause paging in the operating system.  Note that on 32bit systems you# might be limited to 2-3.5G of user level memory per process, so do not# set it too high.
簡單來說,就是pool-size可以緩衝索引和行資料,值越大,IO讀寫就越少,如果單純的做資料庫服務,該參數可以設定到電腦實體記憶體的80%,哇,這個參數簡直太棒了。緊接著,我們經過大量的測試發現,在 innodb_buffer_pool_size=2G和innodb_buffer_pool_instances=1的參數設定情況下,效果最優。OK
發生了什麼事請,該參數下,20個商品,各下1000單,平均時間在55ms,別逗我了,mysql,你怎麼不早一點告訴我。

所以,推薦如下,mysql在高並發讀寫情況下,並且為innodb資料表時,請設定

innodb_buffer_pool_size=2Ginnodb_buffer_pool_instances=1

總結:效能的提升是漫長並且需要大量時間的,目前我們只做好了第一步,接下來我們還需要做的更多。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.