婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁(yè) > 知識(shí)庫(kù) > InnoDB的關(guān)鍵特性-插入緩存,兩次寫,自適應(yīng)hash索引詳解

InnoDB的關(guān)鍵特性-插入緩存,兩次寫,自適應(yīng)hash索引詳解

熱門標(biāo)簽:電銷機(jī)器人公眾號(hào)推送 手機(jī)用地圖標(biāo)注工具 昆明智能外呼系統(tǒng)中心 智能電銷機(jī)器人靠譜么 長(zhǎng)安區(qū)違法建房地圖標(biāo)注 南宋地圖標(biāo)注黃河華山 地圖標(biāo)注培訓(xùn) 電銷機(jī)器人說明書 安國(guó)在哪里辦理400電話

InnoDB存儲(chǔ)引擎的關(guān)鍵特性包括插入緩沖兩次寫(double write)、自適應(yīng)哈希索引(adaptive hash index)。這些特性為InnoDB存儲(chǔ)引擎帶來了更好的性能和更高的可靠性。

插入緩沖

插入緩沖是InnoDB存儲(chǔ)引擎關(guān)鍵特性中最令人激動(dòng)的。不過,這個(gè)名字可能會(huì)讓人認(rèn)為插入緩沖是緩沖池中的一個(gè)部分。其實(shí)不然,InnoDB緩沖池中有Insert Buffer信息固然不錯(cuò),但是Insert Buffer和數(shù)據(jù)頁(yè)一樣,也是物理頁(yè)的一個(gè)組成部分。

主鍵是行唯一的標(biāo)識(shí)符,在應(yīng)用程序中行記錄的插入順序是按照主鍵遞增的順序進(jìn)行插入的。因此,插入聚集索引一般是順序的,不需要磁盤的隨機(jī)讀取。

比如說我們按下列SQL定義的表:create table t(id int auto_increment,name varchar(30),primary key(id));

id列是自增長(zhǎng)的,這意味著當(dāng)執(zhí)行插入操作時(shí),id列會(huì)自動(dòng)增長(zhǎng),頁(yè)中的行記錄按id執(zhí)行順序存放。一般情況下,不需要隨機(jī)讀取另一頁(yè)執(zhí)行記錄的存放。因此,在這樣的情況下,插入操作一般很快就能完成。但是,不可能每張表上只有一個(gè)聚集索引,在更多的情況下,一張表上有多個(gè)非聚集的輔助索引(secondary index)。比如,我們還需要按照name這個(gè)字段進(jìn)行查找,并且name這個(gè)字段不是唯一的。

表是按如下的SQL語(yǔ)句定義的:create table t (id int auto_increment,name varchar(30),primary key(id),key(name));

這樣的情況下產(chǎn)生了一個(gè)非聚集的并且不是唯一的索引。在進(jìn)行插入操作時(shí),數(shù)據(jù)頁(yè)的存放還是按主鍵id的執(zhí)行順序存放,但是對(duì)于非聚集索引,葉子節(jié)點(diǎn)的插入不再是順序的了。這時(shí)就需要離散地訪問非聚集索引頁(yè),插入性能在這里變低了。然而這并不是這個(gè)name字段上索引的錯(cuò)誤,因?yàn)锽+樹的特性決定了非聚集索引插入的離散性。

InnoDB存儲(chǔ)引擎開創(chuàng)性地設(shè)計(jì)了插入緩沖,對(duì)于非聚集索引的插入或更新操作,不是每一次直接插入索引頁(yè)中,而是先判斷插入的非聚集索引頁(yè)是否在緩沖池中。如果在,則直接插入;如果不在,則先放入一個(gè)插入緩沖區(qū)中,好似欺騙數(shù)據(jù)庫(kù)這個(gè)非聚集的索引已經(jīng)插到葉子節(jié)點(diǎn)了,然后再以一定的頻率執(zhí)行插入緩沖和非聚集索引頁(yè)子節(jié)點(diǎn)的合并操作,這時(shí)通常能將多個(gè)插入合并到一個(gè)操作中(因?yàn)樵谝粋€(gè)索引頁(yè)中),這就大大提高了對(duì)非聚集索引執(zhí)行插入和修改操作的性能。

插入緩沖的使用需要滿足以下兩個(gè)條件:

1.索引是輔助索引。

2.索引不是唯一的。

