版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、MySQL優(yōu)化經(jīng)驗(yàn)作者: 來(lái)源:zz 發(fā)表時(shí)間:2006-12-12 瀏覽次數(shù): 127 字號(hào):大 中 小MySQL優(yōu)化經(jīng)驗(yàn) 聲明不是本人整理。 同時(shí)在線訪問(wèn)量繼續(xù)增大 對(duì)于1G內(nèi)存的服務(wù)器明顯感覺(jué)到吃力嚴(yán)重時(shí)甚至每天都會(huì)死機(jī) 或者時(shí)不時(shí)的服務(wù)器卡一下 這個(gè)問(wèn)題曾經(jīng)困擾了我半個(gè)多月MySQL使用是很具伸縮性的算法
2、,因此你通常能用很少的內(nèi)存運(yùn)行或給MySQL更多的被存以得到更好的性能。 安裝好mysql后,配制文件應(yīng)該在/usr/local/mysql/share/mysql目錄中,配制文件有幾個(gè),有my-f my-f my-f my-f,不同的流量的網(wǎng)站和不同配制的服務(wù)器環(huán)境,當(dāng)然需要有不同的配制文件了。 一般的情況下,my-f這個(gè)配制文件就能滿足我們的大多需要;一般我們會(huì)把配置文件拷貝到/etc/f 只需要修改這個(gè)配置文件就可以了,使用mysqladmin variables extended-status u root p 可以看到目前的參數(shù),有個(gè)配置參數(shù)是最重要的,即k
3、ey_buffer_size,query_cache_size,table_cache。 key_buffer_size只對(duì)MyISAM表起作用, key_buffer_size指定索引緩沖區(qū)的大小,它決定索引處理的速度,尤其是索引讀的速度。一般我們?cè)O(shè)為16M,實(shí)際上稍微大一點(diǎn)的站點(diǎn)這個(gè)數(shù)字是遠(yuǎn)遠(yuǎn)不夠的,通過(guò)檢查狀態(tài)值Key_read_requests和Key_reads,可以知道key_buffer_size設(shè)置是否合理。比例key_reads / key_read_requests應(yīng)該盡可能的低,至少是1:100,1:1000更好(上述狀態(tài)值可以使用SHOW STATUS LIKE key
4、_read%獲得)。 或者如果你裝了phpmyadmin 可以通過(guò)服務(wù)器運(yùn)行狀態(tài)看到,筆者推薦用phpmyadmin管理mysql,以下的狀態(tài)值都是本人通過(guò)phpmyadmin獲得的實(shí)例分析: 這個(gè)服務(wù)器已經(jīng)運(yùn)行了20天 key_buffer_size 128M key_read_requests 650759289 key_reads - 79112 比例接近1:8000 健康狀況非常好 另外一個(gè)估計(jì)key_buffer_size的辦法把你網(wǎng)站數(shù)據(jù)庫(kù)的每個(gè)表的索引所占空間大小加起來(lái)看看以此服務(wù)器為例:比較大的幾個(gè)表索引加起來(lái)大概125M 這個(gè)數(shù)字會(huì)隨著表變大而變大。 從4.0.1開(kāi)始,MyS
5、QL提供了查詢緩沖機(jī)制。使用查詢緩沖,MySQL將SELECT語(yǔ)句和查詢結(jié)果存放在緩沖區(qū)中,今后對(duì)于同樣的SELECT語(yǔ)句(區(qū)分大小寫(xiě)),將直接從緩沖區(qū)中讀取結(jié)果。根據(jù)MySQL用戶手冊(cè),使用查詢緩沖最多可以達(dá)到238%的效率。 通過(guò)調(diào)節(jié)以下幾個(gè)參數(shù)可以知道query_cache_size設(shè)置得是否合理 Qcache inserts Qcache hits Qcache lowmem prunes Qcache free blocks Qcache total blocksQcache_lowmem_prunes的值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況,同時(shí)Qcache_hits的值非常大,則
6、表明查詢緩沖使用非常頻繁,此時(shí)需要增加緩沖大小Qcache_hits的值不大,則表明你的查詢重復(fù)率很低,這種情況下使用查詢緩沖反而會(huì)影響效率,那么可以考慮不用查詢緩沖。此外,在SELECT語(yǔ)句中加入SQL_NO_CACHE可以明確表示不使用查詢緩沖。 Qcache_free_blocks,如果該值非常大,則表明緩沖區(qū)中碎片很多query_cache_type指定是否使用查詢緩沖 我設(shè)置: query_cache_size = 32M query_cache_type= 1 得到如下?tīng)顟B(tài)值: Qcache queries in cache 12737 表明目前緩存的條數(shù) Qcache inser
7、ts 20649006 Qcache hits 79060095 看來(lái)重復(fù)查詢率還挺高的 Qcache lowmem prunes 617913有這么多次出現(xiàn)緩存過(guò)低的情況 Qcache not cached 189896 Qcache free memory 18573912目前剩余緩存空間 Qcache free blocks 5328 這個(gè)數(shù)字似乎有點(diǎn)大碎片不少 Qcache total blocks 30953 如果內(nèi)存允許32M應(yīng)該要往上加點(diǎn) table_cache指定表高速緩存的大小。每當(dāng)MySQL訪問(wèn)一個(gè)表時(shí),如果在表緩沖區(qū)中還有空間,該表就被打開(kāi)并放入其中,這樣可以更快地訪問(wèn)表
8、內(nèi)容。通過(guò)檢查峰值時(shí)間的狀態(tài)值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發(fā)現(xiàn)open_tables等于table_cache,并且opened_tables在不斷增長(zhǎng),那么你就需要增加table_cache的值了(上述狀態(tài)值可以使用SHOW STATUS LIKE Open%tables獲得)。注意,不能盲目地把table_cache設(shè)置成很大的值。如果設(shè)置得太高,可能會(huì)造成文件描述符不足,從而造成性能不穩(wěn)定或者連接失敗。 對(duì)于有1G內(nèi)存的機(jī)器,推薦值是128256。 筆者設(shè)置table_cache = 256 得到以下?tīng)顟B(tài): O
9、pen tables 256 Opened tables 9046 雖然open_tables已經(jīng)等于table_cache,但是相對(duì)于服務(wù)器運(yùn)行時(shí)間來(lái)說(shuō),已經(jīng)運(yùn)行了20天,opened_tables的值也非常低。因此,增加table_cache的值應(yīng)該用處不大。如果運(yùn)行了6個(gè)小時(shí)就出現(xiàn)上述值 那就要考慮增大table_cache。 如果你不需要記錄2進(jìn)制log 就把這個(gè)功能關(guān)掉,注意關(guān)掉以后就不能恢復(fù)出問(wèn)題前的數(shù)據(jù)了,需要您手動(dòng)備份,二進(jìn)制日志包含所有更新數(shù)據(jù)的語(yǔ)句,其目的是在恢復(fù)數(shù)據(jù)庫(kù)時(shí)用它來(lái)把數(shù)據(jù)盡可能恢復(fù)到最后的狀態(tài)。另外,如果做同步復(fù)制( Replication )的話,也需要使用二
10、進(jìn)制日志傳送修改情況。 log_bin指定日志文件,如果不提供文件名,MySQL將自己產(chǎn)生缺省文件名。MySQL會(huì)在文件名后面自動(dòng)添加數(shù)字引,每次啟動(dòng)服務(wù)時(shí),都會(huì)重新生成一個(gè)新的二進(jìn)制文件。此外,使用log-bin-index可以指定索引文件;使用binlog-do-db可以指定記錄的數(shù)據(jù)庫(kù);使用binlog-ignore-db可以指定不記錄的數(shù)據(jù)庫(kù)。注意的是:binlog-do-db和binlog-ignore-db一次只指定一個(gè)數(shù)據(jù)庫(kù),指定多個(gè)數(shù)據(jù)庫(kù)需要多個(gè)語(yǔ)句。而且,MySQL會(huì)將所有的數(shù)據(jù)庫(kù)名稱改成小寫(xiě),在指定數(shù)據(jù)庫(kù)時(shí)必須全部使用小寫(xiě)名字,否則不會(huì)起作用。 關(guān)掉這個(gè)功能只需要在他前面加
11、上#號(hào) #log-bin 開(kāi)啟慢查詢?nèi)罩? slow query log ) 慢查詢?nèi)罩緦?duì)于跟蹤有問(wèn)題的查詢非常有用。它記錄所有查過(guò)long_query_time的查詢,如果需要,還可以記錄不使用索引的記錄。下面是一個(gè)慢查詢?nèi)罩镜睦樱?開(kāi)啟慢查詢?nèi)罩?,需要設(shè)置參數(shù)log_slow_queries、long_query_times、log-queries-not-using-indexes。 log_slow_queries指定日志文件,如果不提供文件名,MySQL將自己產(chǎn)生缺省文件名。long_query_times指定慢查詢的閾值,缺省是10秒。log-queries-not-using-
12、indexes是4.1.0以后引入的參數(shù),它指示記錄不使用索引的查詢。筆者設(shè)置long_query_time=10 筆者設(shè)置: sort_buffer_size = 1M max_connections=120 wait_timeout =120 back_log=100 read_buffer_size = 1M thread_cache=32 interactive_timeout=120 thread_concurrency = 4 參數(shù)說(shuō)明: back_log 要求MySQL能有的連接數(shù)量。當(dāng)主要MySQL線程在一個(gè)很短時(shí)間內(nèi)得到非常多的連接請(qǐng)求,這就起作用,然后主線程花些時(shí)間(盡管很
13、短)檢查連接并且啟動(dòng)一個(gè)新線程。back_log值指出在MySQL暫時(shí)停止回答新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中。只有如果期望在一個(gè)短時(shí)間內(nèi)有很多連接,你需要增加它,換句話說(shuō),這值對(duì)到來(lái)的TCP/IP連接的偵聽(tīng)隊(duì)列的大小。你的操作系統(tǒng)在這個(gè)隊(duì)列大小上有它自己的限制。 Unix listen(2)系統(tǒng)調(diào)用的手冊(cè)頁(yè)應(yīng)該有更多的細(xì)節(jié)。檢查你的OS文檔找出這個(gè)變量的最大值。試圖設(shè)定back_log高于你的操作系統(tǒng)的限制將是無(wú)效的。 max_connections 并發(fā)連接數(shù)目最大,120 超過(guò)這個(gè)值就會(huì)自動(dòng)恢復(fù),出了問(wèn)題能自動(dòng)解決 thread_cache 沒(méi)找到具體說(shuō)明,不過(guò)設(shè)置為32后
14、 20天才創(chuàng)建了400多個(gè)線程 而以前一天就創(chuàng)建了上千個(gè)線程 所以還是有用的 thread_concurrency #設(shè)置為你的cpu數(shù)目x2,例如,只有一個(gè)cpu,那么thread_concurrency=2 #有2個(gè)cpu,那么thread_concurrency=4 skip-innodb #去掉innodb支持代碼: # Example MySQL config medium systems. # # This is for a system with little memory (32M - 64M) where MySQL plays # an important part, or
15、 systems up to 128M where MySQL is used together with # other programs (such as a web server) # # You can copy this # /etc/f to set global options, # mysql-data-dir/f to set server-specific options (in this # installation this directory is /var/lib/mysql) or # /f to set user-specific options. # # In
16、 this file, you can use all long options that a program supports. # If you want to know which options a program supports, run the program # with the "-help" option. # The following options will be passed to all MySQL clients client #password = your_password port = 3306 socket = /tmp/mysql.
17、sock #socket = /var/lib/mysql/mysql.sock # Here follows entries for some specific programs # The MySQL server mysqld port = 3306 socket = /tmp/mysql.sock #socket = /var/lib/mysql/mysql.sock skip-locking key_buffer = 128M max_allowed_packet = 1M table_cache = 256 sort_buffer_size = 1M net_buffer_leng
18、th = 16K myisam_sort_buffer_size = 1M max_connections=120 #addnew config wait_timeout =120 back_log=100 read_buffer_size = 1M thread_cache=32 skip-innodb skip-bdb skip-name-resolve join_buffer_size=512k query_cache_size = 32M interactive_timeout=120 long_query_time=10 log_slow_queries= /usr/local/my
19、sql4/logs/slow_query.log query_cache_type= 1 # Try number of CPU's*2 for thread_concurrency thread_concurrency = 4 #end new config # Don't listen on a TCP/IP port at all. This can be a security enhancement, # if all processes that need to connect to mysqld run on the same host. # All interac
20、tion with mysqld must be made via Unix sockets or named pipes. # Note that using this option without enabling named pipes on Windows # (via the "enable-named-pipe" option) will render mysqld useless! # #skip-networking # Replication Master Server (default) # binary logging is required for
21、replication #log-bin # required unique id between 1 and 232 - 1 # defaults to 1 if master-host is not set # but will not function as a master if omitted server-id = 1 # Replication Slave (comment out master section to use this) # # To configure this host as a replication slave, you can choose betwee
22、n # two methods : # # 1) Use the CHANGE MASTER TO command (fully described in our manual) - # the syntax is: # # CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=, # MASTER_USER=, MASTER_PASSWORD= ; # # where you replace , , by quoted strings and # by the master's port number (3306 by default). # # Ex
23、ample: # # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, # MASTER_USER='joe', MASTER_PASSWORD='secret' # # OR # # 2) Set the variables below. However, in case you choose this method, then # start replication for the first time (even unsuccessfully, for exampl
24、e # if you mistyped the password in master-password and the slave fails to # connect), the slave will create a file, and any later # change in this the variables' values below will be ignored and # overridden by the content of the file, unless you shutdown # the slave ser
25、ver, delete and restart the slaver server. # For that reason, you may want to leave the lines below untouched # (commented) and instead use CHANGE MASTER TO (see above) # # required unique id between 2 and 232 - 1 # (and different from the master) # defaults to 2 if master-host is set #
26、but will not function as a slave if omitted #server-id = 2 # # The replication master for this slave - required #master-host = # # The username the slave will use for authentication when connecting # to the master - required #master-user = # # The password the slave will authenticate with when conne
27、cting to # the master - required #master-password = # # The port the master is listening on. # optional - defaults to 3306 #master-port = # # binary logging - not required for slaves, but recommended #log-bin # Point the following paths to different dedicated disks #tmpdir = /tmp/ #log-update = /pat
28、h-to-dedicated-directory/hostname # Uncomment the following if you are using BDB tables #bdb_cache_size = 4M #bdb_max_lock = 10000 # Uncomment the following if you are using InnoDB tables #innodb_data_home_dir = /var/lib/mysql/ #innodb_data_ = ibdata1:10M:autoextend #innodb_log_group_home_dir = /var
29、/lib/mysql/ #innodb_log_arch_dir = /var/lib/mysql/ # You can set ._buffer_pool_size up to 50 - 80 % # of RAM but beware of setting memory usage too high #innodb_buffer_pool_size = 16M #innodb_additional_mem_pool_size = 2M # Set ._log_ to 25 % of buffer pool size #innodb_log_ = 5M #innodb_log_buffer_
30、size = 8M #innodb_flush_log_at_trx_commit = 1 #innodb_lock_wait_timeout = 50 mysqldump quick max_allowed_packet = 16M mysql no-auto-rehash # Remove the next comment character if you are not familiar with SQL #safe-updates isamchk key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer
31、= 2M myisamchk key_buffer = 20M sort_buffer_size = 20M read_buffer = 2M write_buffer = 2M mysqlhotcopy interactive-timeout補(bǔ)充 優(yōu)化table_cachetable_cache指定表高速緩存的大小。每當(dāng)MySQL訪問(wèn)一個(gè)表時(shí),如果在表緩沖區(qū)中還有空間,該表就被打開(kāi)并放入其中,這樣可以更快地訪問(wèn)表內(nèi)容。通過(guò)檢查峰值時(shí)間的狀態(tài)值Open_tables和Opened_tables,可以決定是否需要增加table_cache的值。如果你發(fā)現(xiàn)open_tables等于table_cache,并且opened_tables在不斷增長(zhǎng),那么你就需要增加table_cache的值了(上述狀態(tài)值可以使用SHOW STATUS LIKE Open%tables獲得)。注意,不能盲目地把table_cache設(shè)置成很大的值。如果設(shè)置得太高,可能會(huì)造成文件描述符不足,從而造成性能不穩(wěn)定或者連接失敗。對(duì)于有1G內(nèi)存的機(jī)器,推薦值是128256。 案例1:該案例來(lái)自一個(gè)不是特別繁忙的服務(wù)器table_cache 512open_tables 103opened_tabl
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 《采用合理的論證方法》課件 2024-2025學(xué)年統(tǒng)編版高中語(yǔ)文選擇性必修上冊(cè)
- 2025年春九年級(jí)物理下冊(cè) 第十七、十八章綜合測(cè)試卷(蘇科版)
- 大班數(shù)學(xué)課件《簡(jiǎn)單的統(tǒng)計(jì)》
- 2024年海南考客運(yùn)資格證實(shí)操考的是什么題目
- 沈陽(yáng)城市學(xué)院《新媒體劇本創(chuàng)作》2021-2022學(xué)年第一學(xué)期期末試卷
- 沈陽(yáng)城市學(xué)院《時(shí)尚傳播》2022-2023學(xué)年第一學(xué)期期末試卷
- 勵(lì)志獎(jiǎng)學(xué)金獲獎(jiǎng)學(xué)生先進(jìn)事跡材料(5篇)
- 個(gè)人職業(yè)工作總結(jié)
- 農(nóng)民個(gè)人收入證明(5篇)
- 商場(chǎng)消防安全巡查記錄
- 幼兒園科普知識(shí)宣傳
- 中醫(yī)減肥藥方-超有效分類型
- 論現(xiàn)代外科技術(shù)的發(fā)展趨勢(shì)
- 辦公樓室外地面維修改造施工組織設(shè)計(jì)樣本
- 小學(xué)科學(xué)試卷分析存在問(wèn)題及整改措施4篇-
- 合同訂立前的風(fēng)險(xiǎn)告知與防范
- 電梯使用安全風(fēng)險(xiǎn)日管控周排查月調(diào)度管理制度及清單表
- 架構(gòu)師轉(zhuǎn)正述職報(bào)告
- 2023年廣東省普通高中學(xué)業(yè)水平合格性考試數(shù)學(xué)真題試卷含詳解
- 管道支架安裝圖集
- 保護(hù)眼睛-家長(zhǎng)進(jìn)課堂課件
評(píng)論
0/150
提交評(píng)論