1. 程式人生 > >Mysql的儲存引擎之:MEMORY儲存引擎

Mysql的儲存引擎之:MEMORY儲存引擎

MEMORY儲存引擎

Memory儲存的表就是記憶體表。實際的資料儲存在記憶體中,磁碟中只有表結構定義檔案。

Mysql服務單獨給memory儲存引擎的表分配記憶體空間,而且表一直持有這些記憶體空間(即使刪除資料也不釋放記憶體),直到有drop、alter、create等重建物件才能釋放記憶體。

注:記憶體的佔用空間由max_heap_table_size引數控制,預設16M

當心!當Mysql服務關閉時,資料會丟失。

建立Memory儲存引擎的表

建立一個基於Memory儲存引擎的表table_memory:

mysql> create table table_memory(id int) engine=memory;
Query OK, 0 rows affected (0.02 sec)

檢視下table_memory表的佔用空間大小(Max_data_length欄位):

空間大小:16777216/1024/1024=16M

mysql> show table status like'table_memory';
| Name         | Engine | Version | Row_format|Rows|Avg_row_length|Data_length| Max_data_length
| table_memory | MEMORY |      10 | Fixed     |  0 |            8 |         0 | 16777216
……

檢視下table_memory表的資料檔案:

注:只有一個.frm的表結構定義檔案

[[email protected] test]$ ll
-rw-rw---- 1 mysql mysql 8556 Sep  2 14:00 table_memory.frm

max_heap_table_size引數

更改max_heap_table_size引數(更改為1M和4M),再建立兩個基於Memory儲存引擎的表table_memory_1M、table_memory_4M,測試一下佔用空間的大小:

注:更改的max_heap_table_size引數為會話級,而非全域性級

mysql> set max_heap_table_size=1024*1024;
Query OK, 0 rows affected (0.01 sec)

mysql> create table table_memory_1M(idint) engine=memory;
Query OK, 0 rows affected (0.05 sec)

mysql> set max_heap_table_size=1024*1024*4;
Query OK, 0 rows affected (0.00 sec)

mysql> create table table_memory_4M(idint) engine=memory;
Query OK, 0 rows affected (0.01 sec)

檢視佔用空間大小:分別是16M、1M、4M

mysql> show table status like'table_memory%';
| Name            | Engine | Version|Row_format | Rows |Avg_row_length | Data_length | Max_data_length
| table_memory    | MEMORY | 10     | Fixed     |    0 |             8 |           0 | 16777216
| table_memory_1M | MEMORY | 10     | Fixed     |    0 |             8 |           0 |  1048576
| table_memory_4M | MEMORY | 10     | Fixed     |    0 |             8 |           0 |  4194304
……

重啟Mysql服務,資料和空間的變化

向table_memory表中插入一條資料:

mysql> insert into table_memory values(11);
Query OK, 1 row affected (0.00 sec)

mysql> select * from table_memory;
+------+
| id  |
+------+
|  11 |
+------+
1 row in set (0.00 sec)

重啟Mysql服務:

[[email protected] test]$ service mysqld restart;
Shutting down MySQL.... SUCCESS!
rm: cannot remove '/var/lock/subsys/mysql':Permission denied
Starting MySQL... SUCCESS!

再次查詢table_memory表,資料丟失:

mysql> select * from table_memory;
Empty set (0.00 sec)

再次檢視之前改過不同記憶體空間大小的三張表的狀態,都是16M了:

mysql> show table status like'table_memory%';
| Name            | Engine | Version|Row_format | Rows |Avg_row_length | Data_length | Max_data_length
| table_memory    | MEMORY | 10     | Fixed     |    0 |             8 |           0 | 16777216
| table_memory_1M | MEMORY | 10     | Fixed     |    0 |             8 |           0 | 16777216
| table_memory_4M | MEMORY | 10     | Fixed     |    0 |             8 |           0 | 16777216
……

注:Mysql服務重啟後,所有表會自動繼承全域性的max_heap_table_size引數的值,所以都會變成16M

相關推薦

Mysql儲存引擎MEMORY儲存引擎

MEMORY儲存引擎 Memory儲存的表就是記憶體表。實際的資料儲存在記憶體中,磁碟中只有表結構定義檔案。 Mysql服務單獨給memory儲存引擎的表分配記憶體空間,而且表一直持有這些記憶體空間(即使刪除資料也不釋放記憶體),直到有drop、alter、create

Mysql儲存引擎MERGE儲存引擎

Merge是基於MyISAM儲存引擎的表,所以Merge儲存引擎也叫做MGR_MyISAM儲存引擎,作用是將一組MyISAM儲存引擎的表聚合成一張表。 Merge中要聚合的MyISAM表的列和索引必須有相同的定義及順序。 建立MERGE儲存引擎的表 建立兩個基於MyIS

MySQL資料庫知識點MyIsam與InnoDB引擎的區別

MyIsam與InnoDB引擎的區別 MyIsam與InnoDB主要有以下4點大的區別: 快取機制 事務支援 鎖實現 資料物理儲存方式(包括索引和資料) 1 快取機制 MyIsam InnoDB MyIsam僅僅快取索引,不會

Openstack儲存總結使用Ceph叢集作為後端統一儲存

 前提條件 一個可以正常執行的Ceph叢集,該叢集採用ceph-deploy建立,dataprovider為管理節點,包括三個MON,四個MON 以及Openstack叢集,其中Openstack叢集假設Cinder,Glance都是安裝在叫做controllernod

Android五種資料儲存方式SQLite資料庫儲存 載入SD卡資料庫 sql操作 事務 防止SQL注入