當(dāng)滿足以上兩個(gè)條件時(shí),InnoDB存儲(chǔ)引擎會(huì)使用插入緩沖,這樣就能提高性能了。不過考慮一種情況,應(yīng)用程序執(zhí)行大量的插入和更新操作,這些操作都涉及了不唯一的非聚集索引,如果在這個(gè)過程中數(shù)據(jù)庫(kù)發(fā)生了宕機(jī),這時(shí)候會(huì)有大量的插入緩沖并沒有合并到實(shí)際的非聚集索引中。如果是這樣,恢復(fù)可能需要很長(zhǎng)的時(shí)間,極端情況下甚至需要幾個(gè)小時(shí)來執(zhí)行合并恢復(fù)操作。

輔助索引不能是唯一的,因?yàn)樵诎阉迦氲讲迦刖彌_時(shí),我們并不去查找索引頁(yè)的情況。如果去查找肯定又會(huì)出現(xiàn)離散讀的情況,插入緩沖就失去了意義。

查看插入緩沖的信息:

show engine innodb status\G

seg size顯示了當(dāng)前插入緩沖的大小為2*16KB,free list len代表了空閑列表的長(zhǎng)度,size代表了已經(jīng)合并記錄頁(yè)的數(shù)量。

下面一行可能是我們真正關(guān)心的,因?yàn)樗@示了提高性能了。inserts代表插入的記錄數(shù),merged recs代表合并的頁(yè)的數(shù)量,merges代表合并的次數(shù)。

merged recs:merges大約為3:1,代表插入緩沖將對(duì)于非聚集索引頁(yè)的IO請(qǐng)求大約降低了3倍。

問題:

目前插入緩沖存在一個(gè)問題是,在寫密集的情況下,插入緩沖會(huì)占用過多的緩沖池內(nèi)存,默認(rèn)情況下最大可以占用1/2的緩沖池內(nèi)存。Percona已發(fā)布一些patch來修正插入緩沖占用太多緩沖池內(nèi)存的問題,具體的可以到http://www.percona.com/percona-lab.html查找。簡(jiǎn)單來說,修改IBUF_POOL_SIZE_PER_MAX_SIZE就可以對(duì)插入緩沖的大小進(jìn)行控制,例如,將IBUF_POOL_SIZE_PER_MAX_SIZE改為3,則最大只能使用1/3的緩沖池內(nèi)存。

兩次寫

如果說插入緩沖帶給InnoDB存儲(chǔ)引擎的是性能,那么兩次寫帶給InnoDB存儲(chǔ)引擎的是數(shù)據(jù)的可靠性。當(dāng)數(shù)據(jù)庫(kù)宕機(jī)時(shí),可能發(fā)生數(shù)據(jù)庫(kù)正在寫一個(gè)頁(yè)面,而這個(gè)頁(yè)只寫了一部分(比如16K的頁(yè),只寫前4K的頁(yè))的情況,我們稱之為部分寫失效(partial page write)。在InnoDB存儲(chǔ)引擎未使用double write技術(shù)前,曾出現(xiàn)過因?yàn)椴糠謱懯Ф鴮?dǎo)致數(shù)據(jù)丟失的情況。

有人也許會(huì)想,如果發(fā)生寫失效,可以通過重做日志進(jìn)行恢復(fù)。這是一個(gè)辦法。但是必須清楚的是,重做日志中記錄的是對(duì)頁(yè)的物理操作,如偏移量800,寫'aaaa'記錄。如果這個(gè)頁(yè)本身已經(jīng)損壞,再對(duì)其進(jìn)行重做是沒有意義的。這就是說,在應(yīng)用(apply)重做日志前,我們需要一個(gè)頁(yè)的副本,當(dāng)寫入失效發(fā)生時(shí),先通過頁(yè)的副本來還原該頁(yè)再進(jìn)行重做,這就是doublewrite。

InnoDB存儲(chǔ)引擎doublewrite的體系架構(gòu)如圖2-4所示

doublewrite由兩部分組成:一部分是內(nèi)存中的doublewrite buffer,大小為2MB;另一部分是物理磁盤上共享表空間中連續(xù)的128個(gè)頁(yè),即兩個(gè)區(qū)(extent),大小同樣為2MB(頁(yè)的副本)。當(dāng)緩沖池的臟頁(yè)刷新時(shí),并不直接寫磁盤,而是會(huì)通過memcpy函數(shù)將臟頁(yè)先拷貝到內(nèi)存中的doublewrite buffer,之后通過doublewrite buffer再分兩次,每次寫入1MB到共享表空間的物理磁盤上,然后馬上調(diào)用fsync函數(shù),同步磁盤,避免緩沖寫帶來的問題。在這個(gè)過程中,因?yàn)閐oublewrite頁(yè)是連續(xù)的,因此這個(gè)過程是順序?qū)懙模_銷并不是很大。在完成doublewrite頁(yè)的寫入后,再將doublewrite buffer中的頁(yè)寫入各個(gè)表空間文件中,此時(shí)的寫入則是離散的。

