mysql table_id介绍

本文探讨了MySQL中table_id的作用,它作为内部标识符跟踪表在内存中的状态。table_id非固定且会随着表操作增长,可能引发溢出风险。文章介绍了如何检查table_id、其风险以及解决策略。
摘要由CSDN通过智能技术生成

table_id是什么

table_id是一个内部使用的标识符,用于标识数据库中的表,一个表对应一个唯一table_id;如果表结构发生变化,table_id也会发生变化,以确保当前缓存中,table_id和表名对应

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增长比较快。
     

查看table_id

show binlog events in 'mysql-bin.xx'; 
里面可以看到执行的table_id

mysql> show binary log events in 'mysql-bin.000161';
| mysql-bin.000161 | 3339 | Query          |     45170 |        3411 | BEGIN                                                                                                                                                          |
| mysql-bin.000161 | 3411 | Table_map      |     45170 |        3471 | table_id: 4278 (wang.hero3)                                                                                                                                    |
| mysql-bin.000161 | 3471 | Delete_rows    |     45170 |        3526 | table_id: 4278 flags: STMT_END_F                                                                                                                               |
| mysql-bin.000161 | 3526 | Xid            |     45170 |        3557 | COMMIT /* xid=6967 */                                                                                                                                          |
| mysql-bin.000161 | 3557 | Anonymous_Gtid |     45170 |        3622 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS'

table_id有什么风险

table_id是uint,最大值42亿;部分系统中如果频繁flush table或者表数量太多,频繁load table def的时候,可能会导致tablet_id溢出的情况,此时将无法CREATE表或者修改表结构;
决方法:

  1. 重启数据库使table_id 归0。
  2. 加大 table_definition_cache 的大小。增加table_open_cache大小来调整;
  3. 修改MySQL源码,将 RPL_TABLE_LIST结构中的uint型的table_id修改为ulong型 ,一劳永逸。
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值