第一種
複製代碼 代碼如下:#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的最佳化,是多樣化,且根據環境不同,必須靈活調整的,大家不可生搬硬套,自己慢慢體會吧