• mysql原理 ~ binlog系列之 table_id详谈


    一简介: 今天来聊聊minlog中的table_id

    二 具体分析特点

       1 table_id 并不是固定的,它是当表被载入内存(table_definition_cache)时,临时分配的,是一个不断增长的变量

       2 当有新的table变更时,在cache中没有,就会触发一次load table def的操作,此时就会在原先最后一次table_id基础上+1,做为新的table def的id。 

       3  flush tables,之后对表的更新操作也会触发table_id 的增长。 

       4  如果table def cache过小,就会出现频繁的换入换出,从而导致table_id增长比较快。 

       5 重启主库使table_id 归0

       6 同一张表的table_id也不是一直不变的,记住,这个东西不是表定义的东西,是操作表的东西

    三 实验观察

       show binlog events in 'mysql-bin' 观察各种情况下的table_id变化  

    四 table_id的意义

       1任何一个东西都有它的意义,table_id也一样,它的作用是联系频繁DML操作和表结构的纽带.被包含在binlog中的Table_map_event(用于描述表的内部ID和结构定义)

       2 假如一个insert更新了10000条数据,那么对应的表结构信息是否需要记录10000次列?其实是对同一个表的操作,所以binlog只是记录了一个Table_map用于记录表结构相关信息,而后面的Write_rows记录了更新数据的行信息。他们之间是通过table_id来联系的。

       3 table_id用来做hash key,通过set_table(table_id)的方法将某个表的信息hash到cache中;又可以通过get_table()方法来根据table_id获得对应的表信息。

    四 总结

       本文来自于互联网的文章和自己的一些总结,如有问题,可以留言,我会进行处理

  • 相关阅读:
    java基础知识--环境变量配置
    安装oracle11g时遇到INS-13001环境不满足最低要求
    MINA系列学习-IoBuffer
    MINA系列学习-mina整体介绍
    DBCP数据源连接池实现原理分析
    dbcp数据源配置杂谈
    Java 内存区域和GC机制分析
    网站的防盗链与反盗链的那点事
    这一天博客小院我进来了!
    AOP
  • 原文地址:https://www.cnblogs.com/danhuangpai/p/11484256.html
Copyright © 2020-2023  润新知