可以通過以下命令觀察到doublewrite運(yùn)行的情況: show global status like 'innodb_dblwr%'\G

doublewrite一共寫了18 445個(gè)頁(yè),但實(shí)際的寫入次數(shù)為434,(42:1)   基本上符合64:1。

如果發(fā)現(xiàn)你的系統(tǒng)在高峰時(shí)Innodb_dblwr_pages_written:Innodb_dblwr_writes遠(yuǎn)小于64:1,那么說明你的系統(tǒng)寫入壓力并不是很高。

如果操作系統(tǒng)在將頁(yè)寫入磁盤的過程中崩潰了,在恢復(fù)過程中,InnoDB存儲(chǔ)引擎可以從共享表空間中的doublewrite中找到改頁(yè)的一個(gè)副本,將其拷貝到表空間文件,再應(yīng)用重做日志。下面顯示了由doublewrite進(jìn)行恢復(fù)的一種情況: 

090924 11:36:32 mysqld restarted
090924 11:36:33 InnoDB:Database was not shut down normally!
InnoDB:Starting crash recovery.
InnoDB:Reading tablespace information from the.ibd files……
InnoDB:Error:space id in fsp header 0,but in the page header 4294967295
InnoDB:Error:tablespace id 4294967295 in file./test/t.ibd is not sensible
InnoDB:Error:tablespace id 0 in file./test/t2.ibd is not sensible
090924 11:36:33 InnoDB:Operating system error number 40 in a file operation.
InnoDB:Error number 40 means'Too many levels of symbolic links'.
InnoDB:Some operating system error numbers are described at
InnoDB:http://dev.mysql.com/doc/refman/5.0/en/operating-system-error-codes.html
InnoDB:File name./now/member
InnoDB:File operation call:'stat'.
InnoDB:Error:os_file_readdir_next_file()returned-1 in
InnoDB:directory./now
InnoDB:Crash recovery may have failed for some.ibd files!
InnoDB:Restoring possible half-written data pages from the doublewrite
InnoDB:buffer……

參數(shù)skip_innodb_doublewrite可以禁止使用兩次寫功能,這時(shí)可能會(huì)發(fā)生前面提及的寫失效問題。不過,如果你有多臺(tái)從服務(wù)器(slave server),需要提供較快的性能(如slave上做的是RAID0),也許啟用這個(gè)參數(shù)是一個(gè)辦法。不過,在需要提供數(shù)據(jù)高可靠性的主服務(wù)器(master server)上,任何時(shí)候我們都應(yīng)確保開啟兩次寫功能。

注意:有些文件系統(tǒng)本身就提供了部分寫失效的防范機(jī)制,如ZFS文件系統(tǒng)。在這種情況下,我們就不要啟用doublewrite了。 

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

哈希(hash)是一種非常快的查找方法,一般情況下查找的時(shí)間復(fù)雜度為O(1)。常用于連接(join)操作,如SQL Server和Oracle中的哈希連接(hash join)。但是SQL Server和Oracle等常見的數(shù)據(jù)庫(kù)并不支持哈希索引(hash index)。MySQL的Heap存儲(chǔ)引擎默認(rèn)的索引類型為哈希,而InnoDB存儲(chǔ)引擎提出了另一種實(shí)現(xiàn)方法,自適應(yīng)哈希索引(adaptive hash index)。

InnoDB存儲(chǔ)引擎會(huì)監(jiān)控對(duì)表上索引的查找,如果觀察到建立哈希索引可以帶來速度的提升,則建立哈希索引,所以稱之為自適應(yīng)(adaptive)的。自適應(yīng)哈希索引通過緩沖池的B+樹構(gòu)造而來,因此建立的速度很快。而且不需要將整個(gè)表都建哈希索引,InnoDB存儲(chǔ)引擎會(huì)自動(dòng)根據(jù)訪問的頻率模式來為某些頁(yè)建立哈希索引。

根據(jù)InnoDB的官方文檔顯示,啟用自適應(yīng)哈希索引后,讀取和寫入速度可以提高2倍;對(duì)于輔助索引的連接操作,性能可以提高5倍。自適應(yīng)哈希索引是非常好的優(yōu)化模式,其設(shè)計(jì)思想是數(shù)據(jù)庫(kù)自優(yōu)化(self-tuning),即無需DBA對(duì)數(shù)據(jù)庫(kù)進(jìn)行調(diào)整。

