久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

Linux上怎么優(yōu)化MySQL

197次閱讀
沒有評論

共計(jì) 3448 個(gè)字符,預(yù)計(jì)需要花費(fèi) 9 分鐘才能閱讀完成。

本篇內(nèi)容主要講解“Linux 上怎么優(yōu)化 MySQL”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓丸趣 TV 小編來帶大家學(xué)習(xí)“Linux 上怎么優(yōu)化 MySQL”吧!

一、CPU

首先從 CPU 說起。

你仔細(xì)檢查的話,有些服務(wù)器上會(huì)有的一個(gè)有趣的現(xiàn)象:

你 cat /proc/cpuinfo 時(shí),會(huì)發(fā)現(xiàn) CPU 的頻率竟然跟它標(biāo)稱的頻率不一樣:

這個(gè)是 Intel E5-2620 的 CPU,他是 2.00G * 24 的 CPU,但是,我們發(fā)現(xiàn)第 5 顆 CPU 的頻率為 1.2G。

這是什么原因呢?

這些其實(shí)都源于 CPU 最新的技術(shù):節(jié)能模式。

操作系統(tǒng)和 CPU 硬件配合,系統(tǒng)不繁忙的時(shí)候,為了節(jié)約電能和降低溫度,它會(huì)將 CPU 降頻。

這對環(huán)保人士和抵制地球變暖來說是一個(gè)福音,但是對 MySQL 來說,可能是一個(gè)災(zāi)難。

為了保證 MySQL 能夠充分利用 CPU 的資源,建議設(shè)置 CPU 為最大性能模式。

這個(gè)設(shè)置可以在 BIOS 和操作系統(tǒng)中設(shè)置,當(dāng)然,在 BIOS 中設(shè)置該選項(xiàng)更好,更徹底。

由于各種 BIOS 類型的區(qū)別,設(shè)置為 CPU 為最大性能模式千差萬別,我們這里就不具體展示怎么設(shè)置了。

二、內(nèi)存

然后我們看看內(nèi)存方面,我們有哪些可以優(yōu)化的。

1. numa

非一致存儲(chǔ)訪問結(jié)構(gòu) (NUMA:Non-Uniform Memory Access) 也是最新的內(nèi)存管理技術(shù)。它和對稱多處理器結(jié)構(gòu) (SMP: Symmetric Multi-Processor) 是對應(yīng)的。簡單的隊(duì)別如下:

如圖所示,詳細(xì)的 NUMA 信息我們這里不介紹了。

但是我們可以直觀的看到:SMP 訪問內(nèi)存的都是代價(jià)都是一樣的; 但是在 NUMA 架構(gòu)下,本地內(nèi)存的訪問和非 本地內(nèi)存的訪問代價(jià)是不一樣的。

對應(yīng)的根據(jù)這個(gè)特性,操作系統(tǒng)上,我們可以設(shè)置進(jìn)程的內(nèi)存分配方式。目前支持的方式包括:

簡而言之,就是說,你可以指定內(nèi)存在本地分配,在某幾個(gè) CPU 節(jié)點(diǎn)分配或者輪詢分配。

除非是設(shè)置為 –interleave=nodes 輪詢分配方式,即內(nèi)存可以在任意 NUMA 節(jié)點(diǎn)上分配這種方式以外,其他的方式就算其他 NUMA 節(jié)點(diǎn)上還有內(nèi)存剩余,Linux 也不會(huì)把剩余的內(nèi)存分配給這個(gè)進(jìn)程,而是采用 SWAP 的方式來獲得內(nèi)存。

有經(jīng)驗(yàn)的系統(tǒng)管理員或者 DBA 都知道 SWAP 導(dǎo)致的數(shù)據(jù)庫性能下降有多么坑爹。

所以最簡單的方法,還是關(guān)閉掉這個(gè)特性。

關(guān)閉特性的方法,分別有:可以從 BIOS,操作系統(tǒng),啟動(dòng)進(jìn)程時(shí)臨時(shí)關(guān)閉這個(gè)特性。

a) 由于各種 BIOS 類型的區(qū)別,如何關(guān)閉 NUMA 千差萬別,我們這里就不具體展示怎么設(shè)置了。

b) 在操作系統(tǒng)中關(guān)閉,可以直接在 /etc/grub.conf 的 kernel 行最后添加 numa=off,如下所示:

