MySQL為什么lsof會看到這么多臨時(shí)文件_第1頁
MySQL為什么lsof會看到這么多臨時(shí)文件_第2頁
MySQL為什么lsof會看到這么多臨時(shí)文件_第3頁
MySQL為什么lsof會看到這么多臨時(shí)文件_第4頁
MySQL為什么lsof會看到這么多臨時(shí)文件_第5頁
已閱讀5頁,還剩3頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、MySQL為什么Isof會看到這么多臨時(shí)文件版本:-一問題提出-般情況下我們會使用Isof命令來查看MySQL當(dāng)前使用的臨時(shí)文件的使用這是因?yàn)檫@些臨時(shí)文件使用Is命令并不能顯示,在5.7中其建立方式是使用Liunx api mkstemp進(jìn)行的建立,這種 文件是進(jìn)程專用的,返回文件描述符后會使用api unlink進(jìn)行刪除.源碼主要就是這一段*其包含在create_temp_file函數(shù)中一org_file=mkstemp(to);if (mode & O_TEMPORARY) (void) my_delete(to, MYF(MY_WME);在5.7中如下常的一些功能會用到這種臨時(shí)文件,出如

2、:執(zhí)行計(jì)劃filesort文件名字:MY開頭Isof|grep delete 如:/tmp/MYdRHIGW (deleted)大事務(wù)binary log緩存文件名字:ML開頭Isof|grep delete如:/tmp/MLq9INFu (deleted)online DDL涉及排序也如add key,一般是ib開頭Alter tAble testsort Add key(id);Isof|grep delete如:/tmp/ibCxlYQg (deleted)/tmp/ib51nvZl (deleted)設(shè)置innodb_tmpciir可以尋這類文件方攵至!j指定的I目錄但是當(dāng)一個MySQ

3、LD進(jìn)程剛剛啟動的時(shí)候我們?nèi)ゲ榭催@類文件的時(shí)候,會發(fā)現(xiàn)很多這類文件, 如下:rootmgr2 # lsofgrep deletegrep mysqlwc -1215rootmgr2 #這些文件大小基本都是0,且都以ib開頭,曾經(jīng)有朋友問過我這個問題,這里詳細(xì)做一下解 釋一二一 MySQLD初始化后的臨時(shí)文件種類實(shí)際上在5.7中這類文件均由函數(shù)create_temp_file建立,那么我們就可以在MySQLD后動的時(shí) 候?qū)帱c(diǎn)放在上面進(jìn)行分析了 一下面這樣一些文件,均使用的是2開頭的臨時(shí)文件。srv_monitor_file (srv0start.cc:2022):這是我們通常show engi

4、ne innodb status命令輸出 的時(shí)候使用至I的文件,主要函數(shù)為srv_printf_innodb_monitor 0棧針:srv_dict_tmpfile (srvOstart.cc:2032):主要和外鍵創(chuàng)立信息輸出有關(guān)一srv_misc_tmpfile (srv0start.cc:2041):主要和外鍵拋錯輸出有關(guān).lockjatest_err_file (Iock0lock.cc:465):主要和死鎖報(bào)錯輸出有關(guān)dict_foreign_err_file (dict0dict.cc:1245):主要和外鍵拋錯輸出有欠一我們可以發(fā)現(xiàn)實(shí)際上這些文件都不會占用太大,實(shí)際上這5個文件

5、初始化后就已經(jīng)建立好了三一為什么Isof默認(rèn)的輸出會多很多很明顯我們上面ib打頭的文件只有5個那么我們Isof (不加任何參數(shù))的時(shí)候看到的會多很多 呢?如下是我初始化旨動的情況下看到的個數(shù):rootmgr2 support-files# lsofgrep deletegrep mysqlwc -1215rootmgr2 support-files# lsofgrep deletegrep mysql此處省略mysqld12916mysqllOuREG8,5976517109405mysqld12916mysqllluREG8,5023137683mysqld12916mysql12uREG8

6、,5023137684mysqld12916mysql13uREG8,5023137685mysqld12916mysql19uREG8,5023137686mysqld1291612920mysqllOuREG8,5976517109405mysqld1291612920mysqllluREG8,5023137683mysqld1291612920mysql12uREG8,5023137684mysqld1291612920mysql13uREG8,5023137685mysqld1291612920mysql19uREG8,5023137686mysqld1291612944mysqllO

7、uREG8,5976517109405mysqld1291612944mysqllluREG8,5023137683mysqld1291612944mysql12uREG8,5023137684mysqld1291612944mysql13uREG8,5023137685mysqld1291612944mysql19uREG8,5023137686mysqld1291612945mysqllOuREG8,5976517109405mysqld1291612945mysqllluREG8,5023137683mysqld1291612945mysql12uREG8,5023137684我們主要笑

8、注以下幾歹II :PID : is the Process IDentification number of the process.TID : is the task (thread) IDentification numberFD : is the File Descriptor number of the file.SIZE/OFF : is the size of the file or the file offset in bytesNAME : is the name of the mount point and file system on which the file resi

9、des 更加詳 細(xì)的自行參考man .從輸出中我們可以發(fā)現(xiàn)PID都是12916這正是mysqld的PID,而它們的TID那么不同,這些當(dāng)然就是多線程造成的原 因了 -FD和NAME實(shí)際上是有規(guī)律的重復(fù)的,其實(shí)只有5個值而已這代表我們上面說的5個臨時(shí) 文件SIZE都比擬小c因此我們可以認(rèn)為雖然輸出多達(dá)215行,但是實(shí)際上整個MySQLD進(jìn)程只翻開了5個文件而已 也就是我們前面說的那5個臨時(shí)文件,這是因?yàn)榫€程間文件描述符(FD )是共享的,每一個線 程Isof查看的時(shí)候都會顯示這5個臨時(shí)文件,如果我們的MySQL有很多session -那么線程會很 多很多,那么Isof看到的臨時(shí)文件數(shù)量就是線程數(shù)

