以下文章**於mysql解決方案工程師 ,作者徐軼韜mysql與其它的資料庫一樣,需要乙個儲存元資料的地方。在mysql8之前,它們以各種檔案的形式儲存在不同的地方,例如 .frm , .trg ,.trn等等。隨著時間的推移,這些檔案逐漸成為了各種環境中的瓶頸。mysql8推出了支援事務的資料字典。
mysql8.0的資料字典,相比較之前的版本,具有如下優勢:
mysql的information_schema由於效能問題,被使用者抱怨了很長一段時間,其原因是因為磁碟訪問會帶來額外的io開銷。而在mysql8.0裡,information_schema的一部分表是通過建立資料字典表之上的檢視來實現的,伺服器無需為每次查詢information_schema建立臨時表。之前讀取information_schema的資訊需要執行檔案操作,而現在只需要進行資料庫裡面的檢索即可。
8.0之前的mysql,伺服器和inndb的資料字典會分別儲存在不同的地方,裡面會有一些重複的資料,這些資料可能好長一段時間不會進行同步。另外對於類似myisam表的frm, .par, .opt, .trn等不同檔案進行管理時,需要使用複雜的**控制主從複製、崩潰故障恢復狀態。並且缺乏可擴充套件性。現在將這些元資料檔案儲存在資料字典表中。
mysql8.0支援原子性ddl語句,ddl語句被併入資料字典的更新、儲存引擎操作,並且會產生乙個相關的二進位制日誌,因此可以確保乙個具有原子性的完整事務執行。
資料字典儲存在具有完整事務功能的innodb表中,並儲存在mysql系統資料庫下面。資料字典建立在乙個innodb表空間檔案mysql.ibd裡,該檔案必須儲存在mysql的資料資料夾下面,不能修改其名稱,也不能被其它表空間檔案使用。
為了節省磁碟io,資料字典物件快取會將之前訪問過的資料字典物件進行快取以便重複利用。與mysql的其它快取機制一樣,採用lru策略。
新版本的mysql可能包含更改的資料字典表定義,當mysql執行原地公升級時,這些更改在伺服器重啟時執行。在伺服器啟動時,伺服器會對資料字典的當前版本與儲存在資料字典裡的資訊進行比較,以決定是否公升級。如果需要並支援公升級,伺服器將建立乙個新的資料字典表,並將元資料複製到新錶中,自動替換舊的資料字典表。如果無需公升級,伺服器將會正常啟動。可以使用 mysqld --no-dd-upgrade阻止自動公升級,當伺服器監測到資料字典版本資訊與儲存的不一致時,啟動失敗並提示錯誤資訊。
最後,介紹一下關於mysql8.0資料字典在使用上的一些注意事項。
Oracle 理解資料字典
最近在學習oracle資料庫,oracle嘛emmmm上手有點難啊哈哈 於是根據老師給的課件整理了一下 一 概述 二 oracle資料字典保存資料庫本身的系統資訊及所有資料庫物件資訊,包括 三 資料字典主要用途 資料字典結構分為 根據資料字典物件的虛實性不同,分為 以下是它們的具體敘述 查詢資料字典...
mysql資料字典
1 顯示資料庫列表2 顯示當前連線的資料庫 mysql select database 3 顯示庫中的資料表 mysql use mysql 指定mysql庫 mysql show tables 4 顯示資料表的結構 mysql describe yourtablename 說明 describe ...
mysql 匯出資料字典
select table catalog,table schema as 資料庫名,table name as 表名,column name as 欄位名,ordinal position as 字段位置,column default as 字段預設值,is nullable 是否允許空值,data...