亚欧色一区w666天堂,色情一区二区三区免费看,少妇特黄A片一区二区三区,亚洲人成网站999久久久综合,国产av熟女一区二区三区

  • 發布文章
  • 消息中心
點贊
收藏
評論
分享
原(yuan)創

MYSQL的內存分配器分析

2023-08-02 06:13:24
61
0

一、 MYSQL的內存分配問題

1、 MYSQL內存分配函數調用棧

從代碼(ma)就(jiu)可(ke)以看到,INNODB要分配(pei)和釋放內存的時候,并沒(mei)有(you)直接(jie)調(diao)用MALLOC和FREE,而是調(diao)用經過封裝(zhuang)的函數

My_alloc.c::alloc_root

 

2、 相關的參數

 

可以(yi)看到(dao)的(de)是,這(zhe)兩個參數(shu)從MYSQL5.6開始就已經(jing)廢棄了,MYSQL5.7更(geng)加(jia)直接(jie)刪除了,我從MARIADB10.0.21(相(xiang)當于MYSQL5.6)的(de)代碼(ma)中找到(dao)的(de)內容也證實了這(zhe)一點

 

二、 分析

1、 MYSQL是否有自己獨立的內存管理

準(zhun)確的(de)答案是(shi),曾經有過,但現在已經沒有了(le),完全用操作(zuo)系(xi)統(tong)的(de)ALLOCATOR了(le)。

為什么曾(ceng)經(jing)用過(guo),但現在不用了(le),MYSQL手冊(ce)中這(zhe)一(yi)段話說述了(le)這(zhe)一(yi)段的(de)歷(li)史(shi):

INNODB發展的早(zao)戎(rong),MEMORY ALLOCATOR缺(que)乏(fa)性(xing)能和擴展性(xing),沒有專門為多核CPU設計的MEMORY ALLOCATOR,所以(yi)INNODB在MEM模塊(kuai)中寫了自己(ji)的內存分配(pei)器。

但時至今日(ri),操作系統提供的(de)(de)內存分(fen)配器(qi)已經成熟并具高性能(其實(shi)這一段話(hua)也(ye)不完(wan)全對,我們(men)團隊在(zai)之前(qian)壓(ya)測(ce)的(de)(de)過程中遇到的(de)(de)SYS CPU升高的(de)(de)問題,就是用了PTMALLOC引起的(de)(de),替換成TCMALLOC或者(zhe)JEMALLOC之后解決)。

 

基于這個理由,MYSQL INNODB自己寫的MEMORY ALLOCATOR實(shi)現就沒(mei)必要(yao)存在了。確實(shi),這個應該(gai)是專門的MEM ALLOCATOR的工作(zuo),MYSQL沒(mei)必要(yao)關注 它。

 

2、當前注流的MEMORY ALLOCATOR

而PERCONA默認(ren)使用的是JEMALLOC

 

3、代碼上的確認

MY_MALLOC.C

 

 

 

 

注(zhu)意(yi),MALLOC函數前邊加了::全示全局域名,所以是操作系統的MEMORY ALLOCATOR

這個PFS MEMORY是什么宏??

MYSQL8.0.1的說明有(you)一段話

這個應該是開(kai)PFS MEMORY INSTRUMENT開(kai)關才有的

 

 

0條評論
0 / 1000
c****n
6文章(zhang)數(shu)
0粉(fen)絲(si)數
c****n
6 文章 | 0 粉絲
c****n
6文章數(shu)
0粉絲數
c****n
6 文章 | 0 粉絲
原創

MYSQL的內存分配器分析

2023-08-02 06:13:24
61
0

一、 MYSQL的內存分配問題

1、 MYSQL內存分配函數調用棧

從代碼就可以看到,INNODB要分配和(he)釋放內存(cun)的(de)時候,并(bing)沒有(you)直接調用(yong)MALLOC和(he)FREE,而是調用(yong)經過(guo)封裝的(de)函數

My_alloc.c::alloc_root

 

2、 相關的參數

 

可以看(kan)到的(de)是,這兩個(ge)參數從(cong)MYSQL5.6開始就(jiu)已(yi)經(jing)廢棄了(le),MYSQL5.7更加直接刪除了(le),我從(cong)MARIADB10.0.21(相(xiang)當(dang)于MYSQL5.6)的(de)代碼中找到的(de)內容也證實(shi)了(le)這一點(dian)

 

二、 分析

1、 MYSQL是否有自己獨立的內存管理

準確的答案是,曾經有過,但現(xian)在(zai)已經沒有了,完全用操作(zuo)系(xi)統的ALLOCATOR了。

為什么(me)曾經用過,但現在不用了,MYSQL手冊中這一(yi)段話(hua)說述(shu)了這一(yi)段的歷史:

INNODB發(fa)展(zhan)的早戎,MEMORY ALLOCATOR缺乏性(xing)能和擴展(zhan)性(xing),沒有專(zhuan)門(men)為多核CPU設計(ji)的MEMORY ALLOCATOR,所以INNODB在MEM模塊中寫了自(zi)己的內存分(fen)配器。

但時(shi)至今日,操作(zuo)系(xi)統(tong)提供(gong)的(de)(de)內存(cun)分(fen)配器已經成熟并具高性能(其實這一段話也不完(wan)全(quan)對(dui),我們團(tuan)隊在之(zhi)前壓(ya)測(ce)的(de)(de)過(guo)程中遇(yu)到的(de)(de)SYS CPU升高的(de)(de)問題(ti),就是(shi)用了PTMALLOC引起的(de)(de),替換(huan)成TCMALLOC或者JEMALLOC之(zhi)后解決)。

 

基于(yu)這個理由,MYSQL INNODB自己(ji)寫的MEMORY ALLOCATOR實(shi)現就(jiu)沒(mei)必要存在了(le)。確(que)實(shi),這個應(ying)該(gai)是專門的MEM ALLOCATOR的工作,MYSQL沒(mei)必要關注 它。

 

2、當前注流的MEMORY ALLOCATOR

而PERCONA默認使用的(de)是JEMALLOC

 

3、代碼上的確認

MY_MALLOC.C

 

 

 

 

注意,MALLOC函(han)數前邊加(jia)了::全示(shi)全局域名,所以是操作系(xi)統的MEMORY ALLOCATOR

這個PFS MEMORY是(shi)什(shen)么宏??

MYSQL8.0.1的說明有(you)一段話

這個應該是開(kai)(kai)PFS MEMORY INSTRUMENT開(kai)(kai)關才有的

 

 

文章來自個人專欄
文章 | 訂閱
0條評論
0 / 1000
請輸入你的評論
0
0