国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

安裝MySQL后,需要調(diào)整的10個(gè)性能配置項(xiàng)

瀏覽:2日期:2023-10-08 07:53:34

在本博客中,我們將和大家討論下 MySQL 數(shù)據(jù)庫安裝后,建議調(diào)整的十個(gè)性能設(shè)置參數(shù)。

通常情況下,當(dāng)我們需要進(jìn)行 MySQL 性能審計(jì)時(shí),我們將審查 MySQL 配置并提出改進(jìn)建議。在大多數(shù)情況下,我們只建議安裝后更改一些核心的 MySQL 性能調(diào)優(yōu)參數(shù),即使有數(shù)百個(gè)選項(xiàng)可用。這篇文章的目的是給你列出一些最關(guān)鍵的參數(shù)設(shè)置,并告訴你如何去調(diào)整它們。

在開始調(diào)整之前

即使是有經(jīng)驗(yàn)的人也會(huì)犯一些會(huì)造成許多麻煩的錯(cuò)誤。因此,在應(yīng)用本文推薦的配置項(xiàng)之前,請牢記下面的幾項(xiàng):

每次更改一個(gè)設(shè)置!這是驗(yàn)證設(shè)置是否有效的唯一方法。 大多數(shù)配置項(xiàng)可以在運(yùn)行時(shí)使用 SET GLOBAL 命令來修改。這種方式非常方便,并且如果修改后出現(xiàn)問題,還能馬上恢復(fù)原設(shè)置。但到最后,仍然需要把這個(gè)改變寫到配置文件中,使之永久生效。 有時(shí)候即使 MySQL 重啟后,配置文件中的參數(shù)也不生效。這時(shí)候你需要考慮:你使用正確的配置文件了嗎?你把這個(gè)參數(shù)放在正確的地方了嗎?(在這篇文章中的所有配置都屬于[mysqld]部分) 如在更改配置后數(shù)據(jù)庫無法啟動(dòng),需要檢查是否使用正確的單位?例如, innodb_buffer_pool_size 的單位是 byte,而 max_connection 是沒有單位的。 在配置文件中不允許重復(fù)設(shè)置。如果要跟蹤配置的更改,請使用版本控制。 不要做天真的數(shù)學(xué)算法,比如“我的新服務(wù)器的 RAM 是舊的 2 倍,因此可以把所有的配置項(xiàng)的值都設(shè)置成之前的 2 倍”?;A(chǔ)設(shè)置

這里主要講解 3 個(gè)非常重要的 MySQL 性能配置項(xiàng),你應(yīng)該經(jīng)常會(huì)看到這些參數(shù)。如果你沒有調(diào)整,很可能會(huì)遇到問題。

innodb_buffer_pool_size:

這是任何使用 InnoDB 存儲(chǔ)引擎的 MySQL 在安裝后第一個(gè)應(yīng)該要查看的配置。Buffer pool 是用來緩存數(shù)據(jù)和索引的,應(yīng)該分配盡可能大的內(nèi)存,以確保在進(jìn)行大多數(shù)讀取操作時(shí)是讀內(nèi)存而不是讀磁盤。典型的設(shè)置值為 5-6GB(8GB RAM),20-25G(32GB RAM),100-120GB(128GB RAM)。

innodb_log_file_size:

這個(gè)選項(xiàng)是設(shè)置 redo 日志(重做日志)的大小。redo 日志是用來確保寫入的數(shù)據(jù)能夠快速地寫入,并且持久化,還可以用于崩潰恢復(fù)(crash recovery)。MySQL 5.1 之前,這個(gè)選項(xiàng)很難去進(jìn)行調(diào)整,因?yàn)槟慵认胍哟?redo 日志來提高性能,又想要減小 redo 日志來進(jìn)行快速的崩潰恢復(fù)。幸運(yùn)的是,自 MySQL 5.5 之后,崩潰恢復(fù)的性能有了很大的提高,現(xiàn)在你可以擁有快速寫入性能的同時(shí),還能滿足快速崩潰恢復(fù)。一直到 MySQL 5.5,redo 日志的總大小被限制在 4GB (默認(rèn)有 2 個(gè)日志文件)。這個(gè)在 MySQL 5.6 中被增加了。

