欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Mysql在線回收undo表空間實戰(zhàn)記錄

 更新時間:2019年09月10日 10:03:00   作者:Jackgo  
這篇文章主要給大家介紹了關于Mysql在線回收undo表空間的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用Mysql具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧

1 Mysql5.6

1.1 相關參數(shù)

MySQL 5.6增加了參數(shù)innodb_undo_directory、innodb_undo_logs和innodb_undo_tablespaces這3個參數(shù),可以把undo log從ibdata1移出來單獨存放。

  • innodb_undo_directory:指定單獨存放undo表空間的目錄,默認為.(即datadir),可以設置相對路徑或者絕對路徑。該參數(shù)實例初始化之后雖然不可直接改動,但是可以通過先停庫,修改配置文件,然后移動undo表空間文件的方式去修改該參數(shù)。

默認參數(shù):

mysql> show variables like '%undo%';
+-------------------------+-------+
| Variable_name      | Value |
+-------------------------+-------+
| innodb_undo_directory  | .   |
| innodb_undo_logs    | 128  |
| innodb_undo_tablespaces | 0   |
+-------------------------+-------+
  • innodb_undo_tablespaces:指定單獨存放的undo表空間個數(shù),例如如果設置為3,則undo表空間為undo001、undo002、undo003,每個文件初始大小默認為10M。該參數(shù)我們推薦設置為大于等于3,原因下文將解釋。該參數(shù)實例初始化之后不可改動

實例初始化是修改innodb_undo_tablespaces:

mysql_install_db ...... --innodb_undo_tablespaces

$ ls
...
undo001 undo002 undo003
  • innodb_rollback_segments:默認128個。每個回滾段可同時支持1024個在線事務。這些回滾段會平均分布到各個undo表空間中。該變量可以動態(tài)調整,但是物理上的回滾段不會減少,只是會控制用到的回滾段的個數(shù)。

1.2 使用

初始化實例之前,我們只需要設置innodb_undo_tablespaces參數(shù)(建議大于等于3)即可將undo log設置到單獨的undo表空間中。如果需要將undo log放到更快的設備上時,可以設置innodb_undo_directory參數(shù),但是一般我們不這么做,因為現(xiàn)在SSD非常普及。innodb_undo_logs可以默認為128不變。

undo log可以存儲于ibdata之外。但這個特性依然雞肋:

  • 首先你必須在install實例的時候就指定好獨立Undo tablespace, 在install完成后不可更改。
  • Undo tablepsace的space id必須從1開始,無法增加或者刪除undo tablespace。

1.3 大事務測試

mysql> create table test.tbl( id int primary key auto_increment, name varchar(200));
Query OK, 0 rows affected (0.03 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test.tbl(name) values(repeat('1',00));
Query OK, 1 row affected (0.00 sec)

mysql> insert into test.tbl(name) select name from test.tbl;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0

...

mysql> insert into test.tbl(name) select name from test.tbl;
Query OK, 2097152 rows affected (24.84 sec)
Records: 2097152 Duplicates: 0 Warnings: 0

mysql> commit;
Query OK, 0 rows affected (7.90 sec)

觀察undolog已經開始膨脹了!事務commit后空間也沒有回收。

$ du -sh undo*
10M  undo001
69M  undo002
10M  undo003

2 Mysql5.7

5.7引入了在線truncate undo tablespace

2.1 相關參數(shù)

必要條件:

  • innodb_undo_tablespaces:最少有兩個,這樣一個在清理的時候可以使用另一個,該參數(shù)實例初始化之后不可改動
  • innodb_rollback_segments:回滾段的個數(shù),總會有一個回滾段分配給系統(tǒng)表空間,32個保留給臨時表空間。所以如果想使用undo表空間的話,這個值要至少為33。例如使用兩個undo表空間,這個值就配35。如果設置多個undo表空間,系統(tǒng)表空間中的回滾段會變成非活躍狀態(tài)。

啟動參數(shù):

  • innodb_undo_log_truncate=on
  • innodb_max_undo_log_size:超過這個值的表空間會標記為truncate,動態(tài)參數(shù)默認是1G
  • innodb_purge_rseg_truncate_frequency:指定purge操作被喚起多少次之后才釋放rollback segments。當undo表空間里面的rollback segments被釋放時,undo表空間才會被truncate。由此可見,該參數(shù)越小,undo表空間被嘗試truncate的頻率越高。

2.2 清理過程

  1. undo表空間大小超過innodb_max_undo_log_size后,標記該表空間需要清理。標記會循環(huán)進行,避免一個表空間被反復清理。
  2. 標記表空間內的回滾段變?yōu)榉腔钴S狀態(tài),正在運行的事務等待執(zhí)行完。
  3. 開始purge
  4. 釋放undo表空間中的所有回滾段后,運行truncate并將undo表空間截斷為其初始大小,初始大小由innodb_page_size決定,默認16KB的大小對應表空間為10MB
  5. 重新激活回滾段,以便將它們分配給新事務

2.3 性能建議

truncate表空間時避免影響性能的最簡單方法是增加撤消表空間的數(shù)量

2.4 大事務測試

配置8個undo表空間,innodb_purge_rseg_truncate_frequency=10

mysqld --initialize ... --innodb_undo_tablespaces=8

開始測試

mysql> show global variables like '%undo%';
+--------------------------+------------+
| Variable_name      | Value   |
+--------------------------+------------+
| innodb_max_undo_log_size | 1073741824 |
| innodb_undo_directory  | ./     |
| innodb_undo_log_truncate | ON     |
| innodb_undo_logs     | 128    |
| innodb_undo_tablespaces | 8     |
+--------------------------+------------+