資料庫 前言 資料庫儲存 資料庫建立 內建儲存資料庫 外接儲存資料庫 編寫DAO 插入操作 更新操作 刪除操作 查詢操作

規則引擎Drools規則引擎

原文連結:http://www.it165.net/pro/html/201503/36286.html Drools是一個開源的規則引擎,經過多年的發展,也提供如下商業BRMS具備的功能元件: 基於Eclipse的整合開發環境, 獨立集中的規則儲存庫 基於WE

作業系統儲存管理頁式儲存管理深入淺出

用分割槽方式管理的儲存器,每道程式總是要求佔用主存的一個或幾個連續儲存區域,作業或程序的大小仍受到分割槽大小或記憶體可用空間的限制,因此,有時為了接納一個新的作業而往往要移動已在主存的資訊。這不僅不方便,而且開銷不小。採用分頁儲存器既可免去移動資訊的工作,又可儘

軟考(四)——儲存管理頁式儲存

       之前在總結作業系統這部分知識點的時候,發現儲存這部分的東西比較有意思,所以想把它單拿出來整理下,以便之後的學習,其實很簡單,下面我們來看下它是有多簡單的呢? 儲存管理        作業

儲存管理分頁儲存管理方式C語言模擬(實驗五)

       分頁儲存管理方式,將程式劃分為若干個大小固定的區域(頁),也把實體記憶體劃分為大小和頁相等的塊,通過頁表完成頁到塊的對映。 分頁儲存管理之C語言模擬: #include <stdio.h> #include <string.h> #i

Android 儲存學習使用SharedPreference儲存檔案

上兩節我們都是使用文字檔案儲存使用者的資訊,這明顯是存在漏洞的。同時對檔案中的內容不好管理。今天我們學習用SharedPreference儲存。sharedPreference是專門儲存一些比較零散的資料的。 我們還是用上節的例子分析,將使用者的資訊使用SharedPref

MySQL架構三儲存引擎主要引擎

在檔案系統中,MySQL將每個資料庫(schema)儲存為資料目錄下的一個子目錄。建立表時,MySQL會在資料庫子目錄下建立一個和表名相同的.frm檔案儲存表的定義。例如建立一個名為MyTable的表,MySQL會在MyTable.frm檔案中儲存該表的定義。因為MySQL使用檔案系統的目錄和檔案來

Learning-MySQL【2】MySQL儲存引擎及資料庫的操作管理

一、儲存引擎 儲存引擎實際上就是如何儲存資料、如何為儲存的資料建立索引和如何更新、查詢資料。儲存引擎也可以稱為表型別。 MySQL提供了外掛式(pluggable)的儲存引擎,儲存引擎是基於表的。同一個資料庫,不同的表,儲存引擎可以不同。甚至,同一個資料庫表在不同的場合可以應用不同的儲存引擎。 檢視當前

MySQL儲存引擎Spider核心深度解析

    作者介紹 朱閱岸,中國人民大學博士,現供職於騰訊雲資料庫團隊。研究方向主要為資料庫系統理論與實現、新硬體平臺下的資料庫系統以及TP+AP型混合系統。 Spider是為MySQL/MariaDB開發的一個特殊引擎,具有內嵌分片功能。現在它已經被

MySQL技術內幕InnoDB儲存引擎》——第3章 檔案

引數檔案 mysql --help | grep my.cnf mysql> show variables;//檢視引數 mysql> set read_buffer_size = 524288;//設定會話動態引數 mysql> set @@global.read

MySQL技術內幕InnoDB儲存引擎》——第2章 InnoDB儲存引擎

mysql> show engine innodb status;//檢視innodb儲存引擎狀態 mysql> show variables like 'innodb_version';//檢視innodb儲存引擎版本 mysql> show variables like

MySQL技術內幕InnoDB儲存引擎》——第1章 MySQL體系結構和儲存引擎

啟動 ./mysqld_safe & 檢視程序 ps -ef|grep mysqld 資料庫例項啟動時,讀取配置檔案的順序,後面的檔案配置會覆蓋前面的檔案配置 mysql --help | grep my.cnf mysql> show variables li

MySQL技術內幕InnoDB儲存引擎-筆記

Innodb將通過主鍵聚集資料,如果沒有定義主鍵,Innodb會選擇第一個非空的唯一索引代替,如果沒有非空唯一索引,Innodb會隱式定義一個6位元組的rowid主鍵來作為聚集索引。 索引的底層原理(Page164) B+樹是為磁碟或其他直接存取輔助裝置而設計的一種

MySQL技術內幕InnoDB儲存引擎》一文中示例總結

第1章 MySQL體系結構和儲存引擎 啟動 ./mysqld_safe & 檢視程序 ps -ef|grep mysqld 資料庫例項啟動時,讀取配置檔案的順序,後面的檔案配置會覆蓋前面的檔案配置 mysql --help | grep my.cnf m

MySQL技術內幕 InnoDB儲存引擎 InnoDB體系架構

      後臺執行緒 1.Master Thread 2.IO Thread 3.Purge Thread 4.Page Cleaner Thread      記憶體     重做日誌在以下三

MySQL技術內幕InnoDB儲存引擎(第2版)》書摘

MySQL技術內幕:InnoDB儲存引擎(第2版) 姜承堯 第1章 MySQL體系結構和儲存引擎 >> 在上述例子中使用了mysqld_safe命令來啟動資料庫,當然啟動MySQL例項的方法還有很多,在各種平臺下的方式可能又會有所不同。 >> 當啟