mysql innodb_undo_directory默认_MySQL innodb_undo_tablespaces相关参数
摘錄自:http://gfsunny.blog.51cto.com/990565/1566683
undo log(回滾):服務器異常關機或斷電重啟后,MySQL會對修改過,但尚未提交的事務進行回滾。
在MySQL5.6中開始支持把undo log分離到獨立的表空間,并放到單獨的文件目錄下。這給部署不同IO類型的文件位置帶來便利,對于并發寫入型負載,可以把undo文件部署到單獨的高速SSD存儲設備上。
undo tablespaces相關參數參數含義
innodb_undo_directory[=/opt/mysql/undo]Innodb為還原日志創建的獨立表空間的相對或絕對路徑。通常用于日志被放置在哪些不同的存儲設備上。配合參數innodb_undo_logs和innodb_undo_tablespaces,這決定了系統表空間外還原日志的磁盤分布。默認目錄為innodb默認創建它的其他日志文件的目錄。
如果想轉移undo文件的位置,只需要修改下該配置,并將undo文件拷貝過去就可以了。【支持后期修改】
innodb_undo_logs[=128]定義在一個事務中innodb使用的系統表空間中回滾段的個數。如果觀察到同回滾日志有關的互斥爭用,可以調整這個參數以優化性能。早期版本的命名為innodb_rollback_segments,該變量可以動態調整,但是物理上的回滾段不會減少,只是會控制用到的回滾段的個數;默認為128個回滾段【手冊上最大就是128】【支持后期修改】
innodb_undo_tablespaces[=4]用于設定創建的undo表空間的個數,在mysql_install_db時初始化后,就再也不能被改動了,修改該值會導致MySQL無法啟動。
默認值為0,表示不獨立設置undo的tablespace,默認記錄到ibdata中;否則,則在undo目錄下創建這么多個undo文件(每個文件的默認大小為10M)。最多可以設置到126。
例如假定設置該值為4,那么就會在mysql的data目錄下創建命名為undo001~undo004的undo tablespace文件。【不支持后期修改】
undo回滾段初始化
如果是正常shutdown重啟,并且設置的回滾段個數大于目前已經使用的回滾段個數(trx_sysf_rseg_find_free),就會去新建回滾段(trx_rseg_create)
這里總是從第一個undologtablespace開始初始化回滾段,看起來似乎有些問題,極端情況下,如果我每次重啟遞增innodb_undo_logs,是不是意味著所有的undo回滾段都會寫入到第一個undo tablespace中?
完成初始化后,將當前可用的undo回滾段的個數復制給srv_available_undo_logs,可以通過show status查看:
mysql> show status like'innodb_available_undo_logs';
+----------------------------+-------+
| Variable_name????????????? | Value |
+----------------------------+-------+
| Innodb_available_undo_logs | 128 ? |
+----------------------------+-------+
1 row in set (0.02 sec)
啟動后,innodb_undo_logs是可以動態調整的,但最大不可以超過Innodb_available_undo_logs
在一個非只讀的事務開啟時,會為其分配回滾段(trx_assign_rseg_low),動態的調整innodb_undo_logs可以限定分配的回滾段范圍;
當有長時間運行的事務時,可能導致purge操作來不及回收undo空間,進而導致undo空間急劇膨脹;理論上講,如果做一次干凈的shutdown,應該可以安全的將將這些undo文件刪除并重新做一次初始化;也許未來的某個MySQL版本可能實現這個功能,這對于某些服務(比如按磁盤空間收費的云計算提供商)是非常有必要的功能。
參數設置演示:
# rm -rf /data/3306/data/*
# cd /usr/local/mysql/scripts/
# ./mysql_install_db--basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql --innodb_undo_tablespaces=4
# /etc/init.d/mysqld_3306start
注意:加了--innodb_undo_tablespaces=4參數初始化后,修改my.cnf,加入innodb_undo的參數,如下3行:
innodb_undo_logs=100
innodb_undo_tablespaces = 4
innodb_undo_directory = /tmp/? #這里我是演示起見,隨便設置的一個目錄
啟動mysql,在/tmp/目錄下會生成獨立的undo表空間文件,如下圖:
> show variables like 'innodb_undo%';也可以看到修改生效了
MySQL5.6手冊上的截圖如下:
總結
以上是生活随笔為你收集整理的mysql innodb_undo_directory默认_MySQL innodb_undo_tablespaces相关参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 洋务运动举办的与军事工业有关的重工业部门
- 下一篇: 俄罗斯人可以在中国换人民币吗