啟動(dòng)的時(shí)候設(shè)置 innodb_log_file_size = 512M(也就是 1GB 大小的 redo 日志),這樣可以提供充足的寫空間。如果你知道你的應(yīng)用是頻繁寫入的,還可以再增大些。

max_connections:

如果你經(jīng)常遇到 'Too many connections' 的錯(cuò)誤,是因?yàn)?max_connections 太小了。這個(gè)錯(cuò)誤很常見到,因?yàn)閼?yīng)用程序沒有正確地關(guān)閉與數(shù)據(jù)庫的連接,你需要設(shè)置連接數(shù)為比默認(rèn) 151 更大的值。max_connections 設(shè)置過高(如 1000 或更高)的一個(gè)主要缺點(diǎn)是當(dāng)服務(wù)器運(yùn)行 1000 個(gè)或者更多的事務(wù)時(shí),會(huì)響應(yīng)緩慢甚至沒有響應(yīng)。在應(yīng)用程序端使用連接池或者在 MySQL 端使用線程池有助于解決這個(gè)問題。

InnoDB 設(shè)置

從 MySQL 5.5 開始,InnoDB 成為了默認(rèn)的存儲(chǔ)引擎,并且它的使用頻率比其他存儲(chǔ)引擎的要多得多。這就是要認(rèn)真配置它的原因。

innodb_file_per_table:

這個(gè)配置項(xiàng)會(huì)決定 InnoDB 是使用共享表空間(innodb_file_per_table = OFF) 來存儲(chǔ)數(shù)據(jù)和索引,還是為每個(gè)表使用一個(gè)單獨(dú)的 ibd 文件(innodb_file_per_table= ON)。對每個(gè)表使用一個(gè)文件的方式,在 drop, truncate, 或者重建表的時(shí)候,會(huì)回收這個(gè)表空間。在一些高級特性,如壓縮的時(shí)候也需要開啟使用獨(dú)立表空間。然而這個(gè)選項(xiàng)卻不能帶來性能的提升。

在 MySQL 5.6 及之后的版本中,這個(gè)配置項(xiàng)是默認(rèn)開啟的,因此多數(shù)情況下,你無需操作。對于早期的 MySQL 版本,需要在啟動(dòng)前把它設(shè)置成 ON ,因?yàn)樗粚π聞?chuàng)建的表有影響。

innodb_flush_log_at_trx_commit:

默認(rèn)值為 1,表示 InnoDB 完全支持 ACID 特性。例如在在一個(gè)主節(jié)點(diǎn)上,你主要關(guān)注數(shù)據(jù)安全性,這是最好的設(shè)置值。然而它會(huì)對速度緩慢的磁盤系統(tǒng)造成很大的開銷,因?yàn)槊看螌⒏淖兯⑿碌?redo 日志的時(shí)候,都需要額外的 fsync 操作。設(shè)置為 2,可靠性會(huì)差一點(diǎn),因?yàn)橐烟峤坏氖聞?wù)只會(huì) 1 秒鐘刷新一次到 redo 日志,但在某些情況下,對一個(gè)主節(jié)點(diǎn)而言,這仍然是可以接受的,而且對于復(fù)制關(guān)系的從庫來說,這是一個(gè)很好的值。設(shè)置為 0,速度更快,但是在遇到崩潰的時(shí)候很可能會(huì)丟失一些數(shù)據(jù),這只對從庫是一個(gè)好的設(shè)置值。

innodb_flush_method:

這個(gè)設(shè)置項(xiàng)決定了數(shù)據(jù)和日志刷新到磁盤的方式。當(dāng)服務(wù)器硬件有 RAID 控制器、斷電保護(hù)、采取 write-back 緩存機(jī)制的時(shí)候,最常用的值是 O_DIRECT;其他大多數(shù)場景使用默認(rèn)值 fdatasync。sysbench 是一個(gè)幫助你在這兩個(gè)值之間做出選擇好工具。

innodb_log_buffer_size:

這個(gè)設(shè)置項(xiàng)用來設(shè)置緩存還沒有提交的事務(wù)的緩沖區(qū)的大小。默認(rèn)值(1MB) 一般是夠用的,但一旦事務(wù)之中帶有大 blob/text 字段,這個(gè)緩沖區(qū)會(huì)被很快填滿,并引起額外的 I/O 負(fù)載??纯?innodb_log_waits 這個(gè)狀態(tài)變量的值,如果不是 0 的話,需要增加 innodb_log_buffer_size。

