久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

怎么使用MySQL5.6中Innodb獨立的undo tablespace

141次閱讀
沒有評論

共計 2128 個字符,預計需要花費 6 分鐘才能閱讀完成。

這篇文章主要講解了“怎么使用 MySQL5.6 中 Innodb 獨立的 undo tablespace”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“怎么使用 MySQL5.6 中 Innodb 獨立的 undo tablespace”吧!

1. 使用

有幾個參數來控制該行為

# innodb_undo_tablespaces

用于設定創建的 undo 表空間的個數,在 Install db 時初始化后,就再也不能被改動了;

默認值為 0,表示不獨立設置 undo 的 tablespace,默認記錄到 ibdata 中;否則,則在 undo 目錄下創建這么多個 undo 文件,例如假定設置該值為 16,那么就會創建命名為 undo001~undo016 的 undo tablespace 文件,每個文件的默認大小為 10M

修改該值可能會導致 Innodb 無法完成初始化;

# innodb_undo_logs

用于表示回滾段的個數(早期版本的命名為  innodb_rollback_segments ),該變量可以動態調整,但是物理上的回滾段不會減少,只是會控制用到的回滾段的個數;

默認為 128 個回滾段

# innodb_undo_directory

當開啟獨立 undo 表空間時,指定 undo 文件存放的目錄

如果我們想轉移 undo 文件的位置,只需要修改下該配置,并將 undo 文件拷貝過去就可以了。

2. 相關代碼

#在 innodb 啟動時 (innobase_start_or_create_for_mysql),會進行 undo 表空間初始化,細節見函數 srv_undo_tablespaces_init

– 如果是新建實例,會去創建 undo log 文件,undo 表空間的 space id 從 1 開始;默認初始化大小為 10M,由宏 SRV_UNDO_TABLESPACE_SIZE_IN_PAGES 控制;

– 讀取當前實例的所有 undo 表空間的 space id(trx_rseg_get_n_undo_tablespaces)

首先從 ibdata 中讀取到事務系統的文件頭,然后再從其中記錄的回滾段信息,找到回滾段對應的 space id 和 page no(trx_sysf_rseg_get_space,trx_sysf_rseg_get_page_no),并按照 space id 排序后返回;

– 根據上一步讀到的 space id 依次打開 undo 文件 (srv_undo_tablespace_open),如果不存在,就標識啟動失敗

所以 undo 文件也是類似 ibdata 的重要文件,目前是不可以刪除的。。。所以不要試圖刪除 undo 文件來釋放空間 - -!

可以容忍定義的 table space 個數比已有的 undo 文件個數要少 (但所有的 undo 文件依然會打開),反之則報錯初始化失敗

#undo 回滾段初始化(trx_sys_create_rsegs)

如果是正常 shutdown 重啟,并且設置的回滾段個數大于目前已經使用的回滾段個數 (trx_sysf_rseg_find_free),就會去新建回滾段 (trx_rseg_create)

這里總是從第一個 undolog tablespace 開始初始化回滾段,看起來似乎有些問題,極端情況下,如果我每次重啟遞增 innodb_undo_logs,是不是意味著所有的 undo 回滾段都會寫入到第一個 undo tablespace 中?

完成初始化后,將當前可用的 undo 回滾段的個數復制給 srv_available_undo_logs,可以通過 show status 查看:

root@performance_schema 12:16:18 show status like‘Innodb_available_undo_logs’; 
+—————————-+——-+ 
| Variable_name  | Value | 
+—————————-+——-+ 
| Innodb_available_undo_logs | 128  | 
+—————————-+——-+ 
1 row in set (0.00 sec)

啟動后,innodb_undo_logs 是可以動態調整的,但最大不可以超過 Innodb_available_undo_logs

#在一個非只讀的事務開啟時,會為其分配回滾段 (trx_assign_rseg_low),動態的調整 innodb_undo_logs 可以限定分配的回滾段范圍;

TODO

當有長時間運行的事務時,可能導致 purge 操作來不及回收 undo 空間,進而導致 undo 空間急劇膨脹;理論上講,如果做一次干凈的 shutdown,應該可以安全的將將這些 undo 文件刪除并重新做一次初始化;也許未來的某個 MySQL 版本可能實現這個功能,這對于某些服務(比如按磁盤空間收費的云計算提供商)是非常有必要的功能

感謝各位的閱讀,以上就是“怎么使用 MySQL5.6 中 Innodb 獨立的 undo tablespace”的內容了,經過本文的學習后,相信大家對怎么使用 MySQL5.6 中 Innodb 獨立的 undo tablespace 這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-19發表,共計2128字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 会东县| 石渠县| 江安县| 钟山县| 阿坝| 岳池县| 益阳市| 鄄城县| 东辽县| 河北区| 三亚市| 林口县| 临夏县| 湖南省| 铁岭市| 信宜市| 邹城市| 麻阳| 枣庄市| 开阳县| 博客| 乌拉特前旗| 防城港市| 姚安县| 璧山县| 台中市| 扎兰屯市| 金门县| 屏南县| 弋阳县| 进贤县| 东乡县| 平和县| 保德县| 离岛区| 萨迦县| 三门峡市| 剑阁县| 嵊州市| 秦皇岛市| 府谷县|