閱讀626 返回首頁    go 阿裏雲 go 技術社區[雲棲]


MariaDB ColumnStore初探(2):特性、命令及運維優化

作者介紹

徐良,華為電商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版本,未來發展潛力很大。

 

20161222104111815.jpg

 

架構先進  

 

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

 

20161222104127864.jpg

 

整理架構分為計算層和存儲層,都是可擴展的。計算層需要由下麵的幾個主要進程構成:

 

  • 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優勢明顯。

 

20161222104143663.jpg

 

安裝部署  

 

內核優化

 

/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建表速度慢,語法定製。

 

20161222104212677.jpg

 

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單條插入慢上百倍

 

20161222104223554.jpg

 

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倍

 

20161222104320373.jpg

 

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倍

 

20161222104355956.jpg

 

BI兼容性

 

基於成熟MySQL協議,Tableau可以使用

 

20161222104403897.jpg

 

運維優化  

 

配置優化

 

配置文件

 

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

最後更新:2017-05-13 08:41:40

  上一篇:go  聊聊Java中的四種單例模式
  下一篇:go  MariaDB ColumnStore初探(1):安裝、使用及測試