mysql引數配置說明
修改MySQL配置vim /etc/my.cnf
mysql報出如下問題:
1.java.lang.IllegalArgumentException: Packet is larger than max_allowed_packet from server configuration of 1048576 bytes
解決如下:這個問題是因為匯入的sql檔案大於系統預設的max_allowed_packet的值
max_allowed_packet控制其通訊緩衝區的最大長度,變數值可以有一個字尾K、M或者G(可以為大寫或小寫)來表示千位元組、兆位元組或者十億位元組的單位。
在my.cnf增加 max_allowed_packet=16777216 或: max_allowed_packet=16M
2.修改back_log引數值:由預設的50修改為500.(每個連線256kb,佔用:125M)
back_log=500
show variables like 'back_log'; #檢視當前數量
back_log值指出在MySQL暫時停止回答新請求之前的短時間內多少個請求可以被存在堆疊中。也就是說,如果MySql的連線資料達到max_connections時,新來的請求將會被存在堆疊中,以等待某一連線釋放資源,該堆疊的數量即back_log,如果等待連線的數量超過back_log,將不被授予連線資源,back_log值不能超過TCP/IP連線的偵聽佇列的大小。若超過則無效,檢視當前系統的TCP/IP連線的偵聽佇列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系統為1024。對於Linux系統推薦設定為小於512的整數
3.max_connections引數值,由預設的151,修改為3000(750M)
max_connections是指MySql的最大連線數,如果伺服器的併發連線請求量比較大,建議調高此值,以增加並行連線數量,當然這建立在機器能支撐的情況下,因為如果連線數越多,介於MySql會為每個連線提供連線緩衝區,就會開銷越多的記憶體,所以要適當調整該值,不能盲目提高設值
max_connections=3000 show variables like 'max_connections';#檢視系統當前最大連線數
4.max_user_connections值,由預設的0,修改為800,max_user_connections是指每個資料庫使用者的最大連線
目前預設值為:0不受限制
max_user_connections=800 show variables like 'max_user_connections';#檢視結果值。
5.wait_timeout=28800 MySQL客戶端的資料庫連線閒置最大時間值。說得比較通俗一點,就是當你的MySQL連線閒置超過一定時間後將會被強行關閉。MySQL預設的wait-timeout 值為480個小時,故改為1年
wait_timeout=31536000
show variables like 'wait_timeout';#檢視結果值。
7.interactive_timeout:伺服器關閉互動式連線前等待活動的秒數。互動式客戶端定義為在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。
wait_timeout:伺服器關閉非互動連線之前等待活動的秒數。線上程啟動時,根據全域性wait_timeout值或全域性 interactive_timeout值初始化會話wait_timeout值,取決於客戶端型別(由mysql_real_connect()的連線選項CLIENT_INTERACTIVE定義).
這兩個引數必須配合使用。否則單獨設定wait_timeout無效
interactive_timeout=31536000
8.innodb_flush_log_trx_commit引數對InnoDB Log的寫入效能有非常關鍵的影響,預設值為1。該引數可以設定為0,1,2,解釋如下:
0:log buffer中的資料將以每秒一次的頻率寫入到log file中,且同時會進行檔案系統到磁碟的同步操作,但是每個事務的commit並不會觸發任何log buffer 到log file的重新整理或者檔案系統到磁碟的重新整理操作;
1:在每次事務提交的時候將log buffer 中的資料都會寫入到log file,同時也會觸發檔案系統到磁碟的同步;
2:事務提交會觸發log buffer到log file的重新整理,但並不會觸發磁碟檔案系統到磁碟的同步。此外,每秒會有一次檔案系統到磁碟同步操作
innodb_flush_log_trx_commit = 0
select @@innodb_flush_log_at_trx_commit; #檢視
9.query_cache_size(預設32M)
query_cache_size: 主要用來快取MySQL中的ResultSet,也就是一條SQL語句執行的結果集,所以僅僅只能針對select語句
query_cache_size=40M
10.read_buffer_size 是MySql讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySql會為它分配一段記憶體緩衝區。read_buffer_size變數控制這一緩衝區的大小。如果對錶的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變數值以及記憶體緩衝區大小提高其效能
read_buffer_size=4M
11.sort_buffer_size是MySql執行排序使用的緩衝大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。如果不能,可以嘗試增加sort_buffer_size變數的大小
sort_buffer_size=4M
12.read_rnd_buffer_size 是MySql的隨機讀緩衝區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀快取區。進行排序查詢時,MySql會首先掃描一遍該緩衝,以避免磁碟搜尋,提高查詢速度,如果需要排序大量資料,可適當調高該值。但MySql會為每個客戶連線發放該緩衝空間,所以應儘量適當設定該值,以避免記憶體開銷過大
read_rnd_buffer_size=8M
13.tmp_table_size是MySql的heap (堆積)表緩衝大小。所有聯合在一個DML指令內完成,並且大多數聯合甚至可以不用臨時表即可以完成。大多數臨時表是基於記憶體的(HEAP)表。具有大的記錄長度的臨時表 (所有列的長度的和)或包含BLOB列的表儲存在硬碟上。如果某個內部heap(堆積)表大小超過tmp_table_size,MySQL可以根據需要自動將記憶體中的heap表改為基於硬碟的MyISAM表。還可以通過設定tmp_table_size選項來增加臨時表的大小。也就是說,如果調高該值,MySql同時將增加heap表的大小,可達到提高聯接查詢速度的效果
tmp_table_size=16M