欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL啟動(dòng)錯(cuò)誤解決方法

 更新時(shí)間:2016年12月04日 16:05:03   作者:yayun  
本文給大家分享的是mysql啟動(dòng)時(shí)報(bào)錯(cuò)的排查過(guò)程及方法,非常實(shí)用,有相同問(wèn)題的小伙伴可以來(lái)參考下

一般情況下mysql的啟動(dòng)錯(cuò)誤還是很容易排查的,但是今天我們就來(lái)說(shuō)一下不一般的情況。拿到一臺(tái)服務(wù)器,安裝完mysql后進(jìn)行啟動(dòng),啟動(dòng)錯(cuò)誤如下:

有同學(xué)會(huì)說(shuō),哥們兒你是不是buffer pool設(shè)置太大了,設(shè)置了96G內(nèi)存。這明顯提示無(wú)法分配內(nèi)存嘛。如果真是這樣也就不在這里進(jìn)行分享了,哈哈。

我的服務(wù)器內(nèi)存是128G。如下圖:

服務(wù)器內(nèi)存使用情況:

那么問(wèn)題來(lái)了,既然還剩如此多的內(nèi)存,為什么提示無(wú)法分配內(nèi)存??。各位童鞋怎么看?

1. 首先想到會(huì)不會(huì)是有幾條內(nèi)存壞了?于是運(yùn)維的同學(xué)進(jìn)行了檢查,給我的反饋是硬件一切正常。

2. 把mysql配置參數(shù)又檢查了一遍,沒(méi)有發(fā)現(xiàn)什么問(wèn)題,線上一直就是使用這些參數(shù)。

3. 又把文件拷貝到另外一臺(tái)機(jī)器,,另外一臺(tái)服務(wù)器可以正常啟動(dòng)(2臺(tái)機(jī)器硬件配置一致)。

那么如果排除硬件問(wèn)題,mysql配置問(wèn)題,那么剩下的就只有操作系統(tǒng)的內(nèi)核參數(shù)配置了。于是把兩臺(tái)服務(wù)器進(jìn)行了對(duì)比,最終發(fā)現(xiàn)了一個(gè)內(nèi)核參數(shù)不一致。

復(fù)制代碼 代碼如下:
vm.overcommit_memory

mysql啟動(dòng)正常的服務(wù)器改參數(shù)的值是0,而mysql啟動(dòng)錯(cuò)誤的這臺(tái)服務(wù)器該值是2。

那么問(wèn)題來(lái)了,這個(gè)參數(shù)到底是什么鬼?竟然會(huì)讓mysql分配內(nèi)存失敗,最后導(dǎo)致無(wú)法啟動(dòng)。經(jīng)過(guò)查詢資料知道了vm.overcommit_memory是什么鬼。

vm.overcommit_memory

默認(rèn)值為:0
從內(nèi)核文檔里得知,該參數(shù)有三個(gè)值,分別是:
0:當(dāng)用戶空間請(qǐng)求更多的的內(nèi)存時(shí),內(nèi)核嘗試估算出剩余可用的內(nèi)存。
1:當(dāng)設(shè)這個(gè)參數(shù)值為1時(shí),內(nèi)核允許超量使用內(nèi)存直到用完為止,主要用于科學(xué)計(jì)算.
2:當(dāng)設(shè)這個(gè)參數(shù)值為2時(shí),內(nèi)核會(huì)使用一個(gè)決不過(guò)量使用內(nèi)存的算法,即系統(tǒng)整個(gè)內(nèi)存地址空間不能超過(guò)swap+50%的RAM值,50%參數(shù)的設(shè)定是在overcommit_ratio中設(shè)定。


vm.overcommit_ratio
默認(rèn)值為:50


這個(gè)參數(shù)值只有在vm.overcommit_memory=2的情況下,這個(gè)參數(shù)才會(huì)生效。

那么我們來(lái)看一下總的內(nèi)存地址不能超過(guò)多少。其實(shí)是可以直接查看的。

