首頁 資料庫 mysql教程 InnoDB缓存相关

InnoDB缓存相关

Jun 01, 2016 pm 01:13 PM
科技 資料庫系統 記錄

InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。在数据库系统中,由于CPU速度和磁盘速度之前的鸿沟,通常使用缓冲池技术来提高数据库的整体性能。

1. Innodb_buffer_pool

缓冲池(buffer pool)简单来说就是一块内存区域。缓冲池中缓存的数据页类型有:索引页、数据页、undo页、插入缓冲、自适应哈希索引、InnoDB存储的锁信息、数据字典信息等。不能简单认为,缓冲池只是缓存索引页和数据页,它们只是占缓冲池很大的一部分而已。

在数据库中进行读取页的操作,首先将从磁盘读到的页存放在缓冲池中,下一次再读相同的页时,首先判断该页是否在缓冲池中。若在,称该页在缓冲池中被命中,直接读取该页。否则,读取磁盘中的页。

root@rac3 mysql> show global status like 'Innodb_buffer_pool_%';+---------------------------------------+--------+| Variable_name | Value |+---------------------------------------+--------+| Innodb_buffer_pool_pages_data | 1118 || Innodb_buffer_pool_pages_dirty | 0 || Innodb_buffer_pool_pages_flushed | 1950 || Innodb_buffer_pool_pages_free | 129951 || Innodb_buffer_pool_pages_misc | 3 || Innodb_buffer_pool_pages_total | 131072 || Innodb_buffer_pool_read_ahead_rnd | 0 || Innodb_buffer_pool_read_ahead | 311 || Innodb_buffer_pool_read_ahead_evicted | 0 || Innodb_buffer_pool_read_requests | 202858 || Innodb_buffer_pool_reads | 756 || Innodb_buffer_pool_wait_free | 0 || Innodb_buffer_pool_write_requests | 43825 |+---------------------------------------+--------+13 rows in set (0.00 sec)
登入後複製

从上面的值我们可以看出总共 131072  pages,还有 129951 是 Free 状态的,仅仅只有 1118 个 page 有数据, read 请求 202858 次,其中有 756 次所请求的数据在 buffer  pool 中没有,也就是说有 756 次是通过读取物理磁盘来读取数据的,所以很容易也就得出了 Innodb Buffer  Pool 的 Read 命中率大概在为:(202858 - 756)/ 202858  * 100% 。

Innodb 在修改数据的时候同样也只是修改 buffer pool中的数据,并不是在一个事务提交的时候就将buffer pool中被修改的数据同步到磁盘,而是通过另外一种支持事务的数据库系统常用的手段,将修改信息记录到相应的事务日志中。

我们的应用所修改的buffer pool中的数据都很随机,每次所做的修改都是一个或者少数几个数据页,多次修改的数据页也很少会连续。如果我们每次修改之后都将buffer pool的数据同步到磁盘, 那么磁盘就只能一直忙于频繁的随即读写操作。而事务日志在创建之初就是申请的连续的物理空间,而且每次写入都是紧接着之前的日志数据顺序的往后写入,基本上都是一个顺序的写入过程。所以,日志的写入操作远比同步buffer pool中被修改的数据要更快。

2. redo log_buffer

事务日志本身也有 buffer,也就是redo log_buffer,每次事务日志的写入并不是直接写入到文件,也都是暂时先写入到 redo log_buffer中,然后再在一定的事件触发下才会同步到文

事务日志文件的大小与 Innodb 的整体 IO 性能有非常大的关系。理论上来讲,日志文件越大,则 Buffer  Pool 所需要做的刷新动作也就越少,性能也越高。但是,我们也不能忽略另外一个事情,那就是 当系统 Crash 之后的恢复。

Innodb中记录了每一次对数据库中的数据及索引所做的修改,以及与修改相关的事务信息。同时还记录了系统每次 checkpoint 与 log sequence number(日志序列号)。假设在某一时刻,MySQL Crash了,那么很显然,所有buffer pool中的数据都会丢失,也包括已经修改且没有来得及刷新到数据文件中的数据。难道我们就让这些数据丢失么?当然不会,当MySQL从Crash之后再次启动,Innodb 会通过比较事务日志中所记录的checkpoint信息和各个数据文件中的checkpoint信息,找到最后一次checkpoint所对应的log sequence number,然后通过事务日志中所记录的变更记录,将从 Crash 之前最后一次checkpoint往后的所有变更重新应用一次,同步所有的数据文件到一致状态,这样就找回了因为系统 Crash 而造成的所有数据丢失。当然,对于 log  buffer中未来得及同步到日志文件的变更数据就无法再找回了。系统 Crash 的时间离最后一次 checkpoint 的时间越长,所需要的恢复时间也就越长。而日志文件越大,Innodb 所做的 checkpoint 频率也越低,自然遇到长时间恢复的可能性也就越大了。

