MySQL源碼修改入門途牛網(wǎng)王強(qiáng)

MySQL源碼修改入門途牛網(wǎng)王強(qiáng)

ID:37324339

大小:1.06 MB

頁(yè)數(shù):51頁(yè)

時(shí)間:2019-05-21

MySQL源碼修改入門途牛網(wǎng)王強(qiáng)_第1頁(yè)
MySQL源碼修改入門途牛網(wǎng)王強(qiáng)_第2頁(yè)
MySQL源碼修改入門途牛網(wǎng)王強(qiáng)_第3頁(yè)
MySQL源碼修改入門途牛網(wǎng)王強(qiáng)_第4頁(yè)
MySQL源碼修改入門途牛網(wǎng)王強(qiáng)_第5頁(yè)
資源描述:

《MySQL源碼修改入門途牛網(wǎng)王強(qiáng)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫(kù)。

1、ZHDBA.COM?中華數(shù)據(jù)庫(kù)行業(yè)協(xié)會(huì)2015中華數(shù)據(jù)庫(kù)與運(yùn)維大會(huì)?2015.06.06MySQL源碼修改入門途牛網(wǎng)-王強(qiáng)緣由?近期開始學(xué)習(xí)和研究MySQL數(shù)據(jù)庫(kù),總體感覺(jué)開源的產(chǎn)品還是不如商業(yè)數(shù)據(jù)庫(kù)來(lái)的成熟,很多Oracle現(xiàn)成的東西,在MySQL下都沒(méi)有,好在有源碼可以看,自己也算寫過(guò)2年C程序的人,那就試著看看源碼吧。?首先還是要有合適的看源碼的工具,在此推薦sourceinsight。sourceinsightMySQL主要函數(shù)查看MySQL各個(gè)線程cpu使用情況?以前在Oracle下,我們通常會(huì)用top看哪個(gè)Oracle會(huì)話特別耗費(fèi)cpu,這個(gè)方法我也想在MySQL下用用

2、,知道MySQL是基于多線程的,查了一下如何查看線程耗費(fèi)cpu的情況,用的是下面的命令:?psH-eouser,pid,ppid,tid,time,%cpu

3、head-1&&psH-eouser,pid,ppid,tid,time,%cpu--sort=%cpu

4、grep20033

5、tail-n20?其中20033表示的是MySQLd的進(jìn)程pid查看MySQL各個(gè)線程cpu使用情況?輸出結(jié)果?圖中我們看到的TID應(yīng)該就是線程idMySQL系統(tǒng)的線程ID?然后我們?cè)贛ySQL用showengineinnodbstatusG查看線程的ID?我們這里看到線程ID是0x7fdb6a0f8

6、700,和ps看到的不一樣,ps看到的最多是5位的一個(gè)數(shù)字,如46530linux線程Google了很多次,終于知道了ps看到的其實(shí)是輕量級(jí)進(jìn)程id,下圖是我找到的關(guān)于linux線程的一篇文章的截圖,原作者名字沒(méi)有記錄,在此也備注一下吧。linux線程?Linux中,每個(gè)進(jìn)程有一個(gè)pid,類型pid_t,由getpid()取得。?Linux下的POSIX線程也有一個(gè)id,類型pthread_t,由pthread_self()取得,該id由線程維護(hù),其id空間是各個(gè)進(jìn)程獨(dú)立的(即不同進(jìn)程中的線程可能有相同的id)。?Linux中的POSIX線程庫(kù)實(shí)現(xiàn)的線程其實(shí)也是一個(gè)進(jìn)程(LWP),

7、只是該進(jìn)程與主進(jìn)程(啟動(dòng)線程的進(jìn)程)共享一些資源而已,比如代碼段,數(shù)據(jù)段等。?有時(shí)候我們可能需要知道線程的真實(shí)pid。比如進(jìn)程P1要向另外一個(gè)進(jìn)程P2中的某個(gè)線程發(fā)送信號(hào)時(shí),既不能使用P2的pid,更不能使用線程的pthreadid,而只能使用該線程的真實(shí)pid,稱為tid。?有一個(gè)函數(shù)gettid()可以得到tid,但glibc并沒(méi)有實(shí)現(xiàn)該函數(shù),只能通過(guò)Linux的系統(tǒng)調(diào)用syscall來(lái)獲取。使用syscall得到tid只需一行代碼,但為了加深各位看官的印象,簡(jiǎn)單提供下面場(chǎng)景。?首先,在線程函數(shù)中顯示線程ID?#include?#include

8、ys/types.h>?void*thread_func(void*args)?{?intli_tid=syscall(SYS_gettid);//~gettid()?printf("%s",li_tid);?sleep(20);?}?intmain(){pthread_tid;pthread_create(&id,NULL,thread_func,NULL);}在程序執(zhí)行以后,我們同時(shí)用ps去看進(jìn)程包含的線程id,判斷程序輸出和ps進(jìn)程顯示的是否一致。?從上面測(cè)試的demo可以看到ps看到的就是用syscall(SYS_gettid)得到的線程ID,和用pthread_self(

9、)得到的值是不一樣的,那么下面我們要做的就是在mysql線程中獲取并保存syscall(SYS_gettid)。?首先修改THD類,在real_id的附近,我們添加一個(gè)tid的成員變量。添加成員變量修改線程建立函數(shù)?然后我們根據(jù)前面的MySQL源碼主要函數(shù)圖,找到實(shí)際建立線程的函數(shù)handle_one_connection,在這個(gè)函數(shù)中獲取syscall(SYS_getid)的值。添加輸出顯示?獲取到了TID,我們還需要在適當(dāng)?shù)牡胤斤@示這個(gè)ID,我們選擇在showengineinnodbstatus的地方,把新添加的tid輸出。實(shí)際輸出結(jié)果總結(jié)通過(guò)這個(gè)小小的改動(dòng)的例子,我有了以下幾

10、個(gè)方面的收獲:?首先加深了我對(duì)MySQL源碼結(jié)構(gòu)層次的了解。?帶著問(wèn)題去看源碼,也給了自己目標(biāo)和動(dòng)力。?嘗試從小的改動(dòng)開始,給自己樹立了信心,是的看源碼這個(gè)事情,能夠堅(jiān)持下去。開源數(shù)據(jù)庫(kù)之所以現(xiàn)在這么火熱,就是因?yàn)榘炎约和耆┞冻鰜?lái),提供給廣大技術(shù)人員一個(gè)路徑,去了解數(shù)據(jù)庫(kù)的細(xì)節(jié),同時(shí)能夠定制自己的軟件。PostgreSQL入門、PG與MySQL的對(duì)比途牛網(wǎng)-王強(qiáng)PostgreSQL介紹世界上用錢能買到的最好的數(shù)據(jù)庫(kù)世界上不花錢使用最廣泛的數(shù)據(jù)庫(kù)世界上不花錢能用到最好

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁(yè),下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無(wú)此問(wèn)題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫(kù)負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無(wú)法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。