国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Linux上MySQL的優(yōu)化方法分享

發(fā)布時(shí)間:2021-08-11 11:57 來(lái)源:億速云 閱讀:0 作者:chen 欄目: 系統運維 歡迎投稿:712375056

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

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

閑話(huà)少說(shuō),進(jìn)入正題。

一、CPU

首先從CPU說(shuō)起。

你仔細檢查的話(huà),有些上會(huì )有的一個(gè)有趣的現象:你cat /proc/cpuinfo時(shí),會(huì )發(fā)現CPU的頻率竟然跟它標稱(chēng)的頻率不一樣:

#cat /proc/cpuinfo 
processor : 5
model name : Intel(R) Xeon(R) CPU E5-2620 0 @2.00GHz
 ...
cpu MHz : 1200.000

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

這是什么原因呢?

這些其實(shí)都源于CPU***的技術(shù):節能模式。操作系統和CPU硬件配合,系統不繁忙的時(shí)候,為了節約電能和降低溫度,它會(huì )將CPU降頻。這對環(huán)保人士和抵制地球變暖來(lái)說(shuō)是一個(gè)福音,但是對MySQL來(lái)說(shuō),可能是一個(gè)災難。

為了保證MySQL能夠充分利用CPU的資源,建議設置CPU為***性能模式。這個(gè)設置可以在BIOS和操作系統中設置,當然,在BIOS中設置該選項更好,更徹底。由于各種BIOS類(lèi)型的區別,設置為CPU為***性能模式千差萬(wàn)別,我們這里就不具體展示怎么設置了。

二、內存

然后我們看看內存方面,我們有哪些可以?xún)?yōu)化的。

i) 我們先看看numa

非一致存儲訪(fǎng)問(wèn)結構 (NUMA : Non-Uniform Memory Access) 也是***的內存管理技術(shù)。它和對稱(chēng)多處理器結構 (SMP : Symmetric Multi-Processor) 是對應的。簡(jiǎn)單的隊別如下:

如圖所示,詳細的NUMA信息我們這里不介紹了。但是我們可以直觀(guān)的看到:SMP訪(fǎng)問(wèn)內存的都是代價(jià)都是一樣的;但是在NUMA架構下,本地內存的訪(fǎng)問(wèn)和非 本地內存的訪(fǎng)問(wèn)代價(jià)是不一樣的。對應的根據這個(gè)特性,操作系統上,我們可以設置進(jìn)程的內存分配方式。目前支持的方式包括:

--interleave=nodes
--membind=nodes
--cpunodebind=nodes
--physcpubind=cpus
--localalloc
--preferred=node

簡(jiǎn)而言之,就是說(shuō),你可以指定內存在本地分配,在某幾個(gè)CPU節點(diǎn)分配或者輪詢(xún)分配。除非 是設置為--interleave=nodes輪詢(xún)分配方式,即內存可以在任意NUMA節點(diǎn)上分配這種方式以外。其他的方式就算其他NUMA節點(diǎn)上還有內 存剩余,Linux也不會(huì )把剩余的內存分配給這個(gè)進(jìn)程,而是采用SWAP的方式來(lái)獲得內存。有經(jīng)驗的系統管理員或者DBA都知道SWAP導致的數據性能 下降有多么坑爹。

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

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

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

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

kernel /vmlinuz-2.6.32-220.el6.x86_64 ro root=/dev/mapper/VolGroup-root   rd_NO_LUKS LANG=en_US.UTF-8 rd_LVM_LV=VolGroup/root rd_NO_MD quiet   SYSFONT=latarcyrheb-sun16 rhgb crashkernel=auto rd_LVM_LV=VolGroup/swap  rhgb crashkernel=auto quiet KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM numa=off

另外可以設置 vm.zone_reclaim_mode=0盡量回收內存。

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

numactl --interleave=all  mysqld &

當然,***的方式是在BIOS中關(guān)閉。

ii) 我們再看看vm.swappiness。

vm.swappiness是操作系統控制物理內存交換出去的策略。它允許的值是一個(gè)百分比的值,最小為0,***運行100,該值默認為60。vm.swappiness設置為0表示盡量少swap,100表示盡量將inactive的內存頁(yè)交換出去。

具體的說(shuō):當內存基本用滿(mǎn)的時(shí)候,系統會(huì )根據這個(gè)參數來(lái)判斷是把內存中很少用到的inactive 內存交換出去,還是釋放數據的cache。cache中緩存著(zhù)從磁盤(pán)讀出來(lái)的數據,根據程序的局部性原理,這些數據有可能在接下來(lái)又要被讀 ??;inactive 內存顧名思義,就是那些被應用程序映射著(zhù),但是“長(cháng)時(shí)間”不用的內存。

我們可以利用vmstat看到inactive的內存的數量:

#vmstat -an 1 
 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu----- 
 r b swpd free  inact  active si so bi bo in cs us sy id wa st 
 1 0 0 27522384 326928 1704644 0 0 0 153 11 10 0 0 100 0 0 
 0 0 0 27523300 326936 1704164 0 0 0 74 784 590 0 0 100 0 0 
 0 0 0 27523656 326936 1704692 0 0 8 8 439 1686 0 0 100 0 0 
 0 0 0 27524300 326916 1703412 0 0 4 52 198 262 0 0 100 0 0

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

