MariaDB ColumnStore初探(2):特性、命令及运维优化

徐良 2016-12-22 10:38:31

 

作者介绍

徐良,华为电商DBA, BAT RDS DBA ,拥有多年MySQL管理经验。擅长MySQL性能优化,高可用,高性能,热衷于私有云技术和大数据库架构,目前专注于MySQL支持E,P级数据容量和源码定制研究。开源项目sqlwatch、MyCAT源码贡献者。

 

 
Columnstore简介
 

 

最近MariaDB整合了InfiniDB作为一个独立存储引擎Columnstore,基于列存储的分析性数据库,提供P级大数据分析。

 

近几年Hadoop的火热,使传统的OLTP厂家Oracle推出了Oracle12C inmemory,sap推出了HANA等OLAP产品,都想来分一杯大数据的羹。作为开源关系型数据库王者的MySQL在OLAP领域消息不是很多,甚至还不如PostgrSQL的Greenplum, Columnstore的推出终于使百花齐放的大数据分析领域又多了一员猛将。

 

社区认可
 

 

MariaDB已经整合InfiniDB,近期已经发布GA版本,未来发展潜力很大。

 

 

架构先进
 

 

支持分布式部署,充分利用多服务器多CPU,多IO进行快速OLAP分析。

 

 

整理架构分为计算层和存储层,都是可扩展的。计算层需要由下面的几个主要进程构成:

 

  • MariaDB(mysqld):收集用户请求的一个SQL入口,存储元数据信息;

  • Execution Manager:收到MariaDB进程发送过来的语法树,转化成对应的任务列表(JOB LIST),包括优化、取数据、(HASH)JOIN、汇总、分组。UserModule的核心进程;

  • DMLProc:将DML语句发送到指定的Performance Module执行;

  • DDLProc:将DDL语句发送到指定的Performance Module执行;

  • Performance Module:接受Execution Manager发送过来的任务调度,分布式扫描,(HASH)JOIN与汇总。

 

存储层支持本地磁盘与共享存储,后期计划支持HDFS和GlusterFS这样的分布式文件系统,以提升数据的可靠性。

 

性能强悍
 

 

Percona专业MySQL服务提供商性能测试InfiniDB比其他OLAP优势明显。

 

 

安装部署
 

 

内核优化

 

/sbin/ifconfig eth0 txqueuelen 10000

#Modify /etc/sysctl.conf for the following:

# increase TCP max buffer size

net.core.rmem_max = 16777216

net.core.wmem_max = 16777216

# increase Linux autotuning TCP buffer limits

# min, default, and max number of bytes to use

net.ipv4.tcp_rmem = 4096 87380 16777216

net.ipv4.tcp_wmem = 4096 65536 16777216

# don't cache ssthresh from previous connection

net.ipv4.tcp_no_metrics_save = 1

# recommended to increase this for 1000 BT or higher

net.core.netdev_max_backlog = 2500

# for 10 GigE, use this

# net.core.netdev_max_backlog = 30000

 

下载安装

 

systemctl stop firewalld.service

systemctl disable firewalld.service

yum erase MariaDB-server MariaDB-libs -y

yum -y groupinstall "Development Tools"

yum -y install cmake

yum install systemd-libs -y

yum -y install ncurses-devel

yum install libxml++-devel -y

yum install readline-devel -y

yum install boost -y

yum -y install expect perl perl-DBI openssl zlib

 HOME=/usr/local/

cd /root/infi/mysql

./configure --prefix=$HOME/Calpont/mysql

make

make install

cd /root/infi/InfiniDB

./configure --prefix=$HOME/Calpont

make

make install

/usr/local/Calpont/bin/post-install

/usr/local/Calpont/bin/postConfigure  

/usr/local/Calpont/bin/calpontAlias 

 

启动

 

/usr/local/Calpont/mysql/mysql-Calpont start > /tmp/actionMysqlCalpont.log 2>&1

service InfiniDB status

 

测试实践

 

InfiniDB比InnoDB建表速度慢,语法定制。

 

 

InfiniDB比InnoDB增加列快100倍

 

 

mysql> alter table t_innodb add c3 varchar(64);

Query OK, 99797224 rows affected (15 min 19.50 sec)

Records: 99797224  Duplicates: 0  Warnings: 0

mysql>  alter table t_InfiniDB add c51 varchar(56) ;

Query OK, 0 rows affected (12.15 sec)

Records: 0  Duplicates: 0  Warnings: 0

 

