本文地址:https://www.askmac.cn/archives/mysql-storage-engines-memory.html
MEMORY配置项:
MEMORY存储引擎作为一个有效且有用的引擎,应该在大多应用设计中考虑其的使用,以提高性能并满足特定的业务需要。以下是是对MEMORY存储引擎最佳实践中的一些建议:
- 最小化一张MEMORY表可增长的大小 – 许多应用会使用MEMORY存储引擎来动态倒入,由于没有得到正确的引导而导致表过大,从而产生了较差的性能。这里你可以使用以下解决方案来满足应用需求:
- max_heap_table_size – 这个变量设置了MEMORY表被运行增长到的最大大小。此值被用于计算MEMORY表MAX_ROWS值。变量设置对于已存在的MEMORY表没有效果,除非你使用CREATE TABLE进行表重建,或使用ALTER TABLE或TRUNCATE TABLE来进行表修改。
- MAX_ROWS – 对于单独MEMORY表,表的最大行数可以在CREATE TABLE(或ALTER TABLE)语句中使用MAX_ROWS语法进行设置。
- 在服务端启动时,将数据装入MEMORY表中 – 和存储一致性数据一样存储MEMORY表,有一种方法可以在服务端启动时来装入数据。就是使用
--init-file
启动项。在启动项中指定的文件中,使用命令如LOAD DATA INFILE或INSERT INTO … SELECT,它们会在服务端启动时被执行。这对于服务端崩溃和MySQL复制很有用。
使用主从复制,当主服务端在关闭重启后MEMORY表被清空了。但是,从库并没有意识到这点,当查询从库时候,它会返回过时的数据。在新版本的MySQL中,binary log包括了DELETE FROM语句来实现从库从主库的同步,但是这之间同步的时间取决于服务端的重启和主库MEMORY表的第一次使用(在第一次使用时,会首先执行DELECT语句,这会被同步到从库)。使用 --init-file
项则避免了这样的问题,保证了主库启动到MEMORY表中数据重新可用的时间间隔最小化。
MEMORY存储引擎优缺点:
优点 | 缺点 |
极快的读写操作
支持B-tree和Hash索引 主要的内存数据库管理 |
在服务端被关闭后数据不能持久
不支持事务 不支持外键 不支持full-text及GIS索引支持 表级别锁 不能存储BLOB和Text数据 |
Comment