SequoiaDB 简介
安装部署
数据库实例
分布式引擎
SAC 管控中心
参考手册
常见问题及解答(FAQ)
版本信息
当前事务快照可以列出当前会话正在进行的事务信息,当前会话在每一个数据节点上正在进行的事务为一条记录。
Note:
一般每个会话在每个数据节点上只有一个事务记录。
SDB_SNAP_TRANSACTIONS_CURRENT
| 字段名 | 类型 | 描述 |
|---|---|---|
| NodeName | string | 节点名,格式为<主机名>:<服务名> |
| SessionID | int64 | 会话 ID |
| TransactionID | string | 事务 ID |
| TransactionIDSN | int64 | 事务序列号 |
| IsRollback | boolean | 事务是否处于回滚中 |
| CurrentTransLSN | int64 | 事务最后一条记录对应的 LSN 该字段可用于检查是否存在空闲事务,具体可参考查询空闲事务 |
| BeginTransLSN | int64 | 事务第一条记录对应的 LSN 该字段可用于查询最早开启的事务,当日志空间不足时,可以提交最早的事务以释放日志空间 |
| WaitLock | bson | 正在等待的锁 |
| TransactionLocksNum | int32 | 事务已经获得的锁 |
| RelatedID | string | 内部标识 |
| GotLocks | bson array | 事务已经获得的锁列表 |
Note:
当 WaitLock 没有锁对象时,表示事务没有在等待锁。
WaitLock 和 GetLocks 字段中锁对象的信息如下:
| 字段名 | 类型 | 描述 |
|---|---|---|
| CSID | int32 | 锁对象所在集合空间的 ID |
| CLID | int32 | 锁对象所在集合的 ID |
| ExtentID | int32 | 锁对象所在记录的 ID |
| Offset | int32 | 锁对象所在记录的偏移量 |
| Mode | string | 锁的类型,取值如下: IS:意向共享锁 IX:意向排他锁 S:共享锁 U:升级锁 X:排他锁 |
| Count | int32 | 锁计数器(只在 GetLocks 中存在) |
| Duration | int64 | 锁的持有或等待时间,单位为毫秒 |
锁对象每个字段取值不同表示不同的锁对象
| 锁对象 | CSID | CLID | ExtentID | Offset | 备注 |
|---|---|---|---|---|---|
| 没有锁对象 | -1 | 65535 | -1 | -1 | 一般在WaitLock为没有锁对象时,表示当前事务没有在等待锁 |
| 集合空间锁 | >= 0 | 65535 | -1 | -1 | |
| 集合锁 | >= 0 | >= 0 | -1 | -1 | |
| 记录锁 | >= 0 | >= 0 | >= 0 | >= 0 |
查看当前事务快照
> db.snapshot(SDB_SNAP_TRANSACTIONS_CURRENT)
输出结果如下:
{
"NodeName": "sdbserver:11830",
"SessionID": 89,
"TransactionID": "03e80000000001",
"IsRollback": false,
"CurrentTransLSN": -1,
"WaitLock": {},
"TransactionLocksNum": 3,
"RelatedID": "c0a81457c3500000000000000059",
"GotLocks": [
{
"CSID": 1,
"CLID": 0,
"ExtentID": 9,
"Offset": 36,
"Mode": "U",
"Count": 1,
"Duration": 1137053
},
{
"CSID": 1,
"CLID": 0,
"ExtentID": -1,
"Offset": -1,
"Mode": "IS",
"Count": 1,
"Duration": 1137053
},
{
"CSID": 1,
"CLID": 65535,
"ExtentID": -1,
"Offset": -1,
"Mode": "IS",
"Count": 1,
"Duration": 1137053
}
]
}
用户可通过对比当前事务快照下字段 CurrentTransLSN 与节点健康检测快照下字段 CurrentLSN 的值,检查当前会话是否存在长时间运行且未写入数据的空闲事务。如果取值相差过大,说明该事务为空闲事务。该类事务将占用大量数据库资源,同时导致日志空间不足,建议及时提交。具体操作步骤如下:
通过事务快照查看字段 CurrentTransLSN
> db.snapshot(SDB_SNAP_TRANSACTIONS_CURRENT, {}, {NodeName: null, TransactionID: null, CurrentTransLSN: null})
输出结果如下:
...
{
"NodeName": "sdbserver:11820",
"TransactionID": "0x00020067a74f69",
"CurrentTransLSN": 83624
}
...通过节点健康检测快照查看字段 CurrentLSN
> db.snapshot(SDB_SNAP_TRANSACTIONS_CURRENT, {}, {NodeName: null, CurrentLSN: null})
输出结果如下:
...
{
"NodeName": "sdbserver:11820",
"CurrentLSN": {
"Offset": 157288368,
"Version": 1
}
}
...
展开