記憶體結構包括buffer pool,change buffer,adaptive hash index和log buffer四塊。
緩衝池,bp內部以page為單位,預設為16k,bp底層採用鍊錶管理page,innodb訪問表記錄和索引時會在page中快取,後續先快取,未命中再io。
page分為free page(空閒)、clean page(inserted的資料)和dirty page(updated,和磁碟不一致)。對應維護和管理的鏈結結構為free list(管理free pagfe)、lru list(管理clean page和 dirty page)和flush list(管理dirty page,內部按修改的時間順序)
通過「show engine innodb status;」可查詢內部結構(容量大小單位為page)
傳統的lru 演算法才用鍊錶以used為維度來實現的。採用末尾淘汰。innodb中的lru稍微做了優化,加入了乙個分界線(midpoint),mid之前的位置為new區(活躍),之後為old區(未活躍),避免掃表操作,空間比例為6:4(63:37),資料的new-old之間的移動,通過time(1秒)機制來回重新整理。
show variables like '%innodb_buffer%'; innodb_buffer_pool_chunk_size引數為5.7開始新增的,舊的版本不能動態配置。pool_size = instances * chunk_size
寫快取區。預設佔buffer pool的25%空間,最大為50%。
日誌緩衝區,用於儲存要寫入磁碟的log檔案(redo/undo),log buffer會定期或空間滿時自動重新整理到磁碟上。 整個過程為log buffer --> os cache --> 磁碟檔案兩步。可以通過設定'innodb_flush_log_at_trx_commit'引數控制日重新整理行為。
預設1秒重新整理一次日誌檔案,at_trx_commit值為0、1、2
0:每隔一秒寫日誌檔案和刷盤操作。
1:事物提交後,立刻插即寫日誌檔案和刷盤。
mysql磁碟結構主要包括表空間和日誌檔案。
系統表空間:包括資料字典、雙寫緩衝區、寫緩衝和undo logs。
獨立表空間:建立表存在於獨立表空間,通過設定innodb_file_per_table=on,開啟使用獨立的表空間。檔案格式為.ibd。
通用表空間:也可存放資料表,建立表時指定的namespace ,會存放在通用表空間。
臨時表空間:使用者臨時空間,mysql服務關閉後,會移除該空間。
undo表空間:5.7之後獨立出來,舊版本存放於系統表空間中。
mysql 8.0之後,磁碟做了很多調整,系統表空間裡只有chang buffer部分了。資料字典、雙鞋緩衝區和undo logs都有自己的獨立表空間。
CPU簡介(2)內部結構簡析
cpu的責任是解釋和執行最終轉換成機器語言的程式內容。cpu和記憶體都是由大量電晶體組成的電子部件,通常稱為ic integrated circuit,積體電路 cpu內部由暫存器 控制器 運算器和時鐘四部分組成,各部分之間由電流訊號相互連通。暫存器用來暫存指令 資料等處理物件,可將其看作是記憶體的...
HBase內部結構
table表 就是有乙個或者多個列族組成,加上之前的 使用,這個表概念應該很熟了 row行 乙個行包括了多個列,這些列通過列族來分類 column family列族 列族是多個列的集合,hbase會盡量的將乙個列族的列放入同乙個伺服器內,這樣可以提高訪問效能,並且可以批量管理有關聯的一堆列,所有的資...
mysql索引 2 索引內部結構
主要說明btree和hash索引 1.常用的加快查詢速度的資料結構 樹 二叉查詢樹 查詢 插入 修改 刪除的平均時間複雜度都是o n 平衡二叉樹 查詢 插入 修改 刪除的平均時間複雜度都是o logn 紅黑樹 查詢 插入 修改 刪除的平均時間複雜度都是o logn 雜湊 hashmap 查詢 插入 ...