mysql:max_connection的設定及優化

ghost丶桃子發表於2016-05-20

mysql:set-variable=max_connections設定及優化

參考下面兩篇文章:

1.mysql官方文件:http://dev.mysql.com/doc/refman/5.5/en/too-many-connections.html

飛諾網mysql優化:http://www.diybl.com/course/7_databases/mysql/myshl/2008627/128840.html

要通過修改 win2000的c:/winnt/my.ini 或者 win2003的 c:/windows/my.ini 來實現

首先,我們開啟這個檔案,先將最底部的密碼項改成其它的,這個對資料庫本身沒影響,主要是防止一些有心人獲取這個密碼,對我們不利


#This File was made using the WinMySQLAdmin 1.4 Tool

#2004-2-23 16:28:14


#Uncomment or Add only the keys that you know how works.

#Read the MySQL Manual for instructions


[mysqld]

basedir=D:/mysql

#bind-address=210.5.*.*

datadir=D:/mysql/data

#language=D:/mysql/share/your language directory

#slow query log#=

#tmpdir#=

#port=3306

set-variable   = max_connections=1500

skip-locking

#skip-networking

set-variable     = key_buffer=384M

set-variable     = max_allowed_packet=1M

set-variable     = table_cache=512

set-variable     = sort_buffer=2M

set-variable     = record_buffer=2M

set-variable     = thread_cache=8

# Try number of CPU`s*2 for thread_concurrency

set-variable     = thread_concurrency=8

set-variable     = myisam_sort_buffer_size=64M

#set-variable     = connect_timeout=5

#set-variable     = wait_timeout=5

server-id     = 1

[isamchk]

set-variable     = key_buffer=128M

set-variable     = sort_buffer=128M

set-variable     = read_buffer=2M

set-variable     = write_buffer=2M


[myisamchk]

set-variable     = key_buffer=128M

set-variable     = sort_buffer=128M

set-variable     = read_buffer=2M

set-variable     = write_buffer=2M

[WinMySQLadmin]

Server=D:/mysql/bin/mysqld-nt.exe

這個方案,整體夠用了,但是在pconnect和最大連線數上,需要研究

max_connections沒必要那麼大,我個人認為幾百就夠,否則給伺服器加大了不少負擔,經常會當機

連線超時的設定也要根據實際情況調整,大家可以自由調整,然後觀察效果如何。


下面是老高兩年前的一些建議,大家參考一下

7、MYSQL 的優化(/etc/my.cnf)

    1)確認在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”引數;

    2)確認在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”引數;

    3)如果不需要的話,可以將二進位制日誌(binlog)停掉,方法是將“log-bin”註釋掉;

    4)在記憶體允許的情況下,對一些引數進行重新配置,目標在於將大部分操作集中於記憶體中,儘量不進行磁碟操作,對於我的 MYSQL 伺服器我是如下修改的,基於 2G 記憶體情況:


    [mysqld]

    set-variable   = key_buffer=512M

    set-variable   = max_allowed_packet=4M

    set-variable   = table_cache=1024

    set-variable   = thread_cache=64

    set-variable   = join_buffer_size=32M

    set-variable   = sort_buffer=32M

    set-variable   = record_buffer=32M

    set-variable   = max_connections=512

    set-variable   = wait_timeout=120

    set-variable   = interactive_timeout=120

    set-variable   = max_connect_errors=30000

    set-variable   = long_query_time=1

    set-variable   = max_heap_table_size=256M

    set-variable   = tmp_table_size=128M

    set-variable   = thread_concurrency=8

    set-variable   = myisam_sort_buffer_size=128M


    你可以根據“show status”命令返回的狀態進行微調。我主要注意以下變數的數值,越小越好,最好為零:)

    Created_tmp_disk_tables

    Created_tmp_tables

    Created_tmp_files

    Slow_queries

另外 mysql wait_timeout 那個值設定大了沒用 做10左右就可了 (大C說得)

