一簡介: 今天來聊聊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獲得對應的表信息。
四 總結
本文來自於互聯網的文章和自己的一些總結,如有問題,可以留言,我會進行處理