我们知道Trafodion是一款分布式的SQL on Hadoop的SQL引擎,底层基于HBase。Trafodion是一款Hadoop之上的HTAP型数据库,即同时支持事务型及分析型的场景于一体的数据库。其中,事务型场景主要基于底层HBase,因为HBase是一款Key-Value式数据库,特别适合于大数据量的随机读写;而分析型场景一般会基于Hive,Trafodion可以直接访问原生的Hive表,通过Trafodion自身的SQL引擎访问Hive表,可以直接绕过Hive本身通过Map Reduce走批量计算,从而大大提升了查询性能。
就事务型而言,Trafodion不但可以支持高性能的随机读写,而且支持“事务”。Trafodion中的“事务”保证通过TM实现,TM即Transaction Manager(事务管理器),Trafodion中的事务管理器是在每个Trafodion节点上有一个TM进程,因此我们又称之为DTM(分布式事务管理器),而其他很多的NoSQL数据库通常是采用单个事务管理服务器。关于Trafodion的事务管理器的介绍,我们会在后续文章单独介绍,本文我们主要介绍Trafodion自带的一个用于监控管理事务的工具dtmci。
dtmci是Trafodion提供的一款用于监视事务管理器的可执行工具,通过dtmci工具可以很容易地获取事务管理器的更详细的信息以及一些操作配置,主要功能包括:
- 获取TM的信息
- 获取事务(transactions)的信息
- TM统计分析数据
- 关闭事务
在任意一个Trafodion节点通过trafodion用户执行dtmci可以打开dtmci交互式客户端,输入”h”查看支持的命令及功能,
[trafodion@esg-n002 ~]$ dtmci
DTM Command line interface. v 3.1.0, Nov 26, 2014
DTMCI > h
DTM Command line interface. v 3.1.0, Nov 26, 2014 Help:
a | abort
: Will abort the current transaction.
b | begin
: Will begin a transaction and display the tag
disable trans[actions] [, shutdown normal|immediate]
: Disable transaction processing in DTM.
: shutdown is only provided for testing and should
: not be used. Use sqstop instead.
drain <nid> [, immediate]
: Drain transactions from a node.
: This is similar to disable but affects
: only one node.
: Immediately causes all active transactions
: in the node to be aborted.
end | commit
: Will end the current transaction
enable trans[actions]
: Enable transaction processing in DTM.
l | list [<nid>]
: Will list all transactions and their status for
: node <nid> or all nodes if none specified.
r | t | resume [<tag>]
: Will suspend the current transaction if no tag is supplied.
: if tag is specified it will resume work on the given tag
s | stats [<nid> | [reset] -j]
: Will list the current TM statistics
: If reset is specified, reset statistics after
: displaying them.
status system
: Prints system TM information
status tm [<nid>] [rmid] -j
: Status of the TM in node <nid>. Returns TM information
: for all nodes if none specified. Specifying a node gives
: RM details.
: <rmid> option sorts by rmid, default is sort by rm name.
status trans[action] [transid]
: Status of the specified transaction.
: transid may be in numeric or <node>,<sequence> format.
status regions
: Status of the transactions on the hbase regions - client side
transid [string] <transid>
: Prints transaction ID information
: Entering string option outputs (node, sequence, incarn #)
h | ? | help
: Display this help.
q | quit | exit
: Exit dtmci
下面是一些常用命令及样例输出,
//列出当前所有的事务及状态
DTMCI > list
Node 0 : No Transactions were returned.
(cid,nid,xid) Owner Full_Transid State
(0,1,21) 1,1670 4294967317 ACTIVE
Node 2 : No Transactions were returned.
//数据库系统的整体TM状态
DTMCI > status system
Lead Up Down Recov Total Active Txs
0 3 0 0 3 1
//数据库每个TM状态
DTMCI > status tm
Node LeadTM State SysRec ShutdownLevel Incarn Txns IsolTM RMs
0 true UP END RUNNING 0 0 false 0
1 false UP END RUNNING 0 1 false 0
2 false UP END RUNNING 0 0 false 0
//每个事务的详细信息
DTMCI > status trans
Node 0 : No Transactions were returned.
Transid Owner Full_Transid Joins Elapsed(sec) State Timestamp
(0,1,21) 1,1670 4294967317 0 663 ACTIVE Tue Jan 23 09:41:50 2018
Node 2 : No Transactions were returned.
//整体集群的事务详情
DTMCI > stats
Node 0:
Counts: Total = 11, Current = 0, Begins = 11, Aborts = 3, Commits = 8, TM Aborts = 2, Hung total = 0, current = 0
Txns Total 11(11.190+-17.988s) Begins 11(0.001+-0.002s)
Aborts 1(0.164+-0.000s) Commits 8(1.814+-3.193s)
XA start 11(0.000+-0.000s) end 11(0.000+-0.000s)
prepare 8(0.000+-0.000s) ax_reg 0(0.000+-0.000s)
commit 5(0.000+-0.000s) rollback 3(0.000+-0.000s)
RM Sends 38(0.000+-0.000s) Partic 0 Non-partic 0
Txn Pool: Inuse 0 Free 5 SSLow 5 SSHigh 1000 Max 5000
Allocs: new 5(0/sec) frees 6(0/sec)
Deallocs: frees 11(0/sec) deletes 0(0/sec)
Thrd Pool: Inuse 0 Free 1 SSLow 1 SSHigh 100 Max 100
Allocs: new 1(0/sec) frees 66(0/sec)
Deallocs: frees 67(0/sec) deletes 0(0/sec)
RMMsg Pool: Inuse 0 Free 0 SSLow 10 SSHigh 10000 Max 10000
Allocs: new 0(0/sec) frees 0(0/sec)
Deallocs: frees 0(0/sec) deletes 0(0/sec)
,Node 1:
Counts: Total = 21, Current = 1, Begins = 21, Aborts = 3, Commits = 17, TM Aborts = 0, Hung total = 0, current = 0
Txns Total 20(363.592+-1568.428s) Begins 20(0.001+-0.002s)
Aborts 3(0.030+-0.002s) Commits 17(1.037+-2.100s)
XA start 20(0.000+-0.000s) end 20(0.000+-0.000s)
prepare 17(0.000+-0.000s) ax_reg 0(0.000+-0.000s)
commit 16(0.000+-0.000s) rollback 3(0.000+-0.000s)
RM Sends 76(0.000+-0.000s) Partic 0 Non-partic 0
Txn Pool: Inuse 1 Free 4 SSLow 5 SSHigh 1000 Max 5000
Allocs: new 5(0/sec) frees 16(0/sec)
Deallocs: frees 20(0/sec) deletes 0(0/sec)
Thrd Pool: Inuse 0 Free 1 SSLow 1 SSHigh 100 Max 100
Allocs: new 1(0/sec) frees 155(0/sec)
Deallocs: frees 156(0/sec) deletes 0(0/sec)
RMMsg Pool: Inuse 0 Free 0 SSLow 10 SSHigh 10000 Max 10000
Allocs: new 0(0/sec) frees 0(0/sec)
Deallocs: frees 0(0/sec) deletes 0(0/sec)
,Node 2:
Counts: Total = 12, Current = 0, Begins = 12, Aborts = 2, Commits = 10, TM Aborts = 0, Hung total = 0, current = 0
Txns Total 12(5.096+-4.410s) Begins 12(0.001+-0.001s)
Aborts 2(0.014+-0.004s) Commits 10(1.709+-2.531s)
XA start 12(0.000+-0.000s) end 12(0.000+-0.000s)
prepare 10(0.000+-0.000s) ax_reg 0(0.000+-0.000s)
commit 10(0.000+-0.000s) rollback 2(0.000+-0.000s)
RM Sends 46(0.000+-0.000s) Partic 0 Non-partic 0
Txn Pool: Inuse 0 Free 5 SSLow 5 SSHigh 1000 Max 5000
Allocs: new 5(0/sec) frees 7(0/sec)
Deallocs: frees 12(0/sec) deletes 0(0/sec)
Thrd Pool: Inuse 0 Free 1 SSLow 1 SSHigh 100 Max 100
Allocs: new 1(0/sec) frees 115(0/sec)
Deallocs: frees 116(0/sec) deletes 0(0/sec)
RMMsg Pool: Inuse 0 Free 0 SSLow 10 SSHigh 10000 Max 10000
Allocs: new 0(0/sec) frees 0(0/sec)
Deallocs: frees 0(0/sec) deletes 0(0/sec)
//具体某个transaction id的详情
DTMCI > transid 4294967317
Transid Node Seq # Incarn TX Flags TT Flags
(1,0,21) 0 21 0 0x0 0x0
Version Checksum Timestamp
1 403 1516671710735
//关闭事务功能
DTMCI > disable trans
//启用事务功能
DTMCI > enable trans
//查看当前有哪些region上有事务
DTMCI > status regions
No Regions Returned from HBASETM_REQUESTREGIONINFO
注:
使用”disable trans”表示关闭事务功能,关闭之后系统将无法开启一个事务,如执行begin命令将会报错,
SQL>begin;
*** ERROR[8604] Transaction subsystem TMF returned error 86 while starting a transaction. [2018-01-23 10:02:00]
此时只有使用”enable trans”重启开启事务功能,才可以恢复开启事务的功能,
SQL>begin;
--- SQL operation complete.