wait_timeout是使用長久連線時 空閒程式的控制 只要資料庫在連線狀態 他是不進行干預的 不管是否有查詢或更新操作 把這個設定小一點 再使用pconnect就比較理想了 ?

timeout的時間﹐我的經驗值是5-20﹐看你的SERVER的訪問量了~~ (夢飛說的)


訪問量越大 這個值就應該越小 否則留出的空閒程式太多 會佔用不必要的記憶體

在一個15分鐘線上3000人的論壇上 設定為3比較合適 同時開啟pconnect


資料庫連線過多的錯誤,可能的原因分析及解決辦法

分析

系統不能連線資料庫,關鍵要看兩個資料: 

1、資料庫系統允許的最大可連線數max_connections。這個引數是可以設定的。如果不設定,預設是100。最大是16384。 

2、資料庫當前的連線執行緒數threads_connected。這是動態變化的。 

檢視max_connections、max_connections的辦法見後。 


如果 threads_connected == max_connections 時,資料庫系統就不能提供更多的連線數了,這時,如果程式還想新建連線執行緒,資料庫系統就會拒絕,如果程式沒做太多的錯誤處理,就會出現類似強壇的報錯資訊。 

因為建立和銷燬資料庫的連線,都會消耗系統的資源。而且為了避免在同一時間同時開啟過多的連線執行緒,現在程式設計一般都使用所謂資料庫連線池技術。

但資料庫連線池技術,並不能避免程式錯誤導致連線資源消耗殆盡。 


這種情況通常發生在程式未能及時釋放資料庫連線資源或其他原因造成資料庫連線資源不能釋放,但強壇系統估計不會發生這種低階的程式設計錯誤。 

該錯誤的簡便的檢查辦法是,在重新整理強壇頁面時,不斷監視threads_connected的變化。如果max_connections足夠大,而threads_connected值不斷增加以至達到max_connections,那麼,就應該檢查程式了。當然,如果採用資料庫連線池技術,threads_connected增長到資料庫連線池的最大連線執行緒數時,就不再增長了。 


從強壇出錯的情況看,更大的可能性是資料庫系統沒能進行適當地配置。下面提出一點建議。供參考

讓你們的工程師把MySQL的最大允許連線數從預設的100調成32000。這就不會老出現連線過多的問題了。

檢視max_connections

進入MySQL,用命令:show variables 

檢視資料庫最大可連線數的變數值:max_connections

檢視threads_connected 

進入MySQL,用命令:show status 

檢視當前活動的連線執行緒變數值:threads_connected

設定max_connections

設定辦法是在my.cnf檔案中,新增下面的最後紅色的一行:

——————————————————————————–

[mysqld] 

port=3306 

#socket=MySQL 

skip-locking 

set-variable = key_buffer=16K 

set-variable = max_allowed_packet=1M 

set-variable = thread_stack=64K 

set-variable = table_cache=4 

set-variable = sort_buffer=64K 

set-variable = net_buffer_length=2K 
set-variable = max_connections=32000

——————————————————————————–

修改完畢後,重啟MySQL即可。當然,為了確保設定正確,應該檢視一下max_connections。

注意: 

1、雖然這裡寫的32000。但實際MySQL伺服器允許的最大連線數16384; 

2、除max_connections外,上述其他配置應該根據你們系統自身需要進行配置,不必拘泥; 

3、新增了最大允許連線數,對系統消耗增加不大。 

4、如果你的mysql用的是my.ini作配置檔案,設定類似,但設定的格式要稍作變通。

可見,mysql的優化,是多樣化,且根據環境不同,必須靈活調整的,大家不可生搬硬套,自己慢慢體會吧

轉載請註明出處:http://www.cnblogs.com/haochuang/ 8年IT工作經驗,5年測試技術與管理,2年產品與專案管理,曾參與過雲端計算雲端儲存車聯網產品研發工作; 業餘自媒體人,有技術類垂直微信公眾號;如有招聘或求職方面需求,請Mail to uetest@qq.com ;或通過 QQ:363573922 微博:@念槐聚 聯絡;


相關文章