色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

剖析MySQL InnoDB存儲原理(下)

jf_78858299 ? 來源:老李說架構之道 ? 作者:夢海飛翔 ? 2023-02-15 15:47 ? 次閱讀

一、InnoDB存儲引擎內存管理

1.1 概念:

Buffer Pool:預分配的內存池;

Page:Buffer Pool的最小單位;

Free list:空閑Page組成的鏈表;

Flush list:臟頁鏈表;

Page hash 表:維護內存Page和文件Page的映射關系;

這幾個概念關系,如圖所示:

圖片

1.2 內存的淘汰算法:LRU

分為三部分:LRU_new、LRU_old、MidPoint。如下圖所描述:

圖片

1.2.1 頁面裝載的邏輯如圖:

圖片

數據從磁盤到內存 > Free list中取 > LRU中淘汰 > LRU Flush

1.2.2 頁面淘汰

LRU鏈表中將第一個臟頁刷盤并“釋放”,放到Free list中。

1.2.3 位置移動

圖片

innodb_old_blocks_time old區存活時間,大于此值,有機會進入new區

Midpoint:指向5/8位置

為了減少移動到次數和lock,思路訪問時間 + 頻率,避免熱數據被移除,通過如下:freed_page_clock:Buffer Pool淘汰頁數

移動時機:

當前freed_page_clock - 上次移動到Header時freed_page_clock >LRU_new長度1/4

2、MySQL事務管理機制原理分析

1、基本概念:

1.1 事務特性:

A(Atomicity原子性):全部成功或全部失敗

I(Isolation隔離性):并行事務之間互不干擾

D(Durability持久性):事務提交后,永久生效

C(Consistency一致性):通過AID保證

1.2 并發問題:

臟讀(Drity Read):讀取到未提交的數據

不可重復讀(Non-repeatable read):兩次讀取結果不同

幻讀(Phantom Read):select 操作得到的結果所表征的數據狀態無法支撐后續的業務操作

1.3 隔離級別

Read Uncommitted(讀取未提交內容):最低隔離級別,會讀取到其他事務未提交的數據,臟讀;

Read Committed(讀取提交內容):事務過程中可以讀取到其他事務已提交的數據,不可重復讀;

Repeatable Read(可重復讀):每次讀取相同結果集,不管其他事務是否提交,幻讀;

Serializable(串行化):事務排隊,隔離級別最高,性能最差;

2、事務實現原理

2.1 MVCC

Read View:活躍事務列表(還未提交的事務) 列表中最小事務ID(提交),列表中最大事務ID(未提交);具體可見性通過如下流程圖所示:

圖片

2.2 MVCC如何實現

undo log:實現數據多版本,回滾,提交即清理;

圖片

redo log:實現事務持久性,記錄修改,用于異常恢復,循環寫文件;

Write Pos:寫入位置

Chick Point:刷盤位置

Chick Point -> Write Pos:待落盤數據

圖片

寫入流程:

圖片

刷盤時機:

innodb_flush_log_at_trx_commit

圖片

3、MySQL使用及調優實踐分析

3.1 索引使用技巧

聯合索引:優于多列獨立索引

索引順序:選擇性高的在前面

覆蓋索引:二級索引存儲主鍵值更有利

索引排序:索引同時滿足查詢和排序

3.2 分庫分表

是否分表,建議單表不超過1KW

分表方式,取模:存儲均勻&訪問均勻,按時間:冷熱庫

分庫,按業務垂直分,水平查分多個庫

3.3 使用建議

數據庫字符集使用utf8mb4;

VARCHAR按實際需要分配長度;

文本字段建議使用VARCHAR;

時間字段建議使用long;

bool字段建議使用tinyint;

枚舉字段建議使用tinyint;

交易金額建議使用long;

禁止使用“%”前導的查詢;

禁止在索引列進行數學運算,會導致索引失效;

select * from t1 where id+1 >1121 不會使用索引

select * from t1 where id >1121 - 1 會使用索引

表必須有主鍵,建議使用業務主鍵;

單張表中索引數量不超過5個;

單個索引字段數不超過5個;

字符串索引使用前綴索引,前綴長度不超過10個字符;


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 存儲
    +關注

    關注

    13

    文章

    4329

    瀏覽量

    85946
  • 內存
    +關注

    關注

    8

    文章

    3037

    瀏覽量

    74144
  • MySQL
    +關注

    關注

    1

    文章

    817

    瀏覽量

    26628
