<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 體系結構 InnoDB的體系結構: :-: ![](https://img.kancloud.cn/45/3f/453f9e9c71c3e45ef04d5d1cd339c20d_656x387.png) 后臺線程可以分為: * Master Thread:負責將緩沖池的數據異步刷新到磁盤,保證數據一致性。 * IO Thread:使用AIO來處理IO請求,一般情況下有4個讀線程和4個寫線程。 :-: ![](https://img.kancloud.cn/75/06/75068392f8d7e92691a5f9ee7c2f25ed_530x137.png) * Purge Thread:回收已經使用并分配的undo頁。 * page Cleaner Thread:刷新之前版本中的臟頁數據。 **緩沖區** InnoDB的內存結構可以分為如下幾個部分: * 緩沖池:多存放表和索引數據。 * 更改緩沖區:保存insert、delete、update等更改操作的緩沖區。 * 自適應哈希索引:存放在程序運行中生成的自適應哈希索引結構。 * 日志緩沖區:日志緩沖區的內容會定期刷新到磁盤。 InnoDB存儲引擎內存池的緩沖區可以起到和cache類似的作用。查看當前系統InnoDB緩沖區的大小: :-: ![](https://img.kancloud.cn/95/e8/95e81d453093d7f6e3c7a54790910349_523x96.png) 默認為128M 緩沖池中緩存的數據頁類型有:索引頁、數據頁、undo頁、插入緩沖(insert buffer)、自適應哈希索引(adaptive hash index)、InnoDB存儲的鎖信息(lock info)、數據字典信息(data dictionary)。其內部結構如下: :-: ![](https://img.kancloud.cn/e9/f1/e9f19c87e95913150e7a4db175888ede_647x264.png) 查看緩沖池的數量(會將每個頁根據哈希值平均分配到不同的緩沖池實例中) :-: ![](https://img.kancloud.cn/64/2a/642a060cc14efba0abcd665c497e23c4_568x100.png) &nbsp; **如何管理內存** InnoDB使用LRU算法來進行內存緩存頁的管理。在InnoDB存儲引擎中,緩沖池頁的大小默認為16KB,與普通的LRU算法不同的是,LRU列表還加入Midpoint位置。對于讀取到新的頁,不再是直接放到最前面的位置,而是放在midpoint的位置,這個位置在LRU列表長度的5/8處。InnoDB將midpoint之前的列表稱為new(活躍的)列表,將midpoint之后的列表稱為old列表。 :-: ![](https://img.kancloud.cn/1b/d9/1bd9c72fd50792276ee00481dafb8ccf_524x97.png) \[old列表占尾端37%\] LRU列表用來管理已經從磁盤讀取到的頁,但是數據庫剛啟動的時候,LRU列表是空的,沒有任何的頁。這時頁都存放在Free列表中。 同時innodb可能會對每個頁的內容進行壓縮,對于非16KB大小的頁,是通過unzip\_LRU列表進行管理的;每個頁可能被壓縮成2KB、4KB、8KB大小。unzip\_LRU是對不同的尺寸的頁進行管理的,同時利用**伙伴系統**進行內存大小的分配。例如當需要對內存申請4KB大小的頁時,會進行如下操作: * 查看4KB列表是否有足夠的空間,有直接分配。 * 否則查看8KB列表是否有足夠的空間,有將8KB大小的空閑頁劃分為2個4KB大小的頁,放入4KB大小的unzip\_LRU列表中。 * 如果8KB大小列表沒有足夠空間,則從16KB中的LRU申請空閑頁,劃分成一個8KB和2個4KB的頁放入對應的unzip\_LRU列表中 臟頁:在LRU列表中的頁被修改之后,該頁就會被稱為臟頁,這個時候緩沖池中的頁和磁盤中的頁數據不一致。數據庫會通過checkpoint機制將臟頁刷回到磁盤中,而Flush列表頁即為臟頁列表。`臟頁會同時保留在LRU列表和Flush列表。`因此Flush列表用來負責將臟頁刷回到磁盤中。 使用`show engine innodb status\G;`可以查看各個列表中的大小 :-: ![](https://img.kancloud.cn/70/7d/707dc1aa2b19ad1dab244076d80e7c94_583x174.png) &nbsp; **redo log緩沖** InnoDB會將重做日志信息放到redo log buffer中,并且按照一定的頻率刷入磁盤中,刷入磁盤的時機為: 1. Master Thread每秒將redo log buffer刷新到redo log file中。 2. 每個事務提交時會將redo log buffer刷新到redo log file中。 3. 當redo log buffer緩沖區小于1/2的時候,會將redo log buffer刷新到redo log file中。 查看redo log buffer大小 ~~~ ?show variables like 'innodb_log_buffer_size'\G; ~~~ &nbsp; ## checkpoint checkpoint(檢查點)技術是為了解決如下幾個問題: 1. 縮短數據庫進行重做日志時的恢復時間。 2. 緩沖池不夠用時,將臟頁刷新到磁盤,一次刷新多少? 3. 重做日志不可用時,刷新臟頁。 checkpoint技術要做的事情就是將緩沖池中的臟頁刷回到磁盤,每次刷新多少頁,每次從哪里取臟頁(LRU列表、Flush列表),以及什么時間觸發Checkpoint。 觸發Checkpoint的時間點: 1、 Sharp Checkpoint:數據庫關閉的時候將所有臟頁刷新到磁盤中。 2、Fuzzy Checkpoint:一次刷新一部分的臟頁,而不是將所有的臟頁進行刷新。 * Master Thread Checkpoint:Master Thread線程每秒或者每十秒異步的刷新一定比例的臟頁回盤。 * FLUSH\_LRU\_LIST Checkpoint: 當LRU中的可用頁不夠的時候,需要將LRU列表中尾端的一些臟頁刷新回磁盤。在新的版本中使用Page Cleaner線程來檢查LRU列表是否有足夠的可用頁。 * Async/Sync Flush Checkpoint:重做日志不可用的時候刷新。 * Dirty Page too much Checkpoint:當臟頁數量超過一定比例的時候Innodb引擎就會強制進行Checkpoint,保證緩沖池中有足夠的可用頁。這個比例可以通過`show variables like 'innodb_max_dirty_pages_pct'\G`查看。 :-: ![](https://img.kancloud.cn/a3/9f/a39f259ab7cbd0ec5b3f7160a6cf9655_573x99.png) 【超過90%時候進行刷新】
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看