查看當(dāng)前自適應(yīng)哈希索引的使用狀況:show engine innodb status\G

現(xiàn)在可以看到自適應(yīng)哈希索引的使用信息了,包括自適應(yīng)哈希索引的大小、使用情況、每秒使用自適應(yīng)哈希索引搜索的情況。值得注意的是,哈希索引只能用來搜索等值的查詢,如select * from table where index_col='xxx',而對(duì)于其他查找類型,如范圍查找,是不能使用的。因此,這里出現(xiàn)了non-hash searches/s的情況。用hash searches:non-hash searches命令可以大概了解使用哈希索引后的效率。

由于自適應(yīng)哈希索引是由InnoDB存儲(chǔ)引擎控制的,所以這里的信息只供我們參考。不過我們可以通過參數(shù)innodb_adaptive_hash_index來禁用或啟動(dòng)此特性,默認(rèn)為開啟。

以上這篇InnoDB的關(guān)鍵特性-插入緩存,兩次寫,自適應(yīng)hash索引詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 探究MySQL中索引和提交頻率對(duì)InnoDB表寫入速度的影響
  • 淺談innodb的索引頁(yè)結(jié)構(gòu),插入緩沖,自適應(yīng)哈希索引
  • mysql 數(shù)據(jù)庫(kù)中索引原理分析說明
  • Mysql使用索引的正確方法及索引原理詳解
  • MySQL索引背后的數(shù)據(jù)結(jié)構(gòu)及算法原理詳解
  • 深入講解MySQL Innodb索引的原理