#cat /proc/meminfo | grep -i inact 
 Inactive: 326972 kB 
 Inactive(anon): 248 kB 
 Inactive(file): 326724 kB

這里我們對不活躍inactive內存進(jìn)一步深入討論。 Linux中,內存可能處于三種狀態(tài):free,active和inactive。眾所周知,Linux Kernel在內部維護了很多LRU列表用來(lái)管理內存,比如LRU_INACTIVE_ANON, LRU_ACTIVE_ANON, LRU_INACTIVE_FILE , LRU_ACTIVE_FILE, LRU_UNEVICTABLE。其中LRU_INACTIVE_ANON, LRU_ACTIVE_ANON用來(lái)管理匿名頁(yè),LRU_INACTIVE_FILE , LRU_ACTIVE_FILE用來(lái)管理page caches頁(yè)緩存。系統內核會(huì )根據內存頁(yè)的訪(fǎng)問(wèn)情況,不定時(shí)的將活躍active內存被移到inactive列表中,這些inactive的內存可以被 交換到swap中去。

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

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

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

echo "vm.swappiness = 0" >>/etc/sysctl.conf

并使用sysctl -p來(lái)使得該參數生效。

三、文件系統

***,我們看一下文件系統的優(yōu)化

i) 我們建議在文件系統的mount參數上加上noatime,nobarrier兩個(gè)選項。

用noatime mount的話(huà),文件系統在程序訪(fǎng)問(wèn)對應的文件或者文件夾時(shí),不會(huì )更新對應的access time。一般來(lái)說(shuō),Linux會(huì )給文件記錄了三個(gè)時(shí)間,change time, modify time和access time。

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

stat libnids-1.16.tar.gz 
 File: `libnids-1.16.tar.gz' 
 Size: 72309 Blocks: 152 IO Block: 4096 regular file 
 Device: 302h/770d Inode: 4113144 Links: 1 
 Access: (0644/-rw-r--r--) Uid: ( 0/ root) Gid: ( 0/ root) 
  Access  : 2008-05-27 15:13:03.000000000 +0800 
 Modify: 2004-03-10 12:25:09.000000000 +0800 
 Change: 2008-05-27 14:18:18.000000000 +0800

其中access time指文件***一次被讀取的時(shí)間,modify time指的是文件的文本內容***發(fā)生變化的時(shí)間,change time指的是文件的inode***發(fā)生變化(比如位置、用戶(hù)屬性、組屬性等)的時(shí)間。一般來(lái)說(shuō),文件都是讀多寫(xiě)少,而且我們也很少關(guān)心某一個(gè)文件最近什 么時(shí)間被訪(fǎng)問(wèn)了。

所以,我們建議采用noatime選項,這樣文件系統不記錄access time,避免浪費資源。

現在的很多文件系統會(huì )在數據提交時(shí)強制底層設備刷新cache,避免數據丟失,稱(chēng)之為write barriers。但是,其實(shí)我們數據庫服務(wù)器底層存儲設備要么采用RAID卡,RAID卡本身的電池可以掉電保護;要么采用Flash卡,它也有自我保 護機制,保證數據不會(huì )丟失。所以我們可以安全的使用nobarrier掛載文件系統。設置方法如下:

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

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

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

Linux的IO調度策略包括:Deadline scheduler,Anticipatory scheduler,Completely Fair Queuing(CFQ),NOOP。每種調度策略的詳細調度方式我們這里不詳細描述,這里我們主要介紹CFQ和Deadline,CFQ是Linux內 核2.6.18之后的默認調度策略,它聲稱(chēng)對每一個(gè) IO 請求都是公平的,這種調度策略對大部分應用都是適用的。但是如果數據庫有兩個(gè)請求,一個(gè)請求3次IO,一個(gè)請求10000次IO,由于絕對公平,3次IO 的這個(gè)請求都需要跟其他10000個(gè)IO請求競爭,可能要等待上千個(gè)IO完成才能返回,導致它的響應時(shí)間非常慢。并且如果在處理的過(guò)程中,又有很多IO請 求陸續發(fā)送過(guò)來(lái),部分IO請求甚至可能一直無(wú)法得到調度被“餓死”。而deadline兼顧到一個(gè)請求不會(huì )在隊列中等待太久導致餓死,對數據庫這種應用來(lái) 說(shuō)更加適用。

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

echo deadline >/sys/block/sda/queue/scheduler

來(lái)將sda的調度策略設置為deadline。

我們也可以直接在/etc/grub.conf的kernel行***添加elevator=deadline來(lái)***生效。

總結

CPU方面:

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

內存:

vm.swappiness = 0

關(guān)閉numa

文件系統:

用noatime,nobarrier掛載系統

IO調度策略修改為deadline。

原文鏈接:http://www.woqutech.com/?p=1200

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

人妻无奈被迫屈辱1-9| 色鬼7777久久| 自拍偷自拍亚洲精品被多人伦好爽| 国产香蕉尹人在线视频你懂的| 超碰最新上传| 亚洲AV首页在线观看|