189 8069 5689

MySQL中Innodb表Datafree怎么计算

这篇文章给大家分享的是有关MySQL中Innodb表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 < FSP_EXTENT_SIZE) { //碎片页 直接返回0
        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));
}

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


新闻标题:MySQL中Innodb表Datafree怎么计算
当前网址:http://cdxtjz.cn/article/goojoh.html

其他资讯