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版本,未來發展潛力很大。
架構先進
支持分布式部署,充分利用多服務器多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領域又起烽煙。
原文發布時間為:2016-12-22
本文來自雲棲社區合作夥伴DBAplus
最後更新:2017-05-13 08:41:40