在mysql server層有兩個與table相關的結構,分別為table、table_share。在開啟表時會先找table快取,若無,從table_share的快取空間找到對應快取建立表例項table,若table_share也沒用這從frm讀取表資訊建立table_share。
table_share是表定義快取,是乙個靜態表快取,唯一對應一張表,所有使用者都共享這個表物件。
其內容從系統表獲取(frm),它儲存在table_def_cache(hash表,key為表名(含庫名))中。
引數: table_definition_cache
相對於table_share而言,table可以看成是動態的,其內容會改變,會記錄表操作狀態。
每個執行緒都會有table物件,對應於同乙個table_share.
table中有引擎handler,用來操作引擎資料。
當表例項不用時會對錶進行快取,再次使用直接取出即可,在快取時可能需要呼叫ha_reset恢復例項狀態。(其中會呼叫handler::reset(),用來重置引擎表狀態),handler有可能被復用,如果不定義reset,可能出錯。
快取在表例項快取空間,同時由table_share的free_table和used_table對錶例項的使用情況進行管理。
引數: table_open_cache
mysql執行緒快取和表快取
一.執行緒快取 1.thread cache size定義了執行緒緩衝中的數量.每個快取中的執行緒通常消耗256kb記憶體 2.threads cached,可以看到已經建立的執行緒 二.表快取 table cache 1.表快取有點以myisam為中心 2.在mysql5.1中,這個變數被分為兩部...
MySQL表定義快取
mysql的表包含表名,表空間 索引 列 約束等資訊,這些表的元資料我們暫且稱為表定義資訊。對於innodb來說,mysql在server層和engine層都有表定義資訊。server層的表定義記錄在frm檔案中,而innodb層的表定義資訊儲存在innodb系統表中。例如 innodb sys d...
mysql 表快取記憶體
表快取記憶體 show global status like open tables 檢視開啟的表的數量 open tables 是當前在快取中開啟表的數量。opened tables 是mysql自啟動起,開啟表的數量。當opened tables數值非常大,說明cache太小,導致要頻繁地ope...