mysql高併發插入慢

最近在對程序進行壓力時,發現一個接口在高併發插入時,響應很慢,大概需要15秒左右。分析記錄解決方案。

1、代碼優化

發現接口實現類中有個地方做了代碼同步控制synchorized,分析後感覺沒必要就去掉了,性能提高到7秒左右,雖然提高了,大還是不行,進一步優化。

2、數據庫配置修改

數據庫安裝時,沒有修改任何配置,全部爲默認配置,網上查詢解決方案:

 1、sync_binloginnodb_flush_log_at_trx_commit 兩個參數,這兩個參數是控制MySQL 磁盤寫入策略以及數據安全性的關鍵參數

image

於是修改這兩個參數值,注意這樣設置重啓後將會失效!!!!

set global sync_binlog=500;  
set global innodb_flush_log_at_trx_commit=2;

2、innodb_buffer_pool_size 緩衝區配置,什麼是 innodb_buffer_pool_size

MySQL 緩存表數據,索引數據的地方。增加它的值可以減少 磁盤 io ,提升 讀寫性能。

提升讀的原理:因爲 buffer_pool_size 設置的比較大, 很多表數據和索引已緩存到 buffer pool , 要查詢的數據在緩存中找到了,就不需要訪問磁盤了。讀性能就得到了提升。

提升寫的原理:因爲 buffer_pool_size 設置的比較大, 寫的數據,暫時以髒頁的方式放在內存,然後慢慢落到磁盤,如果buffer_pool_size 太小就沒辦法緩存寫操作,寫一次訪問一次磁盤 ,寫入性能就比較慢。(實際自測增大buffer_pool_size後,並未帶來純寫操作的性能提升, 這塊有待進一步研究)

設置多大的 innodb_buffer_pool_size 合適? 通常將innodb_buffer_pool_size其配置爲物理內存的50%到75%,在my.ini中設置,重啓mysql:

3、結束語

最後再進行壓力測試,性能提高到1秒左右了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章