MySQL 中的暫存資料表和記憶體表

來源:互聯網
上載者:User

MySQL 中的暫存資料表和記憶體表

MySQL記憶體表:

1、通過My.cnf中的max_heap_table_size指定,支援動態指定

2、表定義是存放在磁碟上的,副檔名為.frm,重啟不會丟失,資料是存放在記憶體中的,所以重啟會遺失資料

3、不支援BLOB或TEXT列

4、記憶體表初始化,可以使用--init-file來初始化,避免重啟mysql後資料被清空。比如--init-file="/data/mysql/init.sql", init.sql格式為:

use db_test;

select *** into m_table;

5、在資料庫複寫時,如果主機當掉,則會在下次對主庫訪問的暫存資料表訪問時對binLog自動加入delete from [記憶體表],將slave的資料也刪除掉,以保證兩邊的資料一致性。

6、記憶體表不支援事務。

7、記憶體表是表鎖,當修改頻繁時,效能可能會下降。

8、對於重啟造成的資料丟失,有以下的解決辦法:

1、在任何查詢之前,執行一次簡單的查詢,判斷heap表是否存在資料,如果不存在,則把資料重新寫入,或者DROP表重新複製某張表。這需要多做一次查詢。不過可以寫成include檔案,在需要用該heap表的頁面隨時調用,比較方便。

2、對於需要該heap表的頁面,在該頁面第一次且僅在第一次查詢該表時,對資料集結果進行判斷,如果結果為空白,則需要重新寫入資料。這樣可以節省一次查詢。

3、更好的辦法是在mysql每次重新啟動時自動寫入資料到heap,但是需要設定管理員,過程比較複雜,通用性受到限制。

MySQL暫存資料表:

1、暫存資料表最大所需記憶體需要通過tmp_table_size設定,實際最大記憶體由max_heap_table_size和tmp_table_size的最小值決定,tmp_table_size對每個線程分配

2、如果記憶體暫存資料表超出了限制,MySQL就會自動地把它轉化為基於磁碟的MyISAM表,儲存在指定的tmpdir目錄下

3、Created_tmp_disk_tables 和 Created_tmp_tables 可以看出暫存資料表和磁碟建立的數量,一般Created_tmp_disk_tables/Created_tmp_tables<5%

4、create temporary table tmp1(id int not null); 可以建立暫存資料表

本文永久更新連結地址:

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.