mysql> select @@innodb_purge_rseg_truncate_frequency;
+----------------------------------------+
| @@innodb_purge_rseg_truncate_frequency |
+----------------------------------------+
|                   10 |
+----------------------------------------+

select @@innodb_max_undo_log_size;
+----------------------------+
| @@innodb_max_undo_log_size |
+----------------------------+
|          10485760 |
+----------------------------+

mysql> create table test.tbl( id int primary key auto_increment, name varchar(200));
Query OK, 0 rows affected (0.03 sec)

mysql> start transaction;
Query OK, 0 rows affected (0.00 sec)

mysql> insert into test.tbl(name) values(repeat('1',00));
Query OK, 1 row affected (0.00 sec)

mysql> insert into test.tbl(name) select name from test.tbl;
Query OK, 1 row affected (0.00 sec)
Records: 1 Duplicates: 0 Warnings: 0

...

mysql> insert into test.tbl(name) select name from test.tbl;
Query OK, 2097152 rows affected (24.84 sec)
Records: 2097152 Duplicates: 0 Warnings: 0

mysql> commit;
Query OK, 0 rows affected (7.90 sec)

undo表空間情況,膨脹到100MB+后成功回收

$ du -sh undo*
10M    undo001
10M    undo002
10M    undo003
10M    undo004
10M    undo005
10M    undo006
125M   undo007
10M    undo008

$ du -sh undo*
10M    undo001
10M    undo002
10M    undo003
10M    undo004
10M    undo005
10M    undo006
10M    undo007
10M    undo008

3 Reference

https://dev.mysql.com/doc/ref...

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對腳本之家的支持。

相關文章

  • 詳解MySQL中SlowLog的配置方法(圖文)

    詳解MySQL中SlowLog的配置方法(圖文)

    mysql 日志系統(tǒng)上線有段時間了,前端在慢慢切站點過來寫入,未雨綢繆 diy了套 mysql 監(jiān)控工具
    2014-02-02
  • CentOS 7 下使用yum安裝MySQL5.7.20 最簡單方法

    CentOS 7 下使用yum安裝MySQL5.7.20 最簡單方法

    這篇文章主要介紹了CentOS 7 下使用yum安裝MySQL5.7.20 最簡單 方法,需要的朋友可以參考下
    2018-11-11
  • 解決MySQL數(shù)據(jù)庫鏈接超時報1129錯誤問題

    解決MySQL數(shù)據(jù)庫鏈接超時報1129錯誤問題

    MySQL?為了數(shù)據(jù)庫的安全性默認在鏈接中斷或者錯誤時記錄錯誤鏈接的ip?等信息(host_cache),有點像系統(tǒng)的錯誤日志的一種機制,這篇文章主要介紹了MySQL數(shù)據(jù)庫鏈接超時報1129錯誤解決辦法,需要的朋友可以參考下
    2022-10-10
  • MySQL判斷列的值既不為NULL又不為空字符串的問題

    MySQL判斷列的值既不為NULL又不為空字符串的問題

    這篇文章主要介紹了MySQL判斷列的值既不為NULL又不為空字符串的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • MYSQL更新優(yōu)化實錄

    MYSQL更新優(yōu)化實錄

    本文給大家分享的是個人在對mysql數(shù)據(jù)進行刷新的時候遇到的一個效率非常低下的問題的解決全過程,主要是針對sql語句來進行優(yōu)化,有查找問題的方法,有解決方法,非常的詳細,小伙伴可以參考下。
    2015-08-08
  • MySql安裝啟動兩種方法教程詳解

    MySql安裝啟動兩種方法教程詳解

    本文通過兩種方法給大家介紹mysql安裝啟動的方法,非常不錯,具有參考價值,有需要的朋友一起學習吧
    2016-05-05
  • Mysql主鍵和唯一鍵的區(qū)別點總結

    Mysql主鍵和唯一鍵的區(qū)別點總結

    在本篇文章中小編給大家分享了關于Mysql主鍵和唯一鍵的區(qū)別,有興趣的朋友們學習下吧。
    2019-02-02
  • Mysql非安裝版使用步驟及忘記密碼解決方法

    Mysql非安裝版使用步驟及忘記密碼解決方法

    這篇文章主要介紹了Mysql非安裝版使用步驟及忘記密碼的解決方法,需要的朋友可以參考下
    2017-04-04
  • MySQL數(shù)據(jù)庫優(yōu)化之分表分庫操作實例詳解

    MySQL數(shù)據(jù)庫優(yōu)化之分表分庫操作實例詳解

    這篇文章主要介紹了MySQL數(shù)據(jù)庫優(yōu)化之分表分庫操作,結合實例形式詳細分析了mysql數(shù)據(jù)庫分表分庫垂直拆分、水平拆分相關原理以及應用案例,需要的朋友可以參考下
    2020-01-01
  • Linux服務器中MySQL遠程連接的開啟方法

    Linux服務器中MySQL遠程連接的開啟方法

    今天在Linux服務器上安裝了msyql數(shù)據(jù)庫,在本地訪問的時候可以訪問,但是我想通過遠程的方式訪問的時候就不能訪問了,查詢資料后發(fā)現(xiàn),Linux下MySQL默認安裝完成后只有本地訪問的權限,沒有遠程訪問的權限,需要你給指定用戶設置訪問權限才能遠程訪問該數(shù)據(jù)庫
    2017-06-06

最新評論