10、據(jù)量*5 一因此我們在檢查臨時(shí)文件使用空間 情況的時(shí)候不要被過多的輸出而嚇到,我們只要輸出MySQLD進(jìn)程的臨時(shí)文件即可,輸出如 下:rootmgr2 proc# lsofgrep deletegrep mysqlAwk 1if($3=nmysql)printmysqld12916mysqllOuREG8, 5976517109405 /mysqld12916mysqllluREG8, 5023137683 /mysqld12916mysql12uREG8,5023137684 /mysqld12916mysql 13uREG8, 5023137685 /mysqld12916mysql19u

11、REG8, 5023137686 /或者加上Isof加上參數(shù)只看進(jìn)程的臨時(shí)文件,而不去查看子線程的臨時(shí)文件rootmgr2 #lsof -p 12916grep deletemysqld 12916 mysqllOu REG8,59765 17109405/tmp/ibpuzts2 (dmysqld 12916 mysqlllu REG8,50 23137683/tmp/ibA4q9iX (dmysqld 12916 mysql12u REG8,50 23137684/tmp/ibRdXE14 (dmysqld 12916 mysql13u REG8,50 23137685/tmp/ibe6h

12、fHJ (dmysqld 12916 mysql19u REG8,50 23137686/tmp/ibfb7rps (d注意MySQL8O21下這些臨時(shí)文件的名字有一些變化,Liunx下可能直接(O_TMPFILE flag )使 用這種方式建立如下:open(dirnAme_buf, O_RDWR | O_TMPFILE | O_CLOEXEC, S_工RUSR I S_IWUSR)我測試得到的名字如下:rootmgr4 # lsofgrep A.outgrep deleteMySQLD啟動后查看的臨時(shí)文件名如下:rootmgr4 # Isof -p 114 88grep deletemys

13、qld11488mysqllOuREG8,5024237413#2423741mysqld11488mysqllluREG8,5024237414/tmp/#2423741mysqld11488mysql12uREG8,5024237416/tmp/#2423741mysqld11488mysql19uREG8,5024237417/tmp/#24237411170311703root3uREG8Z 524237415 /雖然臨時(shí)文件名有所變化,但是基本的用途和5.7差不多四-線程間的文件描述符(FD )是共享的這一段沒什么好解釋的借用Linux系統(tǒng)編程的一段說明如下:我們可以寫一段簡單的多線

14、程的代碼來測試如下(不做任何錯誤判斷)#include #include#include#include#include#include#include#includevoid* u_sleep(void* t)(chAr f ile_temp=n ibXXXXXX;int fd = mkstemp(file_temp);unlink( file_temp);int i = 0;chAr* teststr=nAAsdn;printf(theAd tmpfile: %snn,file_temp); for ( i = 0;i100000;i + +) write(fd,teststr,strle

15、n(teststr);)sleep (100);)int mAin(void)int ret = 0;pthreAd_t tid5;int i = 0;int fd = 0;int tid_num = 0;int tmp_file_num=5;chAr file_temp=n ibXXXXXX;for (i = 0;itmp_file_num;i + +)strcpy(file_tempz nibXXXXXX”);mkstemp(file_temp);printf(H %snn,file_temp);unlink( file_temp);for (i = 0;isizeof (tid)/siz

16、eof(pthreAd t) ;i + +)pthreAd_creAte(tid+tid_numz NULL,u_sleep,NULL);tid_num+;)for ( i = 0;isizeof(tid)/sizeof(pthreAd_t) ;i + +)ret = pthreAd_j oin( * (tid+i) , NULL );)這段代碼實(shí)際上就是模擬在主進(jìn)程中通過mkstemp和unlink建立了5個臨時(shí)文件且也是以ib打 頭(模擬MySQL的臨時(shí)文件),然后建立了5個線程,每個線程再各自建立一個臨時(shí)文件,寫 點(diǎn)東西進(jìn)去,然后線程睡眠一會,主線程會等待線程回收資源,因此可以有足夠的時(shí)

17、間觀察這樣來觀察是線程之間文件描述符(FD )是否共享,預(yù)期我們能夠觀察到的輸出為60個主控線程主控線程5個子線程主控線程建立了5個臨時(shí)文件6個線程共享就是30個然后每個子線程建立了 1個臨時(shí)文件又是5個臨時(shí)文件,6個線程共享又是30個)如下輸出:rootmgr2 # lsof grep delete I grep a. out wc -160rootmgr2# lsofgrepdeletegrepA.outAwk rif($3=TTrootn)print rA . out13460root3uREG8,5043691141a . out13460root4uREG8,5043691142A

18、out13460root5uREG8,5043691144A , out13460root6uREG8,5043691145A , out13460root7uREG8,5043691146A . out13460root8uREG8,540000043691147A out13460root9uREG8,540000043691148A . OUt13460rootlOuREG8,540000043691149A . OUt13460rootlluREG8,540000043691150A . OUt13460root12uREG8,540000043691151rootmgr2A , out# .Zsof| grep13460delete greproot3uA.outmoreREG8,5043691141A . out13460root4uREG8,5043691142A , out13460root5uREG8,5043691144A . out13460root6uREG8,5043691145A , out13460root7uREG8,5043691146A . OU

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論