99偷拍视频精品区一区二,口述久久久久久久久久久久,国产精品夫妇激情啪发布,成人永久免费网站在线观看,国产精品高清免费在线,青青草在线观看视频观看,久久久久久国产一区,天天婷婷久久18禁,日韩动漫av在线播放直播

Mysql中怎么實現在線回收undo表空間-創新互聯

這期內容當中小編將會給大家帶來有關Mysql中怎么實現在線回收undo表空間,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

我們提供的服務有:網站建設、成都網站建設、微信公眾號開發、網站優化、網站認證、新賓ssl等。為成百上千家企事業單位解決了網站和推廣的問題。提供周到的售前咨詢和貼心的售后服務,是有科學管理、有技術的新賓網站制作公司

1 Mysql5.6

1.1 相關參數

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

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

默認參數:

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

實例初始化是修改innodb_undo_tablespaces:

mysql_install_db ...... --innodb_undo_tablespaces

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

1.2 使用

初始化實例之前,我們只需要設置innodb_undo_tablespaces參數(建議大于等于3)即可將undo log設置到單獨的undo表空間中。如果需要將undo log放到更快的設備上時,可以設置innodb_undo_directory參數,但是一般我們不這么做,因為現在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 相關參數

必要條件:

  • innodb_undo_tablespaces:最少有兩個,這樣一個在清理的時候可以使用另一個,該參數實例初始化之后不可改動

  • innodb_rollback_segments:回滾段的個數,總會有一個回滾段分配給系統表空間,32個保留給臨時表空間。所以如果想使用undo表空間的話,這個值要至少為33。例如使用兩個undo表空間,這個值就配35。如果設置多個undo表空間,系統表空間中的回滾段會變成非活躍狀態。

啟動參數:

  • innodb_undo_log_truncate=on

  • innodb_max_undo_log_size:超過這個值的表空間會標記為truncate,動態參數默認是1G

  • innodb_purge_rseg_truncate_frequency:指定purge操作被喚起多少次之后才釋放rollback segments。當undo表空間里面的rollback segments被釋放時,undo表空間才會被truncate。由此可見,該參數越小,undo表空間被嘗試truncate的頻率越高。

2.2 清理過程

  1. undo表空間大小超過innodb_max_undo_log_size后,標記該表空間需要清理。標記會循環進行,避免一個表空間被反復清理。

  2. 標記表空間內的回滾段變為非活躍狀態,正在運行的事務等待執行完。

  3. 開始purge

  4. 釋放undo表空間中的所有回滾段后,運行truncate并將undo表空間截斷為其初始大小,初始大小由innodb_page_size決定,默認16KB的大小對應表空間為10MB

  5. 重新激活回滾段,以便將它們分配給新事務

2.3 性能建議

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

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

上述就是小編為大家分享的Mysql中怎么實現在線回收undo表空間了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯成都網站設計公司行業資訊頻道。

另外有需要云服務器可以了解下創新互聯scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業上云的綜合解決方案,具有“安全穩定、簡單易用、服務可用性高、性價比高”等特點與優勢,專為企業上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

文章名稱:Mysql中怎么實現在線回收undo表空間-創新互聯
文章路徑:http://www.yijiale78.com/article42/disehc.html

成都網站建設公司_創新互聯,為您提供建站公司品牌網站制作小程序開發定制開發ChatGPT網站內鏈

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

h5響應式網站建設