mysql關於memory引擎的表的總結
參見官方文件https://dev.mysql.com/doc/refman/5.7/en/memory-storage-engine.html
總結
1、memory引擎表資料只存放在記憶體中,插入資料後,檔案也只有表結構檔案,沒有表資料檔案, 重啟後,資料丟失 ,但是表結構還在,表結構檔案也還在
2、memory引擎表,一個會話修改了資料,其他會話可以立即看到修改後的資料,和oracle的臨時表完全不同
3、要清空memory引擎表,delete、truncate、drop、重啟都可以,沒有類似oracle這樣的flush buffer_cache的直接清空記憶體的方法
4、memory引擎表最大大小受引數max_heap_table_size的限制,具體見官方文件
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_heap_table_size
5、也就是說,momory引擎的表,除了這兩點,表資料放在記憶體中、重啟後資料丟失,其他一切都和普通表一樣。
6、生產環境不建議使用memory引擎,因為它有兩個最大的缺點,其一它只有表鎖沒有行鎖,這樣一旦表有更新操作,就會堵塞其他會話對這張表的讀寫。其二它的資料存放在記憶體中,一旦在M-S架構中,S從庫重啟,S從庫資料就會丟失,但是M主庫資料還在,繼而影響主從同步,因為重啟後如果收到一條update語句後,主庫正常執行,把該語句傳送到從庫就會報錯找不到更新的行,導致主從同步停止。
7、如果非要用memory引擎的優點,把資料存放在記憶體中,可以考慮使用memory引擎臨時表,正好可以避免上面6的兩個缺點。
實驗過程
mysql> use test1
mysql> create table tab3 (hid int) engine memory;
mysql> insert into tab3 values (1);
mysql> insert into tab3 values (1);
mysql> insert into tab3 values (1);
mysql> select count(*) from tab3;
+----------+
| count(*) |
+----------+
| 3 |
+----------+
此時檢視tab3的資料檔案,發現只有表結構
[root@mydb ~]# ll /var/lib/mysql/test1 |grep tab3
-rw-r----- 1 mysql mysql 8558 Sep 30 11:00 tab3.frm
開另一個會話
mysql> select count(*) from test1.tab3;
+----------+
| count(*) |
+----------+
| 3 |
+----------+
重啟資料庫,再檢視tab3的資料
mysql> select count(*) from test1.tab3;
+----------+
| count(*) |
+----------+
| 0 |
+----------+
此時檢視tab3的資料檔案,表結構還在
[root@mydb ~]# ll /var/lib/mysql/test1 |grep tab3
-rw-r----- 1 mysql mysql 8558 Sep 30 11:00 tab3.frm
會話1
mysql> create table t1 (hid int);
mysql> create table t2 (hid int) engine=memory;
mysql> insert into t1 values(1),(2),(3);
mysql> insert into t2 values(1),(2),(3);
mysql> update t1 set hid=sleep(60) where hid=1;
會話2
mysql> select * from t1;
+------+
| hid |
+------+
| 1 |
| 2 |
| 3 |
+------+
正常執行,不堵塞
會話1
mysql> update t2 set hid=sleep(60) where hid=1;
會話2
mysql> select * from t2;
--堵塞,直到會話1執行完畢
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30126024/viewspace-2215375/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- mysql關於臨時表的總結MySql
- mysql關於表空間的總結MySql
- MySQL MyISAM引擎和InnoDB引擎對於單表大小限制的總結MySql
- mysql關於variable的總結MySql
- 關於MySQL 查詢表資料大小的總結MySql
- mysql關於mysql.server的總結MySqlServer
- SqlServer關於分割槽表的總結SQLServer
- mysql關於mysqld_safe的總結MySql
- 關於MySQL InnoDB表的二級索引是否加入主鍵的總結MySql索引
- 關於一表很多列的總結
- 關於Mysql使用的一些總結MySql
- MySql關於鎖的一些總結MySql
- MySQL MEMORY儲存引擎MySql儲存引擎
- Sqlserver 關於臨時表和表變數的總結SQLServer變數
- 關於修改分割槽表的問題總結
- 關於ORACLE的鎖表與解鎖總結Oracle
- mysql關於聚集索引、非聚集索引的總結MySql索引
- mysql關於db.opt檔案的總結MySql
- mysql關於字符集character set的總結MySql
- memory儲存引擎 /MySQL記憶體表的特性與使用介紹儲存引擎MySql記憶體
- 關於oracle的表空間,分割槽表,以及索引的總結Oracle索引
- 【MYSQL】一個關於Innodb儲存引擎表的加鎖問題MySql儲存引擎
- 關於近期的總結
- 關於UIWebView的總結UIWebView
- 關於BeautifulSoup的總結
- 關於HTML的總結HTML
- 關於oracle可傳輸表空間的總結Oracle
- 關於oracle的表空間,分割槽表,以及索引的總結(轉)Oracle索引
- 關於oracle的表空間,分割槽表,以及索引的總結 -- 轉Oracle索引
- 【Mysql 學習】memory儲存引擎MySql儲存引擎
- mysql memory引擎引起的主從 1032 錯誤MySql
- sqlserver關於always on的總結SQLServer
- ORACLE關於NULL的總結OracleNull
- 關於ORACLE鎖的總結Oracle
- 關於jboss配置的總結
- mysql~關於mysql分割槽表的測試MySql
- sqlserver關於filestream檔案流、filetable檔案表的總結SQLServer
- 關於分割槽表Local索引Rebuild的一些總結索引Rebuild