InfiniDB比InnoDB单条插入慢上百倍

 

 

InfiniDB比InnoDB百列字段千万级数据插入快4倍

 

 

5.7G    /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

Mon Oct 17 16:03:16 CST 2016

12G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

Mon Oct 17 16:09:41 CST 2016

24G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

Mon Oct 17 16:24:32 CST 2016

31G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

473M    /usr/local/Calpont/data1/000.dir

Mon Oct 17 16:43:18 CST 2016

26G     /usr/local/Calpont/data1/000.dir

Mon Oct 17 16:53:52 CST 2016

 

InfiniDB比InnoDB百列字段千万级空间少20%

 

 

5.7G    /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

Mon Oct 17 16:03:16 CST 2016

12G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

Mon Oct 17 16:09:41 CST 2016

24G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

Mon Oct 17 16:24:32 CST 2016

31G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

473M    /usr/local/Calpont/data1/000.dir

Mon Oct 17 16:43:18 CST 2016

26G     /usr/local/Calpont/data1/000.dir

Mon Oct 17 16:53:52 CST 2016

 

InfiniDB比InnoDB百列字段千万级查询快100倍

 

 

InfiniDB比InnoDB亿级插入快3倍

 

 

mysql> insert into t_innodb(`mkey`,`mval`,`pid`) select uuid(),uuid(),crc32(uuid())%1000000 from t_innodb;

Query OK, 38689612 rows affected (7 min 7.11 sec)

Records: 38689612  Duplicates: 0  Warnings: 0

mysql> insert into t_InfiniDB select * from t_innodb;

Query OK, 99797224 rows affected (5 min 23.33 sec)

Records: 99797224  Duplicates: 0  Warnings: 0

 

InfiniDB比InnoDB亿级数据空间少50%

 

 

[root@iZwz9gqs3euog0uv31l5ahZ ~]# du -sh /usr/local/Calpont/data1/*

5.3G    /usr/local/Calpont/data1/000.dir

[root@iZwz9gqs3euog0uv31l5ahZ ~]# du -sh /usr/local/Calpont/mysql/db/infi/*

12G     /usr/local/Calpont/mysql/db/infi/t_innodb.ibd

 

InfiniDB比InnoDB亿级数据查询快150倍

 

 

BI兼容性

 

基于成熟MySQL协议,Tableau可以使用

 

 

运维优化
 

 

配置优化

 

配置文件

 

Columnstore.xml 

 

压缩速度

 

set InfiniDB_compression_type = n

AllowDiskBasedJoin 

TempFileCompression 

TempFilePath (建议独立分区)

InfiniDB_um_mem_limit (join内存 空间最大值)

InfiniDB_use_import_for_batchinsert =1后

LOAD DATA INFILE 能有效提升insert速度

cpimport dbName tblName [loadFile]

cpimport -m3 mytest mytable /home/mydata/mytable.tbl

 

让UM读取本地PM

 

InfiniDB_local_query =1

 

获取数据对应的分区

 

select calShowPartitionsByValue('tbl_name','col_name', 'start_value', 'end_value');

 

SQL语法兼容性 0完全兼容 1,效率低的报错 2自适应

 

set InfiniDB_vtable_mode = n

 

常用命令
 

 

加目录

 

mcsadmin adddbroot 2

mcsadmin  assignPmDBRootConfig 3 pm1

 

加模块

 

mcsadmin addModule pm 2 MYHST1,MYHST2 mypwd

 

获取系统状态

 

mcsadmin getSystemStatus

 

获取进程状态

 

mcsadmin getProcessStatus

mcsadmin  stopSystem  

mcsadmin startSystem

 

关闭所有

 

mcsadmin   shutdownSystem 

mcsadmin alterSystem-disablemodule PM2, PM3

mcsadmin alterSystem-enablemodule PM2, PM3

switchParentOAMModule pm3

 

获取系统配置

 

mcsadmin getSystemNetworkConfig

mcsadmin getModuleConfig

setSystemConfig ExternalMajorThreshold 80

 

注意问题
 

 

自增长字段需要在注释里标志

COMMENT=’autoincrement=orderkey,1’;

MySQL单行记录65536限制了列个数

 

 
总结
 

 

MariaDB Columnstore可以扩展到百台服务器节点构成的集群,P级数据容量,完美支持各种成熟BI工具,支持数据更新DML,有代码可以定制,SQL和NoSQL在OLAP领域又起烽烟。

最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告