2.1 checkpoint

在InnoDB存储引擎中,可能发生如下几种情况的Fuzzy Checkpoint:

(1)Master Thread Checkpoint

对于Master Thread中发生的checkpoint,差不多以每秒或每十秒的速度从缓冲池的脏页列表中刷新一定比例的页回磁盘。这个过程是异步的,即此时InnoDB存储引擎可以进行其他的操作,用户查询线程不会阻塞。

(2)FLUSH_LRU_LIST Checkpoint

InnoDB存储引擎需要保证LRU列表中需要有差不多100个空闲页可供使用。若没有100个空闲页,那么InnoDB存储引擎会将LRU列表尾端的页移除。如果这些页中有脏页,那么需要进行checkpoint。这些页是来自LRU列表的,因此称为FLUSH_LRU_LIST Checkpoint。

(3)Async/Sync Flush Checkpoint

Async/Sync Flush Checkpoint是为了保证redo log的循环使用可用性。

(4)Dirty Page too much Checkpoint

脏页的数量太多,导致InnoDB存储引擎强制进行Checkpoint。可由参数innodb_max_dirty_pages_pct控制。 

root@rac3 mysql> show variables like 'innodb_max_dirty_pages_pct'/G*************************** 1. row ***************************Variable_name: innodb_max_dirty_pages_pctValue: 851 row in set (0.00 sec)
登入後複製

innodb_max_dirty_pages_pct的值为85,表示当缓冲池中脏页的数量占据85%时,强制进行checkpoint,刷新一部分的脏页到磁盘。

2.2 innodb_flush_log_at_trx_commit

参数innodb_flush_log_at_trx_commit用来控制事务日志刷新到磁盘的策略。

默认innodb_flush_log_at_trx_commit=1,表示在每次事务提交的时候,都把log buffer刷到文件系统中去,并且调用文件系统的“flush”操作将缓存刷新到磁盘上去。这样的话,数据库对IO的要求就非常高了,如果底层的硬件提供的IOPS比较差,那么MySQL数据库的并发很快就会由于硬件IO的问题而无法提升。为了提高效率,保证并发,牺牲一定的数据一致性。innodb_flush_log_at_trx_commit还可以设置为0和2。

innodb_flush_log_at_trx_commit=0时,提交事务时并不将log buffer写入磁盘,而是等待主线程每秒的刷新。

innodb_flush_log_at_trx_commit=2时,事务提交时将事务日志写入redo log file,但仅写入文件系统的缓存,不进行fsync操作。在这个设置下,当MySQL数据库发生宕机而操作系统不发生宕机,并不会导致事务的丢失。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

拼多多買過的東西在哪裡查看記錄 查看買過的商品記錄的方法 拼多多買過的東西在哪裡查看記錄 查看買過的商品記錄的方法 Mar 12, 2024 pm 07:20 PM

拼多多軟體內提供的商品好物非常多,隨時隨地想買就買,而且每一件商品品質都是嚴格把關的,件件商品都是正品,不同還有非常多優惠的購物折扣,讓大家網購根本停不下來。輸入手機號碼在線登錄,在線添加多個收貨地址和聯繫方式,可以隨時查看最新的物流動態,不同品類的商品板塊都是開放的,搜索上下滑動選購下單,足不出戶輕鬆體驗便捷的網購服務,還能查看所有的購買記錄,包括自己買過的商品,數十個購物紅包、優惠券免費領取使用,現在小編在線詳細為拼多多用戶們帶來查看買過的商品記錄的方法。  1.打開手機,點選拼多多圖標,

你是否真正掌握了座標系轉換?自動駕駛離不開的多感測器問題 你是否真正掌握了座標系轉換?自動駕駛離不開的多感測器問題 Oct 12, 2023 am 11:21 AM

一先導與重點文章主要介紹自動駕駛技術中幾種常用的座標系統,以及他們之間如何完成關聯與轉換,最終建構出統一的環境模型。這裡重點理解自車到相機剛體轉換(外參),相機到影像轉換(內參),影像到像素有單位轉換。 3d向2d轉換會有對應的畸變,平移等。重點:自車座標系相機機體座標系需要被重寫的是:平面座標系像素座標系難點:要考慮影像畸變,去畸變和加畸變都是在像平面上去補償二簡介視覺系統一共有四個座標系:像素平面座標系(u,v)、影像座標系(x,y)、相機座標系()與世界座標系()。每種座標系之間均有聯繫,

Stable Diffusion 3論文終於發布,架構細節大揭秘,對復現Sora有幫助? Stable Diffusion 3論文終於發布,架構細節大揭秘,對復現Sora有幫助? Mar 06, 2024 pm 05:34 PM

