这篇文章给大家分享的是有关MySQL中Innodb表Data free怎么计算的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。


大概是空闲extent的大小。

ST_FIELD_INFOtables_fields_info[]={...{"DATA_FREE",MY_INT64_NUM_DECIMAL_DIGITS,MYSQL_TYPE_LONGLONG,0,(MY_I_S_MAYBE_NULL|MY_I_S_UNSIGNED),"Data_free",OPEN_FULL_TABLE},...}tables_fields_info[12]就是Data_free

ST_SCHEMA_TABLEschema_tables[]={...{"TABLES",tables_fields_info,create_schema_table,get_all_tables,make_old_format,get_schema_tables_record,1,2,0,OPTIMIZE_I_S_TABLE},...}填充方式get_schema_tables_record函数

其中有一句table->field[12]->store((longlong)file->stats.delete_length,TRUE);实际就是file->stats.delete_length

其中 file->stats.delete_length调用进行取值

ha_innobase::info_low其中包含avail_space=fsp_get_available_space_in_free_extents(ib_table->space);stats.delete_length=avail_space*1024;

uintmax_tfsp_get_available_space_in_free_extents(constfil_space_t*space){ut_ad(space->n_pending_ops>0);ulintsize_in_header=space->size_in_header;//总的页面大小if(size_in_header<FSP_EXTENT_SIZE){//碎片页直接返回0return(0);/*TODO:countfreefragpagesandreturnavaluebasedonthat*/}/*Belowweplaysafewhencountingfreeextentsabovethefreelimit:someofthemwillcontainextentdescriptorpages,andthereforewillnotbefreeextents*/ut_ad(size_in_header>=space->free_limit);ulintn_free_up=(size_in_header-space->free_limit)/FSP_EXTENT_SIZE;//(总的页面大小-已经初始化大小)/EXTENTSIZEpage_size_tpage_size(space->flags);if(n_free_up>0){n_free_up--;n_free_up-=n_free_up/(page_size.physical()/FSP_EXTENT_SIZE);//减去extent管理块?}/*Wereserve1extent+0.5%ofthespacesizetoundologsand1extent+0.5%tocleaningoperations;NOTE:thissourcecodeisduplicatedinthefunctionabove!*/ulintreserve=2+((size_in_header/FSP_EXTENT_SIZE)*2)/200;ulintn_free=space->free_len+n_free_up;if(reserve>n_free){return(0);}return(static_cast<uintmax_t>(n_free-reserve)*FSP_EXTENT_SIZE*(page_size.physical()/1024));}

感谢各位的阅读!关于“MySQL中Innodb表Data free怎么计算”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!