另外可以設(shè)置 vm.zone_reclaim_mode= 0 盡量回收內(nèi)存。

c) 啟動(dòng) MySQL 的時(shí)候,關(guān)閉 NUMA 特性:

當(dāng)然,最好的方式是在 BIOS 中關(guān)閉。

2.vm.swappiness

vm.swappiness 是操作系統(tǒng)控制物理內(nèi)存交換出去的策略。它允許的值是一個(gè)百分比的值,最小為 0,最大運(yùn)行 100,該值默認(rèn)為 60。

vm.swappiness 設(shè)置為 0 表示盡量少 swap,100 表示盡量將 inactive 的內(nèi)存頁交換出去。

具體的說:當(dāng)內(nèi)存基本用滿的時(shí)候,系統(tǒng)會(huì)根據(jù)這個(gè)參數(shù)來判斷是把內(nèi)存中很少用到的 inactive 內(nèi)存交換出去,還是釋放數(shù)據(jù)的 cache。

cache 中緩存著從磁盤讀出來的數(shù)據(jù),根據(jù)程序的局部性原理,這些數(shù)據(jù)有可能在接下來又要被讀取;inactive   內(nèi)存顧名思義,就是那些被應(yīng)用程序映射著,但是“長時(shí)間”不用的內(nèi)存。

我們可以利用 vmstat 看到 inactive 的內(nèi)存的數(shù)量:

通過 /proc/meminfo 你可以看到更詳細(xì)的信息:

這里我們對不活躍 inactive 內(nèi)存進(jìn)一步深入討論。

Linux 中,內(nèi)存可能處于三種狀態(tài):free,active 和 inactive。

眾所周知,Linux Kernel 在內(nèi)部維護(hù)了很多 LRU 列表用來管理內(nèi)存,比如 LRU_INACTIVE_ANON, LRU_ACTIVE_ANON,  LRU_INACTIVE_FILE , LRU_ACTIVE_FILE, LRU_UNEVICTABLE。其中 LRU_INACTIVE_ANON,  LRU_ACTIVE_ANON 用來管理匿名頁,LRU_INACTIVE_FILE , LRU_ACTIVE_FILE 用來管理 page  caches 頁緩存。

系統(tǒng)內(nèi)核會(huì)根據(jù)內(nèi)存頁的訪問情況,不定時(shí)的將活躍 active 內(nèi)存被移到 inactive 列表中,這些 inactive 的內(nèi)存可以被 交換到 swap 中去。

一般來說,MySQL,特別是 InnoDB 管理內(nèi)存緩存,它占用的內(nèi)存比較多,不經(jīng)常訪問的內(nèi)存也會(huì)不少,這些內(nèi)存如果被 Linux 錯(cuò)誤的交換出去了,將   浪費(fèi)很多 CPU 和 IO 資源。InnoDB 自己管理緩存,cache 的文件數(shù)據(jù)來說占用了內(nèi)存,對 InnoDB 幾乎沒有任何好處。

所以,我們在 MySQL 的服務(wù)器上最好設(shè)置 vm.swappiness=0。

我們可以通過在 sysctl.conf 中添加一行:

并使用 sysctl - p 來使得該參數(shù)生效。

三、文件系統(tǒng)

最后,我們看一下文件系統(tǒng)的優(yōu)化

1.mount

我們建議在文件系統(tǒng)的 mount 參數(shù)上加上 noatime,nobarrier 兩個(gè)選項(xiàng)。

用 noatime mount 的話,文件系統(tǒng)在程序訪問對應(yīng)的文件或者文件夾時(shí),不會(huì)更新對應(yīng)的 access time。

一般來說,Linux 會(huì)給文件記錄了三個(gè)時(shí)間,change time, modify time 和 access time。

我們可以通過 stat 來查看文件的三個(gè)時(shí)間:

其中 access time 指文件最后一次被讀取的時(shí)間,modify time 指的是文件的文本內(nèi)容最后發(fā)生變化的時(shí)間,change  time 指的是文件的 inode 最后發(fā)生變化 (比如位置、用戶屬性、組屬性等) 的時(shí)間。

一般來說,文件都是讀多寫少,而且我們也很少關(guān)心某一個(gè)文件最近什么時(shí)間被訪問了。

所以,我們建議采用 noatime 選項(xiàng),這樣文件系統(tǒng)不記錄 access time,避免浪費(fèi)資源。