StableDiffusion3的论文终于来了!这个模型于两周前发布,采用了与Sora相同的DiT(DiffusionTransformer)架构,一经发布就引起了不小的轰动。与之前版本相比,StableDiffusion3生成的图质量有了显著提升,现在支持多主题提示,并且文字书写效果也得到了改善,不再出现乱码情况。StabilityAI指出,StableDiffusion3是一个系列模型,其参数量从800M到8B不等。这一参数范围意味着该模型可以在许多便携设备上直接运行,从而显著降低了使用AI

自動駕駛與軌跡預測看這篇就夠了! 自動駕駛與軌跡預測看這篇就夠了! Feb 28, 2024 pm 07:20 PM

軌跡預測在自動駕駛中承擔著重要的角色,自動駕駛軌跡預測是指透過分析車輛行駛過程中的各種數據,預測車輛未來的行駛軌跡。作為自動駕駛的核心模組,軌跡預測的品質對於下游的規劃控制至關重要。軌跡預測任務技術堆疊豐富,需熟悉自動駕駛動/靜態感知、高精地圖、車道線、神經網路架構(CNN&GNN&Transformer)技能等,入門難度很高!許多粉絲期望能夠盡快上手軌跡預測,少踩坑,今天就為大家盤點下軌跡預測常見的一些問題和入門學習方法!入門相關知識1.預習的論文有沒有切入順序? A:先看survey,p

DualBEV:大幅超越BEVFormer、BEVDet4D,開卷! DualBEV:大幅超越BEVFormer、BEVDet4D,開卷! Mar 21, 2024 pm 05:21 PM

這篇論文探討了在自動駕駛中,從不同視角(如透視圖和鳥瞰圖)準確檢測物體的問題,特別是如何有效地從透視圖(PV)到鳥瞰圖(BEV)空間轉換特徵,這一轉換是透過視覺轉換(VT)模組實施的。現有的方法大致分為兩種策略:2D到3D和3D到2D轉換。 2D到3D的方法透過預測深度機率來提升密集的2D特徵,但深度預測的固有不確定性,尤其是在遠處區域,可能會引入不準確性。而3D到2D的方法通常使用3D查詢來採樣2D特徵,並透過Transformer學習3D和2D特徵之間對應關係的注意力權重,這增加了計算和部署的

首個多視角自動駕駛場景影片產生世界模型 | DrivingDiffusion: BEV資料與模擬新思路 首個多視角自動駕駛場景影片產生世界模型 | DrivingDiffusion: BEV資料與模擬新思路 Oct 23, 2023 am 11:13 AM

作者的一些個人思考在自動駕駛領域,隨著BEV-based子任務/端到端方案的發展,高品質的多視圖訓練資料和相應的模擬場景建立愈發重要。針對當下任務的痛點,「高品質」可以解耦成三個面向:不同維度上的長尾場景:如障礙物資料中近距離的車輛以及切車過程中精準的朝向角,以及車道線資料中不同曲率的彎道或較難收集的匝道/匯入/合流等場景。這些往往靠大量的資料收集和複雜的資料探勘策略,成本高昂。 3D真值-影像的高度一致:當下的BEV資料取得往往受到感測器安裝/標定,高精地圖以及重建演算法本身的誤差影響。這導致了我

GSLAM | 一個通用的SLAM架構和基準 GSLAM | 一個通用的SLAM架構和基準 Oct 20, 2023 am 11:37 AM

突然發現了一篇19年的論文GSLAM:AGeneralSLAMFrameworkandBenchmark開源程式碼:https://github.com/zdzhaoyong/GSLAM直接上全文,感受這項工作的品質吧~1摘要SLAM技術最近取得了許多成功,並吸引了高科技公司的關注。然而,如何同一現有或新興演算法的介面,一級有效地進行關於速度、穩健性和可移植性的基準測試仍然是問題。本文,提出了一個名為GSLAM的新型SLAM平台,它不僅提供評估功能,還為研究人員提供了快速開發自己的SLAM系統的有用

如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 如何在iPhone上的健康應用程式中查看您的用藥日誌記錄 Nov 29, 2023 pm 08:46 PM

iPhone可讓您在「健康」App中添加藥物,以便追蹤和管理您每天服用的藥物、維生素和補充劑。然後,您可以在設備上收到通知時記錄已服用或跳過的藥物。記錄用藥後,您可以查看您服用或跳過用藥的頻率,以幫助您追蹤自己的健康狀況。在這篇文章中,我們將指導您在iPhone上的健康應用程式中查看所選藥物的日誌歷史記錄。如何在「健康」App中查看用藥日誌歷史記錄簡短指南:前往「健康」App>瀏覽「>用藥」>用藥「>選擇一種用藥>」選項「&a

See all articles