最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

1 Mysql5.6

1.1 相關(guān)參數(shù)

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

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

默認(rèn)參數(shù):

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

實(shí)例初始化是修改innodb_undo_tablespaces:

mysql_install_db ...... --innodb_undo_tablespaces

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

1.2 使用

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

undo log可以存儲(chǔ)于ibdata之外。但這個(gè)特性依然雞肋:

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

1.3 大事務(wù)測(cè)試

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已經(jīng)開始膨脹了!事務(wù)commit后空間也沒有回收。

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

2 Mysql5.7

5.7引入了在線truncate undo tablespace

2.1 相關(guān)參數(shù)

必要條件:

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

啟動(dòng)參數(shù):

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

2.2 清理過程

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

2.3 性能建議

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

2.4 大事務(wù)測(cè)試

配置8個(gè)undo表空間,innodb_purge_rseg_truncate_frequency=10

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

開始測(cè)試

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...

總結(jié)

以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

  • MySQL Threads_running飆升與慢查詢的相關(guān)問題解決

    MySQL Threads_running飆升與慢查詢的相關(guān)問題解決

    這篇文章主要介紹了MySQL Threads_running飆升與慢查詢的問題解決,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-05-05
  • CentOS6.8使用cmake安裝MySQL5.7.18

    CentOS6.8使用cmake安裝MySQL5.7.18

    這篇文章主要為大家詳細(xì)介紹了CentOS6.8使用cmake安裝MySQL5.7.18的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • 哪些情況會(huì)導(dǎo)致?MySQL?索引失效

    哪些情況會(huì)導(dǎo)致?MySQL?索引失效

    這篇文章主要介紹了哪些情況會(huì)導(dǎo)致MySQL索引失效,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的朋友可以參考一下
    2022-07-07
  • 聊聊MySQL中的存儲(chǔ)引擎

    聊聊MySQL中的存儲(chǔ)引擎

    MySQL是當(dāng)前流行的數(shù)據(jù)庫引擎之一,具有成本低、速度快、體積小且開放源代碼的優(yōu)點(diǎn)。這篇文章主要介紹了MySQL中存儲(chǔ)引擎的相關(guān)知識(shí),幫助大家更好的理解和學(xué)習(xí)數(shù)據(jù)庫技術(shù),感興趣的朋友可以了解下
    2020-08-08
  • MySQL分頁技術(shù)、6種分頁方法總結(jié)

    MySQL分頁技術(shù)、6種分頁方法總結(jié)

    這篇文章主要介紹了MySQL分頁技術(shù)、6種分頁方法總結(jié),本文總結(jié)了6種分頁的方法并分別一一講解它們的特點(diǎn),需要的朋友可以參考下
    2015-07-07
  • MySQL報(bào)錯(cuò)?:Error?writing?file?‘/tmp/XXXX‘?(Errcode:?28?-?No?space?left?on?device)的解決方法

    MySQL報(bào)錯(cuò)?:Error?writing?file?‘/tmp/XXXX‘?(Errcode:?28?

    這篇文章主要給大家介紹了MySQL報(bào)錯(cuò)解決:Error?writing?file?‘/tmp/XXXX‘?(Errcode:?28?-?No?space?left?on?device),文中通過代碼示例和圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • MySQL事務(wù)的隔離級(jí)別詳情

    MySQL事務(wù)的隔離級(jí)別詳情

    這篇文章主要介紹了MySQL事務(wù)的隔離級(jí)別詳情,事務(wù)隔離級(jí)別越高,為避免沖突所花費(fèi)的性能也就越多,即效率低。在“可重復(fù)讀”級(jí)別,實(shí)際上可以解決部分的虛讀問題,但是不能防止update更新產(chǎn)生的虛讀問題,要禁止虛讀產(chǎn)生,還是需要設(shè)置串行化隔離級(jí)別
    2022-07-07
  • mysql 存儲(chǔ)過程中變量的定義與賦值操作

    mysql 存儲(chǔ)過程中變量的定義與賦值操作

    昨天我們講了mysql存儲(chǔ)過程創(chuàng)建修改與刪除,下面我們這篇教程是講關(guān)于mysql存儲(chǔ)過程中變量的定義賦值操作哦。
    2010-05-05
  • 關(guān)于django連接mysql數(shù)據(jù)庫并進(jìn)行數(shù)據(jù)庫的創(chuàng)建的問題

    關(guān)于django連接mysql數(shù)據(jù)庫并進(jìn)行數(shù)據(jù)庫的創(chuàng)建的問題

    這篇文章主要介紹了django連接mysql數(shù)據(jù)庫并進(jìn)行數(shù)據(jù)庫的創(chuàng)建,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06
  • Navicat自動(dòng)備份MySQL數(shù)據(jù)的流程步驟

    Navicat自動(dòng)備份MySQL數(shù)據(jù)的流程步驟

    對(duì)于從事IT開發(fā)的工程師,數(shù)據(jù)備份我想大家并不陌生,這件工程太重要了!對(duì)于比較重要的數(shù)據(jù),我們希望能定期備份,每天備份1次或多次,或者是每周備份1次或多次,所以本文給大家介紹了Navicat自動(dòng)備份MySQL數(shù)據(jù)的流程步驟,需要的朋友可以參考下
    2024-12-12

最新評(píng)論

五原县| 分宜县| 银川市| 镇江市| 武宁县| 雅安市| 治多县| 赤城县| 卫辉市| 封开县| 永寿县| 饶阳县| 溆浦县| 肥城市| 手机| 清镇市| 乌鲁木齐市| 惠州市| 肥乡县| 秀山| 竹北市| 锡林郭勒盟| 哈密市| 哈尔滨市| 杭州市| 会泽县| 海南省| 景洪市| 贵溪市| 洛隆县| 饶阳县| 富锦市| 丰原市| 麦盖提县| 东安县| 五河县| 六枝特区| 龙江县| 永安市| 县级市| 南和县|