国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > MySQL > 正文

從MySQL的源碼剖析Innodb buffer的命中率計(jì)算

2024-07-24 13:07:14
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章主要介紹了從MySQL的源碼剖析Innodb buffer的命中率計(jì)算,作者結(jié)合C語(yǔ)言寫(xiě)的算法來(lái)分析innodb buffer hit Ratios,需要的朋友可以參考下

按官方手冊(cè)推薦Innodb buffer Hit Ratios的計(jì)算是:

 

 
  1. 100-((iReads / iReadRequests)*100) 
  2. iReads : mysql->status->Innodb_buffer_pool_reads 
  3. iReadRequests: mysql->status->Innodb_buffer_pool_read_requests 

出處: http://dev.mysql.com/doc/mysql-monitor/2.0/en/mem_graphref.html

搜”Hit Ratios”

推薦有興趣的同學(xué)把這個(gè)頁(yè)面都看一下應(yīng)該也會(huì)有很大收獲.

另外在hackmysql: www.hackmysql.com網(wǎng)站上的: mysqlsqlreport中關(guān)于buffer命中計(jì)算是:

 

 
  1. $ib_bp_read_ratio = sprintf "%.2f"
  2. ($stats{'Innodb_buffer_pool_read_requests'} ? 
  3. 100 - ($stats{'Innodb_buffer_pool_reads'} / 
  4. $stats{'Innodb_buffer_pool_read_requests'}) * 100 :0); 

即:

 

 
  1. ib_bp_hit=100-(Innodb_buffer_pool_reads/Innodb_buffer_pool_read_requests)*100 

另外我們知道查看Innodb Buffer Hit Ratios的地方是:

復(fù)制代碼代碼如下:

show engine innodb status/G;

Buffer pool hit rate : XXXX/1000;

那個(gè)XXX/1000即是buffer pool hit ratios的命中.

這樣也可以從代碼里看一下這個(gè)bp命中計(jì)算:

 

 
  1. storage/innobase/buf/buf0buf.c # void buf_print_io 
  2. storage/innodbase/include/buf0buf.h #struct buf_block_struct 

在buf0buf.c 中的buf_print_io函數(shù)中可以看到:

 

 
  1. void 
  2. buf_print_io( 
  3. … 
  4.  
  5. if (buf_pool->n_page_gets > buf_pool->n_page_gets_old) { 
  6. fprintf(file, "Buffer pool hit rate %lu / 1000/n"
  7. (ulong) 
  8. (1000 - ((1000 * (buf_pool->n_pages_read 
  9. - buf_pool->n_pages_read_old)) 
  10. / (buf_pool->n_page_gets 
  11. - buf_pool->n_page_gets_old)))); 
  12. else { 
  13. fputs("No buffer pool page gets since the last printout/n"
  14. file); 
  15.  
  16. buf_pool->n_page_gets_old = buf_pool->n_page_gets; 
  17. buf_pool->n_pages_read_old = buf_pool->n_pages_read; 
  18. … 

結(jié)合:

storage/innobase/include/buf0buf.h中

 

 
  1. struct buf_block_struct{ 
  2. … 
  3. ulint n_pages_read; /* number read operations */ 
  4. … 
  5. ulint n_page_gets; /* number of page gets performed; 
  6. also successful searches through 
  7. the adaptive hash index are 
  8. counted as page gets; this field 
  9. is NOT protected by the buffer 
  10. pool mutex */ 
  11. … 
  12. ulint n_page_gets_old;/* n_page_gets when buf_print was 
  13. last time called: used to calculate 
  14. hit rate */ 
  15. … 
  16. ulint n_pages_read_old;/* n_pages_read when buf_print was 
  17. last time called */ 
  18. … 

從這個(gè)來(lái)看innodb buffer hit Ratios的命中計(jì)算需要本次取的值和上次值做一個(gè)減法公式應(yīng)該為

 

 
  1. ib_bp_hit=1000 – (t2.iReads – t1.iReads)/(t2.iReadRequest – t1.iReadRequest)*1000 

t(n): 時(shí)間點(diǎn) 兩個(gè)時(shí)間間隔最少是30秒以上,在小意義不大.

 

 
  1. iReads: Innodb_buffer_pool_reads 
  2. iReadRequest: Innodb_buffer_pool_read_requests 

對(duì)innodb的輸出參數(shù)有興趣的可以關(guān)注: storage/innobase/buf/Srv0srv.c 中的:

 

 
  1. void srv_export_innodb_status() 

思考:

對(duì)于innodb_buffer_pool_read_requests, innodb_buffer_pool_reads這種累加值,當(dāng)很大時(shí)進(jìn)行: innodb_buffer_pool_reads/innodb_buffer_pool_read_requests 相來(lái)講只能得到從開(kāi)始到現(xiàn)在的命中率的表現(xiàn)了. 如果想得到現(xiàn)在近五分鐘,近一分鐘或是8點(diǎn)到9點(diǎn)每分鐘的命中率情況,如果還是按著innodb_buffer_pool_reads/innodb_buffer_pool_read_requests 進(jìn)行計(jì)算,只能得到mysqld開(kāi)起累計(jì)在8點(diǎn)-9點(diǎn)的每分鐘的累計(jì)平均命中情況.

所以如果想到每(五)分鐘的命中情況,就需要本次取得的值和一(五)分鐘前的值進(jìn)行相減,然后進(jìn)行運(yùn)算.這樣才能得到一個(gè)當(dāng)下的bp命中情況.

兩種方法沒(méi)實(shí)質(zhì)的對(duì)錯(cuò)的問(wèn)題,但相對(duì)于源碼中的那種計(jì)算方式更容讓發(fā)現(xiàn)數(shù)據(jù)庫(kù)的抖動(dòng)問(wèn)題.

能解決的問(wèn)題:

偶而的數(shù)據(jù)庫(kù)性能抖動(dòng)能直觀的反應(yīng)出來(lái).

發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 阜平县| 曲阜市| 陕西省| 宿松县| 鞍山市| 荃湾区| 衡南县| 隆子县| 砚山县| 收藏| 东港市| 新兴县| 留坝县| 仁布县| 年辖:市辖区| 栾川县| 莆田市| 保定市| 旺苍县| 娄底市| 寻乌县| 西藏| 吉首市| 宜兰市| 公主岭市| 古浪县| 舟山市| 阳泉市| 太康县| 梁平县| 镶黄旗| 日照市| 辉县市| 师宗县| 类乌齐县| 南投市| 新蔡县| 西贡区| 咸丰县| 望奎县| 阿瓦提县|