成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

運(yùn)維 數(shù)據(jù)庫運(yùn)維
現(xiàn)在MySQL運(yùn)行的大部分環(huán)境都是在Linux上的,如何在Linux操作系統(tǒng)上根據(jù)MySQL進(jìn)行優(yōu)化,我們這里給出一些通用簡單的策略。這些方法都有助于改進(jìn)MySQL的性能。

 MySQL優(yōu)化腦圖

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

現(xiàn)在MySQL運(yùn)行的大部分環(huán)境都是在Linux上的,如何在Linux操作系統(tǒng)上根據(jù)MySQL進(jìn)行優(yōu)化,我們這里給出一些通用簡單的策略。這些方法都有助于改進(jìn)MySQL的性能。

閑話少說,進(jìn)入正題。

一、CPU

首先從CPU說起。

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

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

 

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

 

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

這是什么原因呢?

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

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

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

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

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

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

二、內(nèi)存

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

1. numa

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

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

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

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

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

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

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

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

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

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

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

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

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

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

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

c) 啟動MySQL的時候,關(guān)閉NUMA特性:

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

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

2.vm.swappiness

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

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

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

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

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

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

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

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

這里我們對不活躍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)核會根據(jù)內(nèi)存頁的訪問情況,不定時的將活躍active內(nèi)存被移到inactive列表中,這些inactive的內(nèi)存可以被 交換到swap中去。

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

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

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

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

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

三、文件系統(tǒng)

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

1.mount

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

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

一般來說,Linux會給文件記錄了三個時間,change time, modify time和access time。

我們可以通過stat來查看文件的三個時間:

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

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

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

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

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

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

設(shè)置方法如下:

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

2.deadline

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

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

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

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

 

數(shù)據(jù)庫優(yōu)化超詳解!Linux上 MySQL 優(yōu)化三板斧

 

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

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

總結(jié)

CPU方面:

關(guān)閉電源保護(hù)模式

內(nèi)存:

vm.swappiness = 0

關(guān)閉numa

文件系統(tǒng):

用noatime,nobarrier掛載系統(tǒng)

IO調(diào)度策略修改為deadline。

責(zé)任編輯:武曉燕 來源: 今日頭條
相關(guān)推薦

2014-07-29 11:25:18

LinuxMySQL

2017-03-23 10:54:58

LINUXMYSQL優(yōu)化

2013-07-03 11:13:58

DevOps

2020-09-03 15:32:08

Wireshark數(shù)據(jù)包分析

2011-03-09 15:23:25

Windows Ser

2017-08-21 23:50:45

線上內(nèi)存OOM

2009-05-11 14:19:55

Oracle性能優(yōu)化數(shù)據(jù)庫

2009-02-19 10:20:00

2012-11-08 16:05:23

2020-11-18 08:17:14

Java源碼Class

2019-04-02 10:36:17

數(shù)據(jù)庫MySQL優(yōu)化方法

2025-03-03 09:05:56

2010-12-29 10:29:31

Linux磁盤管理dfdu

2011-03-08 08:49:55

MySQL優(yōu)化單機(jī)

2020-03-09 13:37:49

Serverless無服務(wù)器騰訊云

2019-05-30 14:30:42

技術(shù)管理架構(gòu)

2022-07-22 09:55:29

軟件工程師

2022-05-07 11:47:36

服務(wù)器架構(gòu)

2021-02-15 22:07:18

項(xiàng)目策略模式

2019-08-13 16:23:19

JavaScript數(shù)組方法
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 2019精品手机国产品在线 | 在线视频一区二区 | 99久久精品一区二区成人 | 国产亚洲精品精品国产亚洲综合 | 99视频在线免费观看 | 精品日韩在线 | 久久亚洲一区二区三 | 日韩国产一区二区三区 | 国产女人第一次做爰毛片 | 欧美午夜精品久久久久免费视 | 在线播放亚洲 | 欧美在线免费 | 成人伊人 | 91麻豆精品国产91久久久久久 | 欧美一区成人 | 欧美日韩1区2区 | 羞羞视频在线观看网站 | 亚洲一区二区在线视频 | 欧美福利一区 | 天天干天天草 | 日本不卡一区二区三区在线观看 | 日本网站在线看 | 久久久久se | 亚洲精品4 | yiren22 亚洲综合 | 日本啊v在线 | av在线电影网 | 久久久久资源 | 97精品超碰一区二区三区 | 99久久精品国产一区二区三区 | 超碰超碰| 久久99精品久久久久久狂牛 | av一级久久 | 成人免费小视频 | 国产成人精品综合 | 亚洲一区| 国产一级在线观看 | 91大神新作在线观看 | 亚洲天天干 | 欧美一二三 | 色资源站 |