mysql高並發配置 要在mysqld下設置
1 修改back_log參數值:由默認的50修改為500.(每個連接256kb,占用:125M)
back_log=500
<pre>
back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中。也就是說,如果MySql的連接數據達到max_connections時,新來的請求將會被存在堆棧中,以等待某一連接釋放資源,該堆棧的數量即back_log,如果等待連接的數量超過back_log,將不被授予連接資源。將會報:unauthenticated user | xxx.xxx.xxx.xxx | NULL | Connect | NULL | login | NULL 的待連接進程時.
back_log值不能超過TCP/IP連接的偵聽隊列的大小。若超過則無效,查看當前系統的TCP/IP連接的偵聽隊列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系統為1024。對於Linux系統推薦設置為小於512的整數。
修改系統內核參數,)http://www.51testing.com/html/64/n-810764.html
查看mysql 當前系統默認back_log值,命令:
show variables like 'back_log'; 查看當前數量
</pre>
2 修改wait_timeout參數值,由默認的8小時,修改為30分鍾
wait_timeout=1800(單位為妙)
<pre>
我對wait-timeout這個參數的理解:MySQL客戶端的數據庫連接閑置最大時間值。
說得比較通俗一點,就是當你的MySQL連接閑置超過一定時間后將會被強行關閉。MySQL默認的wait-timeout 值為8個小時,可以通過命令show variables like 'wait_timeout'查看結果值;。
設置這個值是非常有意義的,比如你的網站有大量的MySQL鏈接請求(每個MySQL連接都是要內存資源開銷的 ),由於你的程序的原因有大量的連接請求空閑啥事也不干,白白占用內存資源,或者導致MySQL超過最大連接數從來無法新建連接導致“Too many connections”的錯誤。在設置之前你可以查看一下你的MYSQL的狀態(可用show processlist),如果經常發現MYSQL中有大量的Sleep進程,則需要 修改wait-timeout值了。
interactive_timeout:服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。
wait_timeout:服務器關閉非交互連接之前等待活動的秒數。在線程啟動時,根據全局wait_timeout值或全局 interactive_timeout值初始化會話wait_timeout值,取決於客戶端類型(由mysql_real_connect()的連接選項CLIENT_INTERACTIVE定義).
這兩個參數必須配合使用。否則單獨設置wait_timeout無效
</pre>
3修改max_connections參數值,由默認的151,修改為3000(750M)。
max_connections=3000
<pre>
max_connections是指MySql的最大連接數,如果服務器的並發連接請求量比較大,建議調高此值,以增加並行連接數量,當然這建立在機器能支撐的情況下,因為如果連接數越多,介於MySql會為每個連接提供連接緩沖區,就會開銷越多的內存,所以要適當調整該值,不能盲目提高設值。可以過'conn%'通配符查看當前狀態的連接數量,以定奪該值的大小。
MySQL服務器允許的最大連接數16384;
查看系統當前最大連接數:
show variables like 'max_connections';
</pre>
4修改max_user_connections值,由默認的0,修改為800
max_user_connections=800
<pre>
max_user_connections是指每個數據庫用戶的最大連接
針對某一個賬號的所有客戶端並行連接到MYSQL服務的最大並行連接數。簡單說是指同一個賬號能夠同時連接到mysql服務的最大連接數。設置為0表示不限制。
目前默認值為:0不受限制。
這兒順便介紹下Max_used_connections:它是指從這次mysql服務啟動到現在,同一時刻並行連接數的最大值。它不是指當前的連接情況,而是一個比較值。如果在過去某一個時刻,MYSQL服務同時有1000個請求連接過來,而之后再也沒有出現這么大的並發請求時,則Max_used_connections=1000.請注意與show variables 里的max_user_connections的區別。默認為0表示無限大。
查看max_user_connections值
show variables like 'max_user_connections';
</pre>
5 修改thread_concurrency值,由目前默認的8,修改為64
thread_concurrency=64
<pre>
thread_concurrency的值的正確與否, 對mysql的性能影響很大, 在多個cpu(或多核)的情況下,錯誤設置了thread_concurrency的值, 會導致mysql不能充分利用多cpu(或多核), 出現同一時刻只能一個cpu(或核)在工作的情況。
thread_concurrency應設為CPU核數的2倍. 比如有一個雙核的CPU, 那thread_concurrency 的應該為4; 2個雙核的cpu, thread_concurrency的值應為8.
比如:根據上面介紹我們目前系統的配置,可知道為4個CPU,每個CPU為8核,按照上面的計算規則,這兒應為:4*8*2=64
查看系統當前thread_concurrency默認配置命令:
show variables like 'thread_concurrency';
</pre>
添加skip-name-resolve,默認被注釋掉,沒有該參數
<pre>
skip-name-resolve:禁止MySQL對外部連接進行DNS解析,使用這一選項可以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!
</pre>