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

    xiaoxiao2025-08-17  17

    作者介绍

    徐良,华为电商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())00000 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领域又起烽烟。

    原文发布时间为:2016-12-22

    本文来自云栖社区合作伙伴DBAplus

    最新回复(0)