標(biāo)簽:東莞 潛江 武漢 合肥 江門 吉安 長(zhǎng)沙 南昌

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《InnoDB的關(guān)鍵特性-插入緩存,兩次寫,自適應(yīng)hash索引詳解》,本文關(guān)鍵詞  InnoDB,的,關(guān)鍵,特性,插入,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《InnoDB的關(guān)鍵特性-插入緩存,兩次寫,自適應(yīng)hash索引詳解》相關(guān)的同類信息!
  • 本頁(yè)收集關(guān)于InnoDB的關(guān)鍵特性-插入緩存,兩次寫,自適應(yīng)hash索引詳解的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    狠狠色伊人亚洲综合成人| 国产一区二区三区免费在线观看| 亚洲综合一二区| 久久电影国产免费久久电影| 不卡视频在线看| 欧美一级搡bbbb搡bbbb| 亚洲欧洲综合另类| 成人黄色综合网站| 精品日韩在线一区| 日韩二区在线观看| 欧美性猛片aaaaaaa做受| 国产精品污污网站在线观看| 激情综合色综合久久综合| 欧美日韩一二三| 亚洲欧美电影一区二区| 成人爽a毛片一区二区免费| 成人高清av在线| 国产日韩亚洲欧美综合| 97久久超碰国产精品| 在线看国产一区二区| 日韩国产欧美在线播放| 久久久精品免费免费| 在线免费观看日韩欧美| 国产美女精品在线| 亚洲在线视频免费观看| 26uuu另类欧美| 色系网站成人免费| 麻豆精品一区二区三区| 亚洲伦在线观看| 精品久久久久久亚洲综合网| 色婷婷亚洲一区二区三区| 久久国产福利国产秒拍| 亚洲一区在线播放| 男男gaygay亚洲| 日韩一区二区三| 精品在线观看视频| 久久美女高清视频 | 亚洲欧美日韩国产一区二区三区 | 国产一区欧美二区| 亚洲精品国产a久久久久久| 捆绑调教美女网站视频一区| 亚洲欧美日韩久久| 国产色一区二区| 欧美一区三区二区| 色噜噜狠狠色综合中国| 国产白丝网站精品污在线入口| 亚洲成人av电影| 亚洲视频在线一区观看| 欧美精品一区二区久久久| 欧美日韩一区国产| 色综合久久综合网97色综合 | 日韩免费高清电影| 欧美在线观看禁18| 一本大道综合伊人精品热热| 成人看片黄a免费看在线| 久久99国产精品成人| 视频在线观看一区| 亚洲第一成人在线| 亚洲自拍偷拍av| 一区二区三区在线免费观看| 亚洲丝袜制服诱惑| 国产清纯美女被跳蛋高潮一区二区久久w | 波多野结衣精品在线| 国产在线播精品第三| 久久99国内精品| 蜜桃av一区二区三区电影| 天堂va蜜桃一区二区三区漫画版| 亚洲综合区在线| 一区二区三区四区激情| 一区二区在线看| 一个色妞综合视频在线观看| 日韩美女啊v在线免费观看| 成人综合在线视频| 亚洲精品免费在线播放| 国产女主播一区| 91精品国产综合久久精品app| 成人综合婷婷国产精品久久| 首页欧美精品中文字幕| 综合中文字幕亚洲| 26uuu精品一区二区| 欧美伦理电影网| aaa国产一区| 中文字幕亚洲一区二区av在线 | www.亚洲精品| 94-欧美-setu| 欧美日韩一区二区欧美激情| 91精品国产综合久久久蜜臀粉嫩| 欧美久久久久久久久| 日韩欧美一二三四区| 欧美精品一区二区三区视频| 国产欧美中文在线| 亚洲美女屁股眼交3| 亚洲高清免费在线| 美女mm1313爽爽久久久蜜臀| 国产精品99久久久| 色诱视频网站一区| 欧美精品黑人性xxxx| 日韩精品自拍偷拍| 国产精品乱码妇女bbbb| 一区二区三区波多野结衣在线观看| 午夜精品爽啪视频| 久久不见久久见免费视频7| 岛国一区二区三区| 欧美人体做爰大胆视频| 亚洲精品一区在线观看| 亚洲欧洲av在线| 日本网站在线观看一区二区三区 | 岛国一区二区三区| 在线精品国精品国产尤物884a| 5858s免费视频成人| 国产日产亚洲精品系列| 亚洲欧美日韩在线| 美女一区二区三区在线观看| 成人深夜视频在线观看| 欧美男男青年gay1069videost| 成a人片亚洲日本久久| 日本一道高清亚洲日美韩| 热久久久久久久| 精品一区二区免费视频| 国产精品自拍在线| 成人黄色av网站在线| 91视频在线观看| 在线观看视频91| 欧美日韩视频在线一区二区| 欧美日韩三级在线| 精品人在线二区三区| 国产高清精品网站| 欧美区一区二区三区| 99久久国产综合精品色伊| 色哟哟精品一区| 欧美一区二区三区精品| 久久精品综合网| 久久se精品一区二区| 欧美视频中文字幕| 国产精品国产三级国产| 国产一区二区三区观看| 欧美一级爆毛片| 亚洲特黄一级片| 国产精品自拍一区| 精品国产亚洲在线| 麻豆91免费看| 日本中文在线一区| 蜜桃av一区二区三区| 99精品在线免费| 91麻豆精品国产91久久久资源速度| 精品国产第一区二区三区观看体验| 综合色天天鬼久久鬼色| 男男gaygay亚洲| 日韩二区在线观看| 欧美日韩三级视频| 亚洲成av人片在www色猫咪| 91福利小视频| 国产精品视频一二三| 成人的网站免费观看| 欧美国产一区在线| 成人免费av网站| 亚洲欧美一区二区不卡| 色婷婷综合久久| 综合在线观看色| 91视频免费观看| 有坂深雪av一区二区精品| 91在线观看免费视频| 一区二区三区免费在线观看| 在线观看亚洲一区| 午夜欧美一区二区三区在线播放| 欧美无砖专区一中文字| 亚洲一区视频在线| 欧美日韩高清不卡| 日韩欧美中文一区二区| 国产欧美日韩另类一区| 久久国产精品72免费观看| 欧美日韩日本视频| 亚洲一级电影视频| 一本久道久久综合中文字幕| 国产精品色哟哟| 国产真实乱偷精品视频免| 91精品免费在线| 日韩电影一区二区三区四区| 欧美中文字幕一区| 亚洲激情自拍偷拍| 日本高清成人免费播放| 最好看的中文字幕久久| eeuss鲁片一区二区三区| 国产精品久久夜| youjizz国产精品| 亚洲欧美一区二区三区国产精品 | 国产日韩欧美电影| 国产一区二区三区免费看| 久久综合视频网| 国产一区二区在线电影| 久久亚洲精品国产精品紫薇| 国产一区福利在线| 中文字幕乱码日本亚洲一区二区| 国产日韩欧美一区二区三区综合| 99久久99久久久精品齐齐| 日韩精品免费专区| 国产欧美精品一区二区色综合| 在线一区二区观看| 国产一区二区伦理片| 亚洲电影中文字幕在线观看|