現(xiàn)在的很多文件系統(tǒng)會(huì)在數(shù)據(jù)提交時(shí)強(qiáng)制底層設(shè)備刷新 cache,避免數(shù)據(jù)丟失,稱之為 write barriers。

但是,其實(shí)我們數(shù)據(jù)庫服務(wù)器底層存儲(chǔ)設(shè)備要么采用 RAID 卡,RAID 卡本身的電池可以掉電保護(hù); 要么采用 Flash 卡,它也有自我保護(hù)機(jī)制,保證數(shù)據(jù)不會(huì)丟失。所以我們可以安全的使用 nobarrier 掛載文件系統(tǒng)。

設(shè)置方法如下:

對于 ext3, ext4 和 reiserfs 文件系統(tǒng)可以在 mount 時(shí)指定 barrier=0; 對于 xfs 可以指定 nobarrier 選項(xiàng)。

2.deadline

文件系統(tǒng)上還有一個(gè)提高 IO 的優(yōu)化萬能鑰匙,那就是 deadline。

在 Flash 技術(shù)之前,我們都是使用機(jī)械磁盤存儲(chǔ)數(shù)據(jù)的,機(jī)械磁盤的尋道時(shí)間是影響它速度的最重要因素,直接導(dǎo)致它的每秒可做的 IO(IOPS)非常有限,  為了盡量排序和合并多個(gè)請求,以達(dá)到一次尋道能夠滿足多次 IO 請求的目的,Linux 文件系統(tǒng)設(shè)計(jì)了多種 IO 調(diào)度策略,已適用各種場景和存儲(chǔ)設(shè)備。

Linux 的 IO 調(diào)度策略包括:Deadline scheduler,Anticipatory scheduler,Completely Fair  Queuing(CFQ),NOOP。

每種調(diào)度策略的詳細(xì)調(diào)度方式我們這里不詳細(xì)描述,這里我們主要介紹 CFQ 和 Deadline,CFQ 是 Linux 內(nèi)   核 2.6.18 之后的默認(rèn)調(diào)度策略,它聲稱對每一個(gè) IO 請求都是公平的,這種調(diào)度策略對大部分應(yīng)用都是適用的。

但是如果數(shù)據(jù)庫有兩個(gè)請求,一個(gè)請求 3 次 IO,一個(gè)請求 10000 次 IO,由于絕對公平,3 次 IO 的這個(gè)請求都需要跟其他 10000 個(gè) IO 請求競爭,可能要等待上千個(gè) IO 完成才能返回,導(dǎo)致它的響應(yīng)時(shí)間非常慢。并且如果在處理的過程中,又有很多 IO 請   求陸續(xù)發(fā)送過來,部分 IO 請求甚至可能一直無法得到調(diào)度被“餓死”。而 deadline 兼顧到一個(gè)請求不會(huì)在隊(duì)列中等待太久導(dǎo)致餓死,對數(shù)據(jù)庫這種應(yīng)用來   說更加適用。

實(shí)時(shí)設(shè)置,我們可以通過

來將 sda 的調(diào)度策略設(shè)置為 deadline。

我們也可以直接在 /etc/grub.conf 的 kernel 行最后添加 elevator=deadline 來永久生效。

到此,相信大家對“Linux 上怎么優(yōu)化 MySQL”有了更深的了解,不妨來實(shí)際操作一番吧!這里是丸趣 TV 網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

正文完
 
丸趣
版權(quán)聲明:本站原創(chuàng)文章,由 丸趣 2023-07-15發(fā)表,共計(jì)3448字。
轉(zhuǎn)載說明:除特殊說明外本站除技術(shù)相關(guān)以外文章皆由網(wǎng)絡(luò)搜集發(fā)布,轉(zhuǎn)載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 贵南县| 合山市| 开封县| 商城县| 崇礼县| 舞阳县| 德兴市| 甘孜县| 洪江市| 黑河市| 云林县| 濮阳县| 邢台县| 沅陵县| 定结县| 内黄县| 且末县| 邵武市| 扎赉特旗| 宁南县| 休宁县| 鄄城县| 石柱| 卓资县| 溆浦县| 宜良县| 太仆寺旗| 如皋市| 綦江县| 额济纳旗| 郎溪县| 兴义市| 昌吉市| 赤壁市| 儋州市| 邳州市| 镇赉县| 澄江县| 明溪县| 富顺县| 武川县|