mysql datafree 单位_MySQL:Innodb表 Data free 的计算概要

本文解析了MySQL InnoDB引擎中Data_free字段的计算逻辑,包括extent管理块的计算方式及空闲空间统计方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

简单记录一下,因为看了一下Data free的计算还算准确。不是统计值

大概是空闲extent的大小。

ST_FIELD_INFO tables_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_TABLE schema_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(    const fil_space_t*  space)

{

ut_ad(space->n_pending_ops > 0);

ulint   size_in_header = space->size_in_header;//总的页面大小

if (size_in_header 

return(0);      /* TODO: count free frag pages and

return a value based on that */

}    /* Below we play safe when counting free extents above the free limit:

some of them will contain extent descriptor pages, and therefore

will not be free extents */

ut_ad(size_in_header >= space->free_limit);

ulint   n_free_up =

(size_in_header - space->free_limit) / FSP_EXTENT_SIZE; //(总的页面大小-已经初始化大小)/EXTENT SIZE

page_size_t page_size(space->flags);    if (n_free_up > 0) {

n_free_up--;

n_free_up -= n_free_up / (page_size.physical()

/ FSP_EXTENT_SIZE); //减去extent管理块?

}    /* We reserve 1 extent + 0.5 % of the space size to undo logs

and 1 extent + 0.5 % to cleaning operations; NOTE: this source

code is duplicated in the function above! */

ulint   reserve = 2 + ((size_in_header / FSP_EXTENT_SIZE) * 2) / 200;

ulint   n_free = space->free_len + n_free_up;    if (reserve > n_free) {        return(0);

}    return(static_cast(n_free - reserve)

* FSP_EXTENT_SIZE * (page_size.physical() / 1024));

}

作者微信:gp_22389860

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值