mysql高并發性能的關鍵要素
來源:程序員人生 發布時間:2015-02-26 21:10:40 閱讀次數:3210次
作者:晴落花香
博客:http://blog.csdn.net/qing_gee
其他網站如有轉載,請務必標明出處!
前言:最近1直在做項目的性能優化,經歷了1個多星期的彎路,終究找到了1個突破點,經過和同事(非常感謝,稍后他會將進程寫在他的博客,我會把連接地址跟貼到本博客)的努力,我們的期貨交易平臺性能在服務端已得到很好的提升。
首先我們先看1下,我的電腦(i3⑶220,4G內存,沒有配置innodb_buffer_pool_size參數的情況下,拋開程序的性能,經過1個線程⑻個線程的測試結果)環境下,大家可以看到以下的圖,線程并發情況下,時間不斷的爬升,這讓人好苦惱,說好的高性能,高并發呢?
結果:
不過經過1個多星期的努力,不經意間,我在同事的電腦上發現,一樣的代碼測試后,時間和我的不是1個等量級的,要比我的電腦快很多,他的電腦(其他條件同等,CPU為i3⑷150),8個商品8000掛單下能到達135ms,首先說明CPU的提升對程序處理來講是非常有效果的,但是仍然在高并發的情況下,表現的很低劣。
時至本日,通過比對mysql的配置文件my.ini,不經意間,我們發現innodb_buffer_pool_size在8M和48M的配置下,性能簡直就不在1個等級上,OK,那就繼續調查吧,終究得出以下結論
innodb_buffer_pool_size=2G
innodb_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⑶.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,你怎樣不早1點告知我。
所以,推薦以下,mysql在高并發讀寫情況下,并且為innodb數據表時,請設置
innodb_buffer_pool_size=2G
innodb_buffer_pool_instances=1
總結:性能的提升是漫長并且需要大量時間的,目前我們只做好了第1步,接下來我們還需要做的更多。
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