溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL安裝后需要調(diào)整哪些內(nèi)容

發(fā)布時間:2021-11-03 09:27:59 來源:億速云 閱讀:272 作者:小新 欄目:MySQL數(shù)據(jù)庫

這篇文章主要介紹了MySQL安裝后需要調(diào)整哪些內(nèi)容,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。

面對MySQL的DBA或者做MySQL性能相關(guān)的工作的人,我最喜歡問的問題是,在MySQL服務(wù)器安裝后,需要調(diào)整什么,假設(shè)是以缺省的設(shè)置安裝的。

我很驚訝有非常多的人沒有合理的回答,很多的MySQL服務(wù)器都在缺省的配置下運行。

盡管你可以調(diào)整非常多的MySQL服務(wù)器變量,但是在通常情況下只有少數(shù)的變量是真正重要的。在你設(shè)置完這些變量以后,其他變量的改動通常只能帶來相對有限的性能改善。

key_buffer_size ---- 非常重要,如果你使用MyISAM表。如果只使用MyISAM表,那么把它的值設(shè)置為可用內(nèi)存的30%到40%。恰當(dāng)?shù)拇笮∫蕾囁饕臄?shù)量、數(shù)據(jù)量和負載 ----記住MyISAM使用操作系統(tǒng)的cache去緩存數(shù)據(jù),所以你也需要為它留出內(nèi)存,而且數(shù)據(jù)通常比索引要大很多。然而需要查看是否所有的 key_buffer總是在被使用 ---- key_buffer為4G而.MYI文件只有1G的情況并不罕見。這樣就有些浪費了。如果只是使用很少的MyISAM表,你希望它的值小一些,但是仍然至少要設(shè)成16到32M,用于臨時表(占用硬盤的)的索引。

innodb_buffer_pool_size ---- 非常重要,如果使用Innodb表。相對于MyISAM表而言,Innodb表對buffer size的大小更敏感。在處理大的數(shù)據(jù)集(data set)時,使用缺省的key_buffer_size和innodb_buffer_pool_size,MyISAM可能正常工作,而Innodb可能就是慢得像爬一樣了。同時Innodb buffer pool緩存了數(shù)據(jù)和索引頁,因此你不需要為操作系統(tǒng)的緩存留空間,在只用Innodb的數(shù)據(jù)庫服務(wù)器上,可以設(shè)成占內(nèi)存的70%到80%。上面 key_buffer的規(guī)則也同樣適用 ---- 如果只有小的數(shù)據(jù)集,而且也不會戲劇性地增大,那么不要把innodb_buffer_pool_size設(shè)得過大。因為你可以更好地使用多余的內(nèi)存。

innodb_additional_pool_size ---- 這個變量并不太影響性能,至少在有像樣的(decent)內(nèi)存分配的操作系統(tǒng)中是這樣。但是仍然需要至少設(shè)為20MB(有時候更大),是Innodb分配出來用于處理一些雜事的。

innodb_log_file_size ---- 對于以寫操作為主的負載(workload)非常重要,特別是數(shù)據(jù)集很大的時候。較大的值會提高性能,但增加恢復(fù)的時間。因此需要謹慎。我通常依據(jù)服務(wù)器的大小(server size)設(shè)置為64M到512M。

innodb_log_buffer_size ---- 缺省值在中等數(shù)量的寫操作和短的事務(wù)的大多數(shù)負載情況下是夠用的。如果有大量的UPDATE或者大量地使用blob,你可能需要增加它的值。不要把它的值設(shè)得過多,否則會浪費內(nèi)存--log buffer至少每秒刷新一次,沒有必要使用超過一秒鐘所需要的內(nèi)存。8MB到16MB通常是足夠的。小一些的安裝應(yīng)該使用更小的值。

innodb_flush_logs_at_trx_commit ---- 為Innodb比MyISAM慢100倍而哭泣?你可能忘記了調(diào)整這個值。缺省值是1,即每次事務(wù)提交時都會把日志刷新到磁盤上,非常耗資源,特別是沒有電池備份的cache時。很多應(yīng)用程序,特別是那些從MyISAM表移植過來的,應(yīng)該把它設(shè)成2。意味著只把日志刷新到操作系統(tǒng)的cache,而不刷新到磁盤。此時,日志仍然會每秒一次刷新到磁盤上,因此通常你不會丟失超過1到2秒的更新。設(shè)成0會更快一些,但安全性差一些,在MySQL服務(wù)崩潰的時候,會丟失事務(wù)。設(shè)成2只會在操作系統(tǒng)崩潰的時候丟失數(shù)據(jù)。

table_cache ---- 打開表是昂貴的(耗資源)。例如,MyISAM表在MYI文件頭做標記以標明哪些表正在使用。你不會希望這樣的操作頻繁發(fā)生,通常最好調(diào)整你的cache 大小,使其能夠滿足大多數(shù)打開的表的需要。它使用了一些操作系統(tǒng)的資源和內(nèi)存,但是對于現(xiàn)代的硬件水平來說通常不是問題。對于一個使用幾百個表的應(yīng)用, 1024是一個合適的值(注意每個連接需要各自的緩存)。如果有非常多的連接或者非常多的表,則需要增大它的值。我曾經(jīng)看到過使用超過100000的值。

thread_cache ---- 線程創(chuàng)建/銷毀是昂貴的,它在每次連接和斷開連接時發(fā)生。我通常把這個值至少設(shè)成16。如果應(yīng)用有時會有大量的并發(fā)連接,并且可以看到 threads_created變量迅速增長,我就把它的值調(diào)高。目標是在通常的操作中不要有線程的創(chuàng)建。

query_cache ---- 如果你的應(yīng)用是以讀為主的,并且你沒有應(yīng)用級的緩存,那么它會有很大幫助。不要把它設(shè)得過大,因為它的維護可能會導(dǎo)致性能下降。通常會設(shè)置在32M到 512M之間。設(shè)置好后,經(jīng)過一段時間要進行檢查,看看是否合適。For certain workloads cache hit ratio is lower than would justify having it enabled.(這句不會翻譯)

注意:就像你看到的,上面所說的都是全局變量。這些變量依賴硬件和存儲引擎的使用,而會話級的變量(per session variables)則與特定的訪問量(workload)相關(guān)。如果只是一些簡單的查詢,就沒有必要增加sort_buffer_size,即使有 64G的內(nèi)存讓你去浪費。而且這樣做還可能降低性能。我通常把調(diào)整會話級的變量放在第二步,在我分析了訪問量(或負載)之后。

此外在MySQL分發(fā)版中包含了一些my.cnf文件的例子,可以作為非常好的模板去使用。如果你能夠恰當(dāng)?shù)貜闹羞x擇一個,通常會比缺省值要好。

感謝你能夠認真閱讀完這篇文章,希望小編分享的“MySQL安裝后需要調(diào)整哪些內(nèi)容”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識等著你來學(xué)習(xí)!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI