<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>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                **背景** 隨著存儲設備越來越快,InnoDB許多原有的設計不再適合新的高速硬件,因此MariaDB 10.1 Alpha版本針對FusionIO PCI-E SSD做出了專門的優化,充分利用了Fio的硬件特性。 MDEV-6246這個需求改造了MariaDB,以利用fio的Atomic writes和文件系統壓縮特性。 ~~~ revno: 3988 [merge] committer: Jan Lindstr?m <jplindst@mariadb.org> branch nick: 10.1 timestamp: Thu 2014-05-22 14:24:00 +0300 message: MDEV-6246: Merge 10.0.10-FusionIO to 10.1. ~~~ 為何Fio會更快呢,因為傳統的存儲設備讀取,是左圖的方式,要經過RAID控制器,來回的路徑就長了。而Fio才有右圖的方式,設備通過PCI槽直接與CPU交互,大大縮短了路徑。 ![fusionio.png](https://box.kancloud.cn/2015-09-24_56038f33d4527.png) **Atomic writes** InnoDB一直存在一個叫做Double Write Buffer的東西,目的就是為了防止頁面寫到一半系統崩潰,導致頁面損壞,因為InnoDB的Page是16K,而一般的機械硬盤扇區是512字節,SSD大都是4K的塊大小,都不能保證16K的寫入是完整的。 而Fio的NVMFS文件系統則提供了原子寫的保證,只要對文件句柄增加DFS_IOCTL_ATOMIC_WRITE_SET的ioctl標記位,就可以啟用這個文件的原子寫支持。 ~~~ ioctl(file, DFS_IOCTL_ATOMIC_WRITE_SET, &atomic_option) ~~~ MariaDB新增了一個參數來啟用這個特性,一旦開啟,所有文件會用DFS_IOCTL_ATOMIC_WRITE_SET標記打開。 ~~~ innodb_use_atomic_writes = 1 ~~~ 這樣一來Double Write Buffer就沒有存在的價值了,因為不會出現部分寫,每個write下去都可以保證所寫內容全部完成,這可以相當程度上提升InnoDB的性能。 **Page compression** InnoDB標準的頁面大小是16K,InnoDB也提供1K、2K、4K、8K的壓縮頁面大小,通過KEY_BLOCK_SIZE來設置壓縮大小,使用zlib標準庫來進行壓縮。 但是Page是頻繁被更新的,如果每次修改都重新壓縮頁面,代價很高,InnoDB就采用了modification log來暫存部分修改信息,而避免了頻繁解壓縮,待modification log存滿時,再重新對整個Page做一次重構壓縮。 但是Compressed Page載入InnoDB Buffer Pool時,InnoDB只能處理未壓縮的頁面,因此還要在內存中存一份解壓頁面,回寫到磁盤時再次壓縮。 總而言之,InnoDB的Compressed Page有這些缺點: ~~~ 內存開銷 空間: 壓縮和解壓縮頁面都要存在InnoDB Buffer Pool 訪問: 修改需要同時寫入到壓縮頁面和未壓縮頁面 CPU開銷 軟件壓縮庫zlib (從磁盤讀取時需要解壓縮放入內存, 頁面分裂時需要重新壓縮) Split & Recompress & Rebalance when mlog overflows 空間收益 固定的頁面壓縮大小 – 給壓縮的效果設置了一個固定的邊界 Modification log和Page預留空間弱化了壓縮帶來的空間縮減 糟糕的實現 代碼過于復雜而導致壓縮和未壓縮的表性能差距非常明顯 ~~~ MariaDB與FusionIO合作利用NVMFS文件系統的特性,修改InnoDB的Page結構來支持文件系統級的壓縮。 Page compression要求InnoDB做了如下配置: ~~~ innodb_file_per_table = 1 innodb_file_format = Barracuda. ~~~ 它的實現方法是,只在Page即將寫入到文件系統時,才進行壓縮,因此最終只有壓縮后的容量被寫入到磁盤,如果壓縮失敗,那么就把沒有壓縮的容量寫入磁盤。另外還會對Page內的512字節的倍數的未使用空間清理掉,不占用實際存儲: ~~~ fallocate(file, FALLOC_FL_PUNCH_HOLE | FALLOC_FL_KEEP_SIZE, off, trim_len); ~~~ 當頁面被讀取時,會在放入Buffer Pool之前進行解壓縮,將原始頁面載入內存。因此需要在文件頭中加入一個新的Page type:FIL_PAGE_PAGE_COMPRESSED?![page.jpeg](https://box.kancloud.cn/2015-09-24_56038f400271b.jpeg) 綜合起來可以這樣定義一張表: ~~~ CREATE TABLE t3 (a int KEY, b int) DATA DIRECTORY=’/dev/fioa’ PAGE_COMPRESSED=1 PAGE_COMPRESSION_LEVEL=4 ATOMIC_WRITES=’ON’; ~~~ 意思是將t3表存到/dev/fioa盤,開啟Page compression,采用4級壓縮,開啟原子寫。 經過測試,可以看出,LZ4的壓縮比例最好,而且,對性能影響非常小。 ![storage.png](https://box.kancloud.cn/2015-09-24_56038f43684eb.png) ![tpcc.png](https://box.kancloud.cn/2015-09-24_56038f45d0da4.png)
                  <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>

                              哎呀哎呀视频在线观看