日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql dba系统学习(21)mysql存储引擎InnoDB

發布時間:2025/3/21 数据库 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql dba系统学习(21)mysql存储引擎InnoDB 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mysql存儲引擎InnoDB


1,主體系結構:

默認7個后臺線程,4個io thread(insert buffer、log、read、write),1個master thread(優先級最高),1個鎖(lock)監控線程,1個錯誤監控線程。可以通過show engine innodb status來查看。新版本已對默認的read thread和write thread分別增大到4個,可通過show variables like 'innodb_io_thread%'查看。
存儲引擎組成:

緩沖池(buffer pool)、重做日志緩沖池(redo log buffer)以及額外的內存池(additional memory pool).具體配置可由show variables like 'innodb_buffer_pool_size'、show variables like
'innodb_log_buffer_size'、show variables like 'innodb_additional_mem_pool_size'來查看。

緩沖池:

占最大塊內存,用來存放各種數據的緩存包括有索引頁、數據頁、undo頁、插入緩沖、自適應哈希索引、innodb存儲的鎖信息、數據字典信息等。工作方式總是將數據庫文件按頁(每頁16k)讀取到緩沖池,然后按最近最少使用(lru)的算法來保留在緩沖池中的緩存數據。如果數據庫文件需要修改,總是首先修改在緩存池中的頁(發生修改后即為臟頁),然后再按照一定的頻率將緩沖池的臟頁刷新到文件。通過命令show engine innodb status;來查看。
日志緩沖:

將重做日志信息先放入這個緩沖區,然后按一定頻率將其刷新到重做日志文件。

innodb_buffer_pool_size 一般設置問機器的物理內存的80%

innodb_additional_mem_pool_size 一般是緩存數據字典和數據結構的信息,不宜太大



2,兩次寫:

它帶來InnoDB數據的可靠性。如果寫失效,可以通過重做日志進行恢復,但是重做日志中記錄的是對頁的物理操作,如果頁本身損壞,再對其進行重做是沒有意義的。所以,在應用重做日志前,需要一個頁的副本,當寫入失效發生時,先通過頁的副本來還原該頁,再進行重做,這就是doublewire。
恢復數據=頁副本+重做日志





3,自適應哈希索引

InnoDB存儲引擎提出一種自適應哈希索引,存儲引擎會監控對表上索引的查找,如果觀察到建立建立哈希索引會帶來速度的提升,則建立哈希索引,所以稱之為自適應的。自適應哈希索引只能用來搜索等值的查詢,如select * from table where index_col='***', 此外自適應哈希是由InnoDB存儲引擎控制的,我們只能通過innodb_adaptive_hash_index來禁用或啟用,默認開啟。


4,重做日志文件

實例和介質失敗,重做日志文件就能派上用場,如數據庫掉電,InnoDB存儲引擎會使用重做日志恢復到掉電前的時刻,以此來保證數據的完整性。參數innodb_log_file_size指定了重做日志文件的大小;innodb_log_file_in_group指定了日志文件組中重做日志文件的數量,默認為2,innodb_mirrored_log_groups指定了日志鏡像文件組的數量,默認為1,代表只有一個日志文件組,沒有鏡像;innodb_log_group_home_dir指定了日志文件組所在路徑,默認在數據庫路徑下。
二進制日志和重做日志的區別:首先,二進制日志會記錄所有與Mysql有關的日志記錄,包括InnoDB、MyISAM、Heap等其他存儲引擎的日志。而InnoDB存儲引擎重做日志只存儲有關其本身的事務日志;其次內容不同,不管將二進制日志文件記錄的格式設為STATEMENT還是ROW,又或者是MIXED,其記錄的都是關于一個事務的具體操作內容。而InnoDB存儲引擎的重做日志文件記錄的關于每個頁的更改的物理情況 。此外,寫入時間不同,二進制日志文件是在事務提交前進行記錄的,而在事務進行的過程中,不斷有重做日志條目被 寫入重做日志文件中。


5,表空間文件

InnoDB默認的表空間文件為ibdata1,可通過show variables like 'innodb_file_per_table'查看每個表是否產生單獨的.idb表空間文件。但是,單獨的表空間文件僅存儲該表的數據、索引和插入緩沖等信息,其余信息還是存放在默認的表空間中。每個文件都可以自動增長

mysql> show variables like "%file_path%";
+-----------------------+------------------------+
| Variable_name | Value |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:10M:autoextend |
+-----------------------+------------------------+
1 row in set (0.00 sec)

innodb老提示我060809 16:49:11 [ERROR] InnoDB: syntax error in innodb_data_file_path

innodb_data_file_path=ibdata1:50M;ibdata2:50M:autoextend
一個指定數據文件的完全后綴包括文件名,它的尺寸和數個可選屬性:
file_name:file_size[:autoextend[:max:max_file_size]]
autoextend屬性和后面跟著的屬性只可被用來對innodb_data_file_path行里最后一個數據文件。?
如果你對最后的數據文件指定autoextend選項。如果數據文件耗盡了表空間中的自由空間,InnoDB就擴展數據文件。擴展的幅度是每次8MB。


6,mysql innodb中的鎖
InnoDB存儲引擎鎖的實現和Oracle非常類似,提供一致性的非鎖定讀、行級鎖支持、行級鎖沒有相關的開銷,可以同時得到并發性和一致性。
InnoDB存儲引擎實現了如下兩種標準的行級鎖:
共享鎖(S Lock):允許事務讀一行數據;
排他鎖(X Lock):允許事務刪除或者更新一行數據。
當一個事務已經獲得了行r的共享鎖,那么另外的事務可以立即獲得行r的共享鎖,因為讀取沒有改變行r的數據,我們稱這種情況為鎖兼容。但如果有事務想獲得行r的排他鎖,則它必須等待事務釋放行r上的共享鎖————這種情況稱為鎖不兼容。



在InnoDB Plugin之前,只能通過SHOW FULL PROCESSLIST,SHOW ENGINE INOODB STATUS等命令來查看當前的數據庫請求,然后再判斷當前事務中的鎖的情況。新版本的InnoDB Plugin中,在INFORMATION_SCHEMA架構下添加了INNODB_TRX、INNODB_LOCKS、InnoDB_LOCK_WAITS。通過這三張表,可以更簡單地監控當前的事務并分析可能存在的鎖的問題。


from:?http://wolfword.blog.51cto.com/4892126/1297106

總結

以上是生活随笔為你收集整理的mysql dba系统学习(21)mysql存储引擎InnoDB的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。