[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit:  70144396 kB
Committed_AS:   135196 kB
[root@yayundeng 3306]# 

通過(guò)查看可以得知在70G的樣子。那么這個(gè)是如何計(jì)算的呢?這個(gè)就是上面提到的一個(gè)公式。swap+50%的RAM值,50%參數(shù)的設(shè)定是在overcommit_ratio中設(shè)定。

總虛擬內(nèi)存 = 可用物理內(nèi)存 × 百分比 + 交換分區(qū)

[root@yayundeng 3306]# cat /proc/meminfo | grep MemTotal
MemTotal:    132096808 kB
[root@yayundeng 3306]# 
[root@yayundeng 3306]# free -k
       total    used    free   shared  buffers   cached
Mem:   132096808  1583944 130512864     0   10240   133220
-/+ buffers/cache:  1440484 130656324
Swap:   4095992     0  4095992
[root@yayundeng 3306]# cat /proc/sys/vm/overcommit_ratio 
50
[root@yayundeng 3306]# 

總虛擬內(nèi)存=132096808 * 50% + 4095992= 70144396 kB

那么最后的結(jié)果就是buffer pool不能超過(guò)70144396 kB - 135196 kB=70009200 KB=66G。實(shí)際上經(jīng)過(guò)測(cè)試,buffer pool只能設(shè)置57G。

最后在看看總虛擬內(nèi)存情況:

CommitLimit:最大可用虛擬內(nèi)存

Committed_AS:已使用虛擬內(nèi)存

[root@yayundeng 3306]# cat /proc/meminfo |grep -i commit
CommitLimit:  70144396 kB
Committed_AS:  65539208 kB

那么如果把內(nèi)核參數(shù)vm.overcommit_memory恢復(fù)為默認(rèn)值0,那么將不會(huì)受到約束。

復(fù)制代碼 代碼如下:
echo 0 > /proc/sys/vm/overcommit_memory

 參考資料:

http://serverfault.com/questions/606185/how-does-vm-overcommit-memory-work
http://linuxperf.com/?p=102 

 總結(jié):

說(shuō)了這么多,那么為什么要修改內(nèi)核參數(shù)vm.overcommit_memory的值呢?這個(gè)是因?yàn)檫@臺(tái)服務(wù)器之前跑過(guò)GreenPlum數(shù)據(jù)庫(kù),拿到我手上的時(shí)候沒(méi)有進(jìn)行重裝系統(tǒng),那么還是建議如果拿到的機(jī)器之前跑過(guò)其他的業(yè)務(wù),那么保險(xiǎn)的方法還是重裝一下系統(tǒng),然后再部署自己的業(yè)務(wù),不然真的會(huì)出現(xiàn)莫名其妙的問(wèn)題。

相關(guān)文章

  • 窺探mysql存儲(chǔ)過(guò)程細(xì)節(jié)

    窺探mysql存儲(chǔ)過(guò)程細(xì)節(jié)

    這篇文章主要為大家詳細(xì)介紹了mysql存儲(chǔ)過(guò)程細(xì)節(jié),對(duì)mysql存儲(chǔ)過(guò)程感興趣的小伙伴們可以參考一下
    2016-03-03
  • 解決mysql8.0.19  winx64版本的安裝問(wèn)題

    解決mysql8.0.19 winx64版本的安裝問(wèn)題

    這篇文章主要介紹了mysql8.0.19 數(shù)據(jù)庫(kù) winx64版本的安裝問(wèn)題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • 詳解mysql查詢緩存簡(jiǎn)單使用

    詳解mysql查詢緩存簡(jiǎn)單使用

    這篇文章主要介紹了詳解mysql查詢緩存簡(jiǎn)單使用的相關(guān)資料,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2021-03-03
  • mysql之?dāng)?shù)據(jù)庫(kù)常用腳本總結(jié)

    mysql之?dāng)?shù)據(jù)庫(kù)常用腳本總結(jié)

    這篇文章主要介紹了mysql之?dāng)?shù)據(jù)庫(kù)常用腳本總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • mysql?sock文件存儲(chǔ)了什么信息

    mysql?sock文件存儲(chǔ)了什么信息

    這篇文章主要為大家介紹了mysql?sock文件存儲(chǔ)了什么信息的內(nèi)容詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • Mysql根據(jù)一個(gè)表的數(shù)據(jù)更新另一個(gè)表數(shù)據(jù)的SQL寫法(三種寫法)

    Mysql根據(jù)一個(gè)表的數(shù)據(jù)更新另一個(gè)表數(shù)據(jù)的SQL寫法(三種寫法)

    這篇文章主要介紹了Mysql根據(jù)一個(gè)表的數(shù)據(jù)更新另一個(gè)表數(shù)據(jù)的SQL寫法,本文給大家分享三種解決方法,需要的朋友可以參考下
    2023-06-06
  • 解決mysql 組合AND和OR帶來(lái)的問(wèn)題

    解決mysql 組合AND和OR帶來(lái)的問(wèn)題

    這篇文章主要介紹了解決mysql 組合AND和OR帶來(lái)的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-11-11
  • MySQL 發(fā)生同步延遲時(shí)Seconds_Behind_Master還為0的原因

    MySQL 發(fā)生同步延遲時(shí)Seconds_Behind_Master還為0的原因

    騰訊云數(shù)據(jù)庫(kù) MySQL 的只讀實(shí)例出現(xiàn)了同步延遲,但是監(jiān)控的延遲時(shí)間顯示為 0,而且延遲的 binlog 距離非 0,且數(shù)值越來(lái)越大。臨時(shí)解決之后,仔細(xì)想了一想,Seconds_Behind_Master 雖然計(jì)算方式有點(diǎn)坑,但是出現(xiàn)這么“巨大”的誤差還是挺奇怪的,本文就來(lái)分析下這個(gè)問(wèn)題
    2021-06-06
  • Mysql中tinyint(1)和tinyint(4)的區(qū)別詳析

    Mysql中tinyint(1)和tinyint(4)的區(qū)別詳析

    這篇文章主要給大家介紹了關(guān)于Mysql中tinyint(1)和tinyint(4)區(qū)別的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2022-02-02
  • 與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(一)--基本語(yǔ)法

    與MSSQL對(duì)比學(xué)習(xí)MYSQL的心得(一)--基本語(yǔ)法

    最開始接觸的數(shù)據(jù)庫(kù)為MSSQL,不過(guò)最近項(xiàng)目需求,仔細(xì)學(xué)習(xí)了下MYSQL,下面就對(duì)比MSSQL,把MYSQL的學(xué)習(xí)心得分享給大家
    2014-06-06

最新評(píng)論