回覆列表
  • 1 # stone81464955

    會,因為binlog只是依次記錄事件,而且binlog是帶快取的按配置重新整理,持久化的檔案資料並非實時的。由於要提供原子性的特性mysql是藉助undolog來共同實現的。undolog中會有標識指向binlog中的原始資料好像事務回滾還原資料。同時undolog還配合少量鎖還提供了多版本的隔離特性。同時還有redolog來協助提供一致性的保證以免異常發生資料和binlog不一致。三個log因為是磁碟順序寫效率比隨機操作資料檔案要高很多,除了binlog都是不帶緩衝的,共同實現了持久化。所以,mysql這幾類檔案是相互緊密配合的,不會只考binlog就實現高可靠和高效能。針對這個具體問題就一點binlog因為效能原因是需要帶緩衝的就可以理解不是一定沒有髒資料或者一定是完整的

  • 2 # 愛可生雲資料庫

    之前有做過一個 binlog 壓縮能節約多少空間的測試,效果上看還是比較理想的,可以節約一半以上的空間。但是這個又引出了一個新的問題,那就是這個功能對效能有多大影響呢?於是我又在測試環境試了一下,測試環境的物理配置如下。

    根據之前的經驗這套測試環境在 120 個表 + 240 個併發的情況,可以取得一個性能上的極大值;所以在這裡就直接使用這個作為測試壓力。

    8.0.19 場景

    第一步:安裝。

    dbma-cli-single-instance --port=3306 --max-mem=131072 \--pkg=mysql-8.0.19-linux-glibc2.12-x86_64.tar.xz install

    第二步:建立測試使用者。

    create user sysbench@"%" identified by "sysbench";create database tempdb;grant all on tempdb.* to sysbench@"%";

    第三步:填充資料並進行壓力測試。

    sysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select preparesysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select run

    效能表現。

    資源消耗情況。

    8.0.20 + binlog 壓縮

    第一步:安裝。

    dbma-cli-single-instance --port=3306 --max-mem=131072 \--pkg=mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz install

    第二步:建立測試使用者。

    create user sysbench@"%" identified by "sysbench";create database tempdb;grant all on tempdb.* to sysbench@"%";-- dbm-agent 預設會開啟 binlog 壓縮show global variables like "binlog_transaction_compression%";+-------------------------------------------+-------+| Variable_name | Value |+-------------------------------------------+-------+| binlog_transaction_compression | ON || binlog_transaction_compression_level_zstd | 3 |+-------------------------------------------+-------+2 rows in set (0.00 sec)

    第三步:填充資料並進行壓力測試。

    sysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select preparesysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select run

    效能表現。

    資源消耗情況。

    8.0.20 + binlog 不壓縮

    第一步: 關閉 binlog 壓縮功能。

    set @@global.binlog_transaction_compression="OFF";show global variables like "binlog_transaction_compression%";+-------------------------------------------+-------+| Variable_name | Value |+-------------------------------------------+-------+| binlog_transaction_compression | OFF || binlog_transaction_compression_level_zstd | 3 |+-------------------------------------------+-------+2 rows in set (0.01 sec)

    第二步:進行壓力測試。

    sysbench --mysql-host=192.168.100.10 --mysql-port=3306 --mysql-user=sysbench \--mysql-password=sysbench --tables=120 --table_size=100000 --mysql-db=tempdb \--time=3600 --threads=240 oltp_point_select run

    效能表現。

    資源消耗情況。

    結論

    開啟 binlog 壓縮會對效能有影響,大概會讓效能下降 1%,cpu 多消耗 1%。

  • 中秋節和大豐收的關聯?
  • 跟貓接觸兩天就發燒了怎麼辦?