mysql 資料庫的優化
最近一直在搞mysql資料庫的配置和優化,下面記錄一下這些天研究的結果,以方便以後檢視。
一、伺服器的硬體的優化
對mysql伺服器來說主要從以下幾個方面來考慮:
1、磁碟尋道能力(磁碟i/o)
因為mysql每一秒都在進行著大量的、複雜的查詢操作,對磁碟的讀寫可想而知,所以通常認為磁碟的i/o是制約mysql效能的最大因素之一。如果磁碟的i/o效能不好,造成的直接後果就是mysql的效能非常低下,對於這種情況可以考慮使用raid1+0。對於硬碟來說最好選那種轉速比較快的,這樣資料的操作的效率也會有大的提高。
2、cpu對於mysqlr 影響也是不容忽視的,要選擇運算能力強悍的cpu.
3、記憶體不要小於2gb,最好使用4gb以上的物理記憶體。
4、伺服器選擇上可以dell的r710 2顆cpu(雙四核) 16g記憶體(這個可以擴充套件的)硬碟有兩種選擇:乙個是300g、15000r的,一種是500g的7200r的 可以根據自己的需要來選擇。也可選hp的dl580g5。我在工作中使用的dell的r710。
二、mysql配置檔案的優化
mysql在伺服器上安裝最好是選擇原始碼編譯安裝。對於mysql的優化主要是在/etc/my.cnf這個檔案中來修改一些引數。
在這個檔案中主要的引數是在[mysqld]這部分中,這部分中主要包括了mysqld服務啟動引數,它涉及的方面很多,其中有mysql的目錄檔案和檔案、通訊、網路、資訊保安、記憶體管理、優化、查詢快取區,還有mysql的日誌設定等。下面就來看一下這個有檔案中的引數:
port = 3306
// mysql服務的執行時的埠
socket = /tmp/mysql.sock
//socket檔案是在linux/unix環境下特有的,使用者在linux/unix環境下客戶端連線可以不通過tcp/ip網路而直接使用unix socket連線mysql。
skip-locking
//避免mysql的外部鎖定,減少出錯率,增強穩定性。
skip-name-resolve
//禁止mysql對外部連線進行dns解析,使用這一選項可以消除mysql進行dns解析的時間。但需要注意的是,如果開啟該選項,財所有遠端主機連線授權都要使用ip位址的方式了,否則mysql將無法正常處理連線請求!
back_log = 256
//back_log引數的值指出在mysql暫時停止響應新請求之前,短時間內多少個請求可以被存在堆疊中。如果系統在短時間內有很多連線,則需要增大該引數的值,該引數值指定到來的tcp/ip連線的監聽佇列的大小。不同作業系統在這個佇列的大小上有自己的限制。如果試圖將back_log設定得高於作業系統的限制將是無效的。其預設值為50。對於linux系統而言,推薦設定為小於512的整數。
key_buffer_size = 256
//指定用於索引的緩衝區大小,增加它可得到更好的索引處理效能。對於記憶體4gb左右的伺服器來說,該引數可設定為256mb或者384mb。
max_allowed_packet = 1m
//設定在網路傳輸中一次訊息量的最大值。系統預設為1mb,最大值1gb,必須設定為1024的倍數,單位為位元組。
thread_stack = 192k
//設定mysql每個執行緒的堆疊大小,預設值足夠大,可滿足普通操作。可設定範圍為128kb至4gb。預設為192kb。
table_cache = 614k (mysql 5.1.3之後這個設定就變為了table_open_cache)
//指示表高速緩衝區的大小。當mysql訪問乙個表時,如果在mysql表緩衝區中還有空間,那麼這個表就被開啟並放入表緩衝區,這樣做的好處是可以更快速地訪問表中的內容。一般來說,可以檢視資料庫執行峰值時間的狀態值open_tables和opened_tables,用以判斷是否需要增加table_cache的值,即如果open_cache的接近table_cache的時候,並且opened_tables這個值在逐漸增加,那就要考慮增加這個值的大小了。
sort_buffer_size = 6m
//設定查詢排序時使用的緩衝區大小,系統預設大小為2mb。注意::這個引數對應的分配記憶體是每個連線獨佔的,如果有100個連線,那麼實際分配的總排序緩衝區大小為100x6=600mb。所以,對於內存在4gb左右的伺服器來說,推薦將其設定為6mb到8mb
read_buffer_size = 2m
//讀查詢操作所能使用的緩衝區大小。和sort_buffer_size一樣,該引數對應的分配記憶體也是每個連線獨享。
join_buffer_size = 4m
//聯合查詢操作所能使用的緩衝區大小,和sort_buffer_size一樣,該引數對應的分配記憶體也是每個連線獨享。
myisam_sort_buffer_size = 8m
//設定在repair table或用careate index建立索引或alter table 的過程中排序索引所分配的緩衝區大小,可設定範圍4bytes到4gb,預設為8mb。
thread_cache_size = 64
//設定thread cache池中可以快取的連線線程的最大數量,可以設定為0~16384,預設為0。這個值表示可以重新利用儲存在快取中線程的數量。當斷開連線時如果快取中還有空間,那麼客戶端的執行緒將被放到快取中;如果執行緒重新被請求,那麼請求將從快取中讀取;如果快取中是空的或者是新的請求,那麼這個執行緒將被重新建立;如果有很多新的執行緒,增加這個值可以改善系統效能。通過比較connections和threads_created狀態的變數,可以看到這個變數的作用。我們可以根據物理記憶體設定規則如下:1gb記憶體我們配置為8,2gb記憶體我們配置為16,3gb我們配置為32,4gb或更大的我們給此值為64或更大的數值。
query_cache_size=256m
//指定mysql查詢緩衝的大小。可以通過在mysql控制台觀察,如果qcache_lowmem_prunes的值非常大,則表明經常出現緩衝不夠的情況;如果qcache_hits的值非常大,則表明查詢緩衝使用得非常頻繁。另外,如果該值較小反而會影響效率,那麼可以考慮不用查詢緩衝。對於qcache_free_block,如果該值非常大,則表明緩衝區中碎片很多。
tmp_table_size = 256m
//設定記憶體臨時表最大值。如果超過該值,則將會把臨時表寫入磁碟,其範圍為1kb到4gb。
max_connections = 5000
//指定mysql允許的最大連線程序數。如果在訪問論壇時經常出現too many connections的錯誤提示,則需要增大該引數值。
max_connect_errors = 6000
//設定每個主機的連線請求異常中斷的最大次數,當超過該次數,mysql伺服器將禁止host的連線請求,直到mysql伺服器重新啟動或通過flush hosts 命令清空此host的相關資訊。
wait_timeout = 120
//指定乙個請求的最大連線時間,對於4gb左右記憶體的伺服器來說,可以將其設定為5~10.
thread_concurrency = 8
//該引數取值為伺服器邏輯cpu數量x2,在本例中,伺服器有兩個物理cpu,而每個物理cpu又支援h.t超執行緒,所以實際取值為4x2=8。這也是目前雙四核主流伺服器的配置。
skip-networking
//開啟該選項可以徹底關閉mysql的tcp/ip連線方式,如果web伺服器是以遠端連線的方式訪問mysql資料庫伺服器的,則不要開啟該選項,否則將無法正常連線!
table_cache = 614 (這個在5.1.3後就變成了table_open_cache)
//給經常訪問的表分配的記憶體,物理記憶體越大,設定就越大。調大這個值,一般情況下可以降低磁碟io,但是相應的會占用更多的物理記憶體,這這裡設定為614
innodb_addition_mem_pool_size = 1m
//預設為1mb
innodb_flush_log_at_trx_commit = 1
//設定為0就是等到innodb_log_buffer_size列隊滿後再統一儲存,預設為1,也是最安全的設定。
innodb_log_buffer_size = 2m
//預設為1mb,通常設定為8~16mb就足夠了。
innodb_thread_concurrency = 8
//你的伺服器有幾個cpu就設定為幾,建議用預設設定,一般為8.
read_rnd_buffer_size = 16m
//設定進行隨機讀的時候所使用的緩衝區。此引數和read_buffer_size所設定的buffer相反,乙個是順序讀的時候使用,乙個是隨機讀的時候使用。但是兩者都是針對執行緒的設定,每個執行緒都可以產生兩種buffer中的任何乙個。read_rnd_buffer_size的預設值256kb,最大值4gb。
以上只一些理論參考值,很多時候需要具體情況具體分析,其他引數的變更我們可以等mysql上線穩定一段時間後再根據status值進行調整。
Linux資料庫伺服器的效能調優
資料庫伺服器需要耗用大量系統資源,伺服器效能高度依賴於核心管理這些資源的有效程度。這方面的低效率會導致在核心空間中耗費過多時間。另外,某些特定的低效情況會導致鎖衝突,這會導致擴充套件性低下和序列化問題。這兩個問題都會嚴重影響資料庫效能,因為這兩個問題或者消耗正常情況下應提供給資料庫使用的cpu週期,...
資料庫伺服器的效能調優 續
一 程序管理 企業級資料庫伺服器可能擁有數千個併發訪問資料庫的使用者。某些使用者可能執行只需較少處理能力的簡單事務,而其他使用者則可能執行涉及更多系統資源的複雜事務。資料庫效能常常基於諸如每小時的事務數或 x個併發連線下的最小響應時間等度量來討論。這些效能約束由企業施加,以便確保客戶的質量保證等級。...
MySQL資料庫伺服器的架設
mysql資料庫伺服器的架設 mysql資料庫是linux作業系統上用得最多的資料庫系統,它可以非常方便的與其它伺服器整合在一起,如apache vsftpd postfix等。下面介紹rhel 6平台mysql資料庫伺服器的安裝方法。安裝完整的mysql資料庫需要以下幾個rpm包檔案 perl d...