mysql優(yōu)化配置參數(shù)
更新時間:2011年03月06日 14:46:57 作者:
mysql安裝好需要優(yōu)化配置一下,打開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和最大連接數(shù)上,需要研究max_connections沒必要那么大,我個人認(rèn)為幾百就夠,否則給服務(wù)器加大了不少負(fù)擔(dān),經(jīng)常會當(dāng)機(jī)連接超時的設(shè)置也要根據(jù)實際情況調(diào)整,大家可以自由調(diào)整,然后觀察效果如何。
第二種
7、MYSQL 的優(yōu)化(/etc/my.cnf)
1)確認(rèn)在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”參數(shù);
2)確認(rèn)在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”參數(shù);
3)如果不需要的話,可以將二進(jìn)制日志(binlog)停掉,方法是將“l(fā)og-bin”注釋掉;
4)在內(nèi)存允許的情況下,對一些參數(shù)進(jìn)行重新配置,目標(biāo)在于將大部分操作集中于內(nèi)存中,盡量不進(jìn)行磁盤操作,對于我的 MYSQL 服務(wù)器我是如下修改的,基于 2G 內(nèi)存情況:
[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
你可以根據(jù)“show status”命令返回的狀態(tài)進(jìn)行微調(diào)。我主要注意以下變量的數(shù)值,越小越好,最好為零:)
Created_tmp_disk_tables
Created_tmp_tables
Created_tmp_files
Slow_queries
另外 mysql wait_timeout 那個值設(shè)置大了沒用 做10左右就可了 (大C說得)
wait_timeout是使用長久連線時 空閑進(jìn)程的控制只要數(shù)據(jù)庫在連接狀態(tài) 他是不進(jìn)行干預(yù)的 不管是否有查詢或更新操作把這個設(shè)置小一點 再使用pconnect就比較理想了 ;)
timeout的時間﹐我的經(jīng)驗值是5-20﹐看你的SERVER的訪問量了~~ (夢飛說的)
訪問量越大 這個值就應(yīng)該越小否則留出的空閑進(jìn)程太多 會占用不必要的內(nèi)存
在一個15分鐘在線3000人的論壇上 設(shè)置為3比較合適同時打開pconnect
第三種
數(shù)據(jù)庫連接過多的錯誤,可能的原因分析及解決辦法
分析
系統(tǒng)不能連接數(shù)據(jù)庫,關(guān)鍵要看兩個數(shù)據(jù):
1、數(shù)據(jù)庫系統(tǒng)允許的最大可連接數(shù)max_connections。這個參數(shù)是可以設(shè)置的。如果不設(shè)置,默認(rèn)是100。最大是16384。
2、數(shù)據(jù)庫當(dāng)前的連接線程數(shù)threads_connected。這是動態(tài)變化的。
查看max_connections、max_connections的辦法見后。
如果 threads_connected == max_connections 時,數(shù)據(jù)庫系統(tǒng)就不能提供更多的連接數(shù)了,這時,如果程序還想新建連接線程,數(shù)據(jù)庫系統(tǒng)就會拒絕,如果程序沒做太多的錯誤處理,就會出現(xiàn)類似強(qiáng)壇的報錯信息。
因為創(chuàng)建和銷毀數(shù)據(jù)庫的連接,都會消耗系統(tǒng)的資源。而且為了避免在同一時間同時打開過多的連接線程,現(xiàn)在編程一般都使用所謂數(shù)據(jù)庫連接池技術(shù)。
但數(shù)據(jù)庫連接池技術(shù),并不能避免程序錯誤導(dǎo)致連接資源消耗殆盡。
這種情況通常發(fā)生在程序未能及時釋放數(shù)據(jù)庫連接資源或其他原因造成數(shù)據(jù)庫連接資源不能釋放,但強(qiáng)壇系統(tǒng)估計不會發(fā)生這種低級的編程錯誤。
該錯誤的簡便的檢查辦法是,在刷新強(qiáng)壇頁面時,不斷監(jiān)視threads_connected的變化。如果max_connections足夠大,而threads_connected值不斷增加以至達(dá)到max_connections,那么,就應(yīng)該檢查程序了。當(dāng)然,如果采用數(shù)據(jù)庫連接池技術(shù),threads_connected增長到數(shù)據(jù)庫連接池的最大連接線程數(shù)時,就不再增長了。
從強(qiáng)壇出錯的情況看,更大的可能性是數(shù)據(jù)庫系統(tǒng)沒能進(jìn)行適當(dāng)?shù)嘏渲谩O旅嫣岢鲆稽c建議。供參考
讓你們的工程師把MySQL的最大允許連接數(shù)從默認(rèn)的100調(diào)成32000。這就不會老出現(xiàn)連接過多的問題了。
查看max_connections
進(jìn)入MySQL,用命令:show variables
查看數(shù)據(jù)庫最大可連接數(shù)的變量值:max_connections
查看threads_connected
進(jìn)入MySQL,用命令:show status
查看當(dāng)前活動的連接線程變量值:threads_connected
設(shè)置max_connections
設(shè)置辦法是在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即可。當(dāng)然,為了確保設(shè)置正確,應(yīng)該查看一下max_connections。
注意:
1、雖然這里寫的32000。但實際MySQL服務(wù)器允許的最大連接數(shù)16384;
2、除max_connections外,上述其他配置應(yīng)該根據(jù)你們系統(tǒng)自身需要進(jìn)行配置,不必拘泥;
3、添加了最大允許連接數(shù),對系統(tǒng)消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,設(shè)置類似,但設(shè)置的格式要稍作變通。
可見,mysql的優(yōu)化,是多樣化,且根據(jù)環(huán)境不同,必須靈活調(diào)整的,大家不可生搬硬套,自己慢慢體會吧
復(fù)制代碼 代碼如下:
#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和最大連接數(shù)上,需要研究max_connections沒必要那么大,我個人認(rèn)為幾百就夠,否則給服務(wù)器加大了不少負(fù)擔(dān),經(jīng)常會當(dāng)機(jī)連接超時的設(shè)置也要根據(jù)實際情況調(diào)整,大家可以自由調(diào)整,然后觀察效果如何。
第二種
7、MYSQL 的優(yōu)化(/etc/my.cnf)
1)確認(rèn)在“[mysqld]”部分加入了“skip-innodb”和“skip-bdb”參數(shù);
2)確認(rèn)在“[mysqld]”部分加入了“skip-name-resolve”和“skip-locking”參數(shù);
3)如果不需要的話,可以將二進(jìn)制日志(binlog)停掉,方法是將“l(fā)og-bin”注釋掉;
4)在內(nèi)存允許的情況下,對一些參數(shù)進(jìn)行重新配置,目標(biāo)在于將大部分操作集中于內(nèi)存中,盡量不進(jìn)行磁盤操作,對于我的 MYSQL 服務(wù)器我是如下修改的,基于 2G 內(nèi)存情況:
復(fù)制代碼 代碼如下:
[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
你可以根據(jù)“show status”命令返回的狀態(tài)進(jìn)行微調(diào)。我主要注意以下變量的數(shù)值,越小越好,最好為零:)
Created_tmp_disk_tables
Created_tmp_tables
Created_tmp_files
Slow_queries
另外 mysql wait_timeout 那個值設(shè)置大了沒用 做10左右就可了 (大C說得)
wait_timeout是使用長久連線時 空閑進(jìn)程的控制只要數(shù)據(jù)庫在連接狀態(tài) 他是不進(jìn)行干預(yù)的 不管是否有查詢或更新操作把這個設(shè)置小一點 再使用pconnect就比較理想了 ;)
timeout的時間﹐我的經(jīng)驗值是5-20﹐看你的SERVER的訪問量了~~ (夢飛說的)
訪問量越大 這個值就應(yīng)該越小否則留出的空閑進(jìn)程太多 會占用不必要的內(nèi)存
在一個15分鐘在線3000人的論壇上 設(shè)置為3比較合適同時打開pconnect
第三種
數(shù)據(jù)庫連接過多的錯誤,可能的原因分析及解決辦法
分析
系統(tǒng)不能連接數(shù)據(jù)庫,關(guān)鍵要看兩個數(shù)據(jù):
1、數(shù)據(jù)庫系統(tǒng)允許的最大可連接數(shù)max_connections。這個參數(shù)是可以設(shè)置的。如果不設(shè)置,默認(rèn)是100。最大是16384。
2、數(shù)據(jù)庫當(dāng)前的連接線程數(shù)threads_connected。這是動態(tài)變化的。
查看max_connections、max_connections的辦法見后。
如果 threads_connected == max_connections 時,數(shù)據(jù)庫系統(tǒng)就不能提供更多的連接數(shù)了,這時,如果程序還想新建連接線程,數(shù)據(jù)庫系統(tǒng)就會拒絕,如果程序沒做太多的錯誤處理,就會出現(xiàn)類似強(qiáng)壇的報錯信息。
因為創(chuàng)建和銷毀數(shù)據(jù)庫的連接,都會消耗系統(tǒng)的資源。而且為了避免在同一時間同時打開過多的連接線程,現(xiàn)在編程一般都使用所謂數(shù)據(jù)庫連接池技術(shù)。
但數(shù)據(jù)庫連接池技術(shù),并不能避免程序錯誤導(dǎo)致連接資源消耗殆盡。
這種情況通常發(fā)生在程序未能及時釋放數(shù)據(jù)庫連接資源或其他原因造成數(shù)據(jù)庫連接資源不能釋放,但強(qiáng)壇系統(tǒng)估計不會發(fā)生這種低級的編程錯誤。
該錯誤的簡便的檢查辦法是,在刷新強(qiáng)壇頁面時,不斷監(jiān)視threads_connected的變化。如果max_connections足夠大,而threads_connected值不斷增加以至達(dá)到max_connections,那么,就應(yīng)該檢查程序了。當(dāng)然,如果采用數(shù)據(jù)庫連接池技術(shù),threads_connected增長到數(shù)據(jù)庫連接池的最大連接線程數(shù)時,就不再增長了。
從強(qiáng)壇出錯的情況看,更大的可能性是數(shù)據(jù)庫系統(tǒng)沒能進(jìn)行適當(dāng)?shù)嘏渲谩O旅嫣岢鲆稽c建議。供參考
讓你們的工程師把MySQL的最大允許連接數(shù)從默認(rèn)的100調(diào)成32000。這就不會老出現(xiàn)連接過多的問題了。
查看max_connections
進(jìn)入MySQL,用命令:show variables
查看數(shù)據(jù)庫最大可連接數(shù)的變量值:max_connections
查看threads_connected
進(jìn)入MySQL,用命令:show status
查看當(dāng)前活動的連接線程變量值:threads_connected
設(shè)置max_connections
設(shè)置辦法是在my.cnf文件中,添加下面的最后紅色的一行:
--------------------------------------------------------------------------------
復(fù)制代碼 代碼如下:
[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即可。當(dāng)然,為了確保設(shè)置正確,應(yīng)該查看一下max_connections。
注意:
1、雖然這里寫的32000。但實際MySQL服務(wù)器允許的最大連接數(shù)16384;
2、除max_connections外,上述其他配置應(yīng)該根據(jù)你們系統(tǒng)自身需要進(jìn)行配置,不必拘泥;
3、添加了最大允許連接數(shù),對系統(tǒng)消耗增加不大。
4、如果你的mysql用的是my.ini作配置文件,設(shè)置類似,但設(shè)置的格式要稍作變通。
可見,mysql的優(yōu)化,是多樣化,且根據(jù)環(huán)境不同,必須靈活調(diào)整的,大家不可生搬硬套,自己慢慢體會吧
您可能感興趣的文章:
相關(guān)文章
MySQL中建表時可空(NULL)和非空(NOT NULL)的用法詳解
這篇文章主要介紹了MySQL中建表時可空(NULL)和非空(NOT NULL)的用法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07php基礎(chǔ)之連接mysql數(shù)據(jù)庫和查詢數(shù)據(jù)
這篇文章主要介紹了php連接mysql數(shù)據(jù)庫和查詢數(shù)據(jù)的方法和示例,需要的朋友可以參考下2014-08-08MSSQL根據(jù)ID進(jìn)行分頁實現(xiàn)方法
本文將詳細(xì)介紹MSSQL根據(jù)ID進(jìn)行分頁實現(xiàn)方法,需要的朋友可以參考下2012-11-11一個小時學(xué)會MySQL數(shù)據(jù)庫(張果)
當(dāng)前大量的網(wǎng)站使用php語言,那么對應(yīng)的就是mysql數(shù)據(jù)庫,這里就為大家分享一下MySQL數(shù)據(jù)庫的相關(guān)知識,希望大家多多支持腳本之家2018-01-01