日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决

發(fā)布時間:2023/12/10 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本文主要向大家介紹了線上MySQL數(shù)據(jù)庫機器內(nèi)存爆掉原因分析與解決,通過具體的內(nèi)容向大家展現(xiàn),希望對大家學(xué)習(xí)MySQL數(shù)據(jù)庫有所幫助。

現(xiàn)象:

阿里金融某業(yè)務(wù)的MySQL機器的內(nèi)存每隔幾天就會增長,漲上去后,卻不下來。累積后內(nèi)存爆掉。

分析:

此業(yè)務(wù)是間隔的對MySQL有大訪問,其它時間幾乎無訪問。排查發(fā)現(xiàn),內(nèi)存漲時,一般會有MySQL讀非常大,主要是InnoDB_DATA_READS。

結(jié)合此時的特性,業(yè)務(wù)同學(xué)給出此時的主要場景:

1、14個線程并發(fā);

2、寫入數(shù)據(jù)流程:先查詢再update;

select?pid,value from tableName where id=?;

查不到“id&pid”的記錄,執(zhí)行如下語句

insert into tableName values ( id,pid,value,now() )?on?duplicate key update value=values(value) ;

查到“id&pid”的記錄,執(zhí)行如下

update tableName?set?value=?? where id=??and?pid=?;

在分析過程,我們走了些彎路?,F(xiàn)在回想,我們可能會從如下幾個方面去思考:

1、近期升級過kernel,典型的阿里分庫分表集群,其中一臺升級未升級。所以,新版本內(nèi)核相關(guān)性不大。

2、innodb內(nèi)部統(tǒng)計的內(nèi)存使用量,沒有發(fā)現(xiàn)異常。

3、NUMA開關(guān)導(dǎo)致swap。這是MySQL swap中經(jīng)常會討論到的,但這幾臺沒有開(線上也全部是關(guān)掉的)。

4、臨時表、memory引擎表,可能會消耗大量的服務(wù)器端的內(nèi)存,但業(yè)務(wù)沒有用到或生成臨時表。

5、連接所消耗內(nèi)存。類似key_buffer_size等每個線程所占有的,是我們格外要注意的,但很明顯,這點可以否定,因為并發(fā)連接一直很小。

6、table cache相關(guān)的內(nèi)存。這點實現(xiàn)證明,效果非常明顯,是我們排查問題的突破點。

7、真正的mysqld內(nèi)存泄漏。結(jié)合業(yè)務(wù)的特性,在buglist中發(fā)現(xiàn)這個問題在很久很久之前確實存在并早已fix掉。

執(zhí)行FLUSH TABLES發(fā)現(xiàn)mysqld的RSZ直接減少10G~

flush之前:

PID USER PR NI VIRT RES SHR S %CPU?%MEM?TIME+?COMMAND

3018?mysql?20?0?44.2g 41g?4232?S?0.0?86.8?981:52.36?/u01/mysql/libexec/mysqld

$ free?-m

total used free shared buffers cached

Mem:?48384?46335?2048?0?344?2896

-/+?buffers/cache:?43094?5289

Swap:?8191?8?8183

flush之后:

PID USER PR NI VIRT RES SHR S %CPU?%MEM?TIME+?COMMAND

3018?mysql?20?0?34.7g 30g?4248?S?0.3?65.5?981:55.64?/u01/mysql/libexec/mysqld

$ free?-m

total used free shared buffers cached

Mem:?48384?36010?12373?0?345?2898

-/+?buffers/cache:?32766?15617

innodb層狀態(tài)幾乎沒有變化:

———————-

BUFFER POOL?AND?MEMORY

———————-

Total memory allocated?26361200640; in additional pool allocated?0

Dictionary memory allocated?7723336

Buffer pool size?1572863

Free buffers?1

Database pages?1556426

Old database pages?574520

Modified db pages?4

Pending reads?0

解決方法:

定時在業(yè)務(wù)低峰時flush tables或?qū)⑾嚓P(guān)的參數(shù)(table_open_cache 和 table_definition_cache)改小(從2048到512或更小)。

本文由職坐標(biāo)整理并發(fā)布,希望對同學(xué)們學(xué)習(xí)MySQL有所幫助,更多內(nèi)容請關(guān)注職坐標(biāo)數(shù)據(jù)庫MySQL數(shù)據(jù)庫頻道!

總結(jié)

以上是生活随笔為你收集整理的mysql爆内存_线上MySQL数据库机器内存爆掉原因分析与解决的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。