其他設(shè)置query_cache_size:

大家都知道查詢緩存是一個(gè)瓶頸,即使在并發(fā)量不高的時(shí)候也會(huì)出現(xiàn)。最好的設(shè)置就是在第一天使用時(shí)就禁用查詢緩存(query_cache_size = 0) ,該選項(xiàng)在 MySQL 5.6 后是默認(rèn)禁用的,我們可以通過其他途徑來提高查詢速度: 設(shè)計(jì)好的索引,增長讀寫分離,或者使用額外的緩存 (memcache or redis for instance)。如果您的 MySQL 已經(jīng)啟用了查詢緩存并且從沒有發(fā)現(xiàn)過問題, 那么查詢緩存可能是對你有益的,這個(gè)時(shí)候如果你想禁用它的時(shí)候應(yīng)該小心操作。

log_bin:

如果要讓一個(gè)節(jié)點(diǎn)做為復(fù)制關(guān)系中的主節(jié)點(diǎn),啟用二進(jìn)制日志(binary log)是必須的。同時(shí)需要設(shè)置全局唯一的 server_id。如果是單實(shí)例數(shù)據(jù)庫,如果你要將數(shù)據(jù)恢復(fù)到之前時(shí)間點(diǎn)(使用最新的備份restore,然后使用binlog進(jìn)行recover),那么就需要二進(jìn)制日志。二進(jìn)制日志一旦創(chuàng)建,會(huì)被永久保存,所以如果不想耗盡磁盤空間,應(yīng)該使用 PURGE BINARY LOGS 清理舊的二進(jìn)制日志文件,或者設(shè)置 expire_logs_days 選項(xiàng)指定多少天之后,自動(dòng)清理過期的二進(jìn)制日志。

二進(jìn)制文件記錄是需要消耗資源的,因此在主從復(fù)制環(huán)境中,如果備庫不需要 Binlog ,就可以禁用掉。

skip_name_resolve:

當(dāng)一個(gè)客戶端連接上來的時(shí)候,服務(wù)端會(huì)執(zhí)行主機(jī)名解釋操作,當(dāng) DNS 很慢時(shí),建立的連接也會(huì)很慢。因此建議在啟動(dòng)的時(shí)候設(shè)置 skip-name-resolve 來禁用 DNS 查找。唯一的局限是 GRANT 語句僅且僅能使用 IP 地址,所以,在已有系統(tǒng)中添加這個(gè)選項(xiàng)時(shí)需要格外小心。

結(jié)論

當(dāng)然,根據(jù)你的負(fù)載和硬件的實(shí)際情況,還有其他的設(shè)置能夠起到調(diào)優(yōu)的作用:例如在小內(nèi)存、高速磁盤,高并發(fā),寫密集型的負(fù)載下,需要特定的調(diào)優(yōu)。不過本文的目的是給出幾個(gè) MySQL 的性能調(diào)優(yōu)配置項(xiàng),讓你快速配置一個(gè)合理的 MySQL 配置文件,并且了解哪些參數(shù)對你很重要,而不需要花費(fèi)大量時(shí)候去閱讀官方文檔。

以上就是安裝MySQL后,需要調(diào)整的10個(gè)性能配置項(xiàng)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 性能配置項(xiàng)的資料請關(guān)注好吧啦網(wǎng)其它相關(guān)文章!

標(biāo)簽: MySQL 數(shù)據(jù)庫
相關(guān)文章:
主站蜘蛛池模板: 勐海县| 苏尼特左旗| 克拉玛依市| 洛川县| 庄浪县| 双峰县| 济宁市| 道真| 高碑店市| 大渡口区| 延寿县| 芜湖县| 罗城| 博野县| 文安县| 建湖县| 炎陵县| 西乡县| 漾濞| 邹城市| 星子县| 福建省| 舒兰市| 达尔| 博罗县| 政和县| 泸西县| 惠安县| 措美县| 兴城市| 双城市| 舒兰市| 沙田区| 科技| 崇阳县| 泸西县| 宣汉县| 台山市| 龙门县| 永吉县| 石景山区|