日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

發(fā)布時(shí)間:2025/3/21 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql dba系统学习(21)mysql存储引擎InnoDB 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

mysql存儲(chǔ)引擎InnoDB


1,主體系結(jié)構(gòu):

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

緩沖池(buffer pool)、重做日志緩沖池(redo log buffer)以及額外的內(nèi)存池(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'來查看。

緩沖池:

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

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

innodb_buffer_pool_size 一般設(shè)置問機(jī)器的物理內(nèi)存的80%

innodb_additional_mem_pool_size 一般是緩存數(shù)據(jù)字典和數(shù)據(jù)結(jié)構(gòu)的信息,不宜太大



2,兩次寫:

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





3,自適應(yīng)哈希索引

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


4,重做日志文件

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


5,表空間文件

InnoDB默認(rèn)的表空間文件為ibdata1,可通過show variables like 'innodb_file_per_table'查看每個(gè)表是否產(chǎn)生單獨(dú)的.idb表空間文件。但是,單獨(dú)的表空間文件僅存儲(chǔ)該表的數(shù)據(jù)、索引和插入緩沖等信息,其余信息還是存放在默認(rèn)的表空間中。每個(gè)文件都可以自動(dòng)增長

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
一個(gè)指定數(shù)據(jù)文件的完全后綴包括文件名,它的尺寸和數(shù)個(gè)可選屬性:
file_name:file_size[:autoextend[:max:max_file_size]]
autoextend屬性和后面跟著的屬性只可被用來對innodb_data_file_path行里最后一個(gè)數(shù)據(jù)文件。?
如果你對最后的數(shù)據(jù)文件指定autoextend選項(xiàng)。如果數(shù)據(jù)文件耗盡了表空間中的自由空間,InnoDB就擴(kuò)展數(shù)據(jù)文件。擴(kuò)展的幅度是每次8MB。


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



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


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

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。