全部博文(368)
分类: Mysql/postgreSQL
2011-03-24 10:37:42
Mysql Cluster采用磁盘存储表
虽然说是采用磁盘存储表,但是如果表中有主键或者索引就会将索引和该列的数据都存储到内存中,磁盘数据表的变长列将占用固定空间,对于每行来说,也就是占用最大空间。在磁盘数据表中,TEXT和BLOB的前256个字节存于内存,其他的存 放在磁盘上。磁盘数据表的每一行要在内存里面存放8个字节,以指向存放在磁盘上的数据。所以如果一行要存放在磁盘上数据少于8个字节,还不如都放 在内存里。数据节点重启时--initial选项并不移除磁盘数据文件,需要手工事先把他们干掉。
如果采用磁盘存储,需要创建日志文件组以及undo日志文件,另外需要添加表空间,以及数据文件,创建格式如下:
CREATE LOGFILE GROUP lg_1 #创建日志文件组,并添加undo日志文件
ADD UNDOFILE 'undo_1.log'
INITIAL_SIZE 1024M
UNDO_BUFFER_SIZE 128M
ENGINE NDBCLUSTER;
CREATE TABLESPACE ts_1 #创建表空间,并添加数据文件
ADD DATAFILE 'data_1.dat'
USE LOGFILE GROUP lg_1
INITIAL_SIZE 10240M
ENGINE NDBCLUSTER;
删除日志文件组或者表空间的时候需要按顺序删除
只有在无表使用数据文件的时候才能删除数据文件
操作语法:
mysql> DROP TABLE dt_1;
只有在所有数据文件删除的情况下才能删除表空间
操作语法:
mysql> ALTER TABLESPACE ts_1
-> DROP DATAFILE 'data_2.dat'
-> ENGINE NDBCLUSTER;
mysql> ALTER TABLESPACE ts_1
-> DROP DATAFILE 'data_1.dat'
-> ENGINE NDBCLUSTER;
mysql> DROP TABLESPACE ts_1
-> ENGINE NDBCLUSTER;
只有使用UNDO logfile group的表空间都删除情况下才能删除undo logfile group
操作语法:
mysql> DROP LOGFILE GROUP lg_1
-> ENGINE NDBCLUSTER;
表空间的管理数据文件的管理
SELECT TABLESPACE_NAME, FILE_NAME, EXTENT_SIZE*TOTAL_EXTENTS/1024/1024 AS TOTAL_MB, EXTENT_SIZE*FREE_EXTENTS/1024/1024 AS FREE_MB, EXTRA FROM information_schema.FILES WHERE FILE_TYPE="DATAFILE";
查看undo日志文件使用量信息
select * from ndbinfo.logspaces where log_type='DD-UNDO';
创建使用磁盘存储的表:
CREATE TABLE `zhang` (
`Name` varchar(50) NOT NULL,
`ProviderName` varchar(200) NOT NULL,
PRIMARY KEY (`Name`)
) tablespace ts_1 storage disk ENGINE=ndbcluster DEFAULT CHARSET=utf8;