收藏 人收藏

    評論

    相關推薦

    深度剖析MySQL/InnoDB的并發控制和加鎖技術

    本文主要是針對MySQL/InnoDB的并發控制和加鎖技術做一個比較深入的剖析,并且對其中涉及到的重要的概念,如多版本并發控制(MVCC),臟讀(dirty read),幻讀(phantom
    的頭像 發表于 10-29 14:36 ?2165次閱讀
    深度<b class='flag-5'>剖析</b><b class='flag-5'>MySQL</b>/<b class='flag-5'>InnoDB</b>的并發控制和加鎖技術

    詳解Mysql數據庫InnoDB存儲引擎事務

    關于Mysql數據庫InnoDB存儲引擎事務的一點理解
    發表于 05-13 10:11

    InnoDB鎖的特點和狀態查詢

    MySQL探秘(五)InnoDB鎖的類型和狀態查詢
    發表于 08-07 11:45

    分布式MySQLInnoDB cluster

    分布式MySQL——InnoDB cluster和性能測試
    發表于 04-15 08:43

    MySQL存儲引擎簡析

    MySQL存儲引擎InnoDB??InnoDB存儲文件有兩個,后綴名分別是.frm和.idb,其中.frm是表的定義文件,而.idb是數
    發表于 09-06 06:07

    MySQL存儲引擎中MyISAM與InnoDB優劣勢比較分析

    使用MySQL當然會接觸到MySQL存儲引擎,在新建數據庫和新建數據表的時候都會看到。
    的頭像 發表于 07-18 16:00 ?2709次閱讀
    <b class='flag-5'>MySQL</b><b class='flag-5'>存儲</b>引擎中MyISAM與<b class='flag-5'>InnoDB</b>優劣勢比較分析

    關于mysql存儲引擎你知道多少

    Mysql中用的最多的兩種存儲引擎就是MyISAM和InnDB,其中MyISAM是5.1版本之前的默認存儲引擎,InnoDB是5.1版本之后的默認
    發表于 08-23 10:52 ?858次閱讀

    最有用的mysql問答

    、壓縮、空間函數等,但是不支持事務和行級鎖,所以一般用于有大量查詢少量插入的場景來使用,而且myisam不支持外鍵,并且索引和數據是分開存儲的。 innodb是基于聚簇索引建立的,和myisam相反它支持事務、外鍵,并且通過MVCC來支持高并發,索引和數據
    的頭像 發表于 09-30 17:43 ?1710次閱讀
    最有用的<b class='flag-5'>mysql</b>問答

    MySQL中的高級內容詳解

    MySQL 進階!!! 本文思維導圖如下。 事務控制和鎖定語句 我們知道,MyISAM 和 MEMORY 存儲引擎支持表級鎖定(table-level locking),InnoDB 存儲
    的頭像 發表于 03-11 16:55 ?2227次閱讀
    <b class='flag-5'>MySQL</b>中的高級內容詳解

    關于InnoDB的內存結構及原理詳解

    除此之外還聊了一MySQLInnoDB的日志,和兩次寫,總的來說算是一個入門級別的介紹,這篇文章就來詳細介紹一InnoDB的內存結構。
    的頭像 發表于 04-16 16:15 ?2797次閱讀
    關于<b class='flag-5'>InnoDB</b>的內存結構及原理詳解

    MySQL中的redo log是什么

    前言 說到MySQL,有兩塊日志一定繞不開,一個是InnoDB存儲引擎的redo log(重做日志),另一個是MySQL Servce層的 binlog(歸檔日志)。 只要是數據更新操
    的頭像 發表于 09-14 09:40 ?2037次閱讀

    innodb究竟是如何存數據的

    前言如果你使用過mysql數據庫,對它的存儲引擎:innodb,一定不會感到陌生。 眾所周知,在mysql5以前,默認的存儲引擎是:mysl
    的頭像 發表于 10-09 15:41 ?1352次閱讀
    <b class='flag-5'>innodb</b>究竟是如何存數據的

    MySQL5.6 InnoDB支持全文檢索

    在早期的 MySQL 中,InnoDB 并不支持全文檢索技術,從 MySQL 5.6 開始,InnoDB 開始支持全文檢索。
    的頭像 發表于 11-12 15:14 ?1428次閱讀

    剖析MySQL InnoDB存儲原理(上)

    一、MySQL記錄的存儲結構: 1、Page的結構,如下圖:
    的頭像 發表于 02-15 15:45 ?449次閱讀
    <b class='flag-5'>剖析</b><b class='flag-5'>MySQL</b> <b class='flag-5'>InnoDB</b><b class='flag-5'>存儲</b>原理(上)

    MySQL中的InnoDB是什么?

    有許多強大的MySQL存儲引擎可供我們使用,而InnoDB無疑是最受歡迎的存儲引擎之一。它高度可靠和高效,因此它成為5.5版本以后所有MySQL
    的頭像 發表于 04-13 09:09 ?742次閱讀
    主站蜘蛛池模板: 国产亚洲精品久久77777| 夜色88V精品国产亚洲AV| 丰满少妇67194视频| 亚洲熟伦熟女专区| 啪啪做羞羞事小黄文| 黄色网址在线看| 邓奴的视频IVK| 在线免费观看毛片| 亚洲国产成人久久精品影视| 欧美午夜精品A片一区二区HD| 好男人好资源在线播放| 村上里沙快播| 2022国产精品不卡a| 亚洲欧美免费无码专区| 入室强伦女教师被学生| 欧美123区| 浪小辉军警服务员VIDEOS| 国产欧美无码亚洲毛片| 成人影院午夜久久影院| 99re8在线视频精品| 在线成 人av影院| 亚洲国产精品免费线观看视频 | 日本女人水多| 美女也烦恼主题曲| 久久无码AV亚洲精品色午夜| 国产一区二区三区在线看片| 国产精品18久久久久久欧美网址 | 日本九九热在线观看官网| 毛片大全网站| 久章草一区二区| 久草精品视频| 精品国产影院| 护士的下面又湿又紧10P| 国产亚洲精品久久7777777| 国产精品www视频免费看| 丰满少妇69激懒啪啪无码| 草莓视频在线看免费高清观看| 99久久精品免费精品国产 | 岛国片在线免费观看| 床上色APP下载免费版| 超碰97人在线视频|