使用靠山
公司近期上线了一个新应用,底层数据库采用了国产的漫衍式数据库 – SequoiaDB。
由于需要将 SequoiaDB 集群纳入到公司的整个监控系统中,以是需要对 SequoiaDB 的状态、性能指标等信息网络起来,然后提供监控系统使用。
SequoiaDB 数据库自己提供了一个图形化的监控界面 – SAC,然则内里的监控项,和我们公司已往常用的指标有很大收支。以是在咨询了 SequoiaDB 的相关职员后,决议自己开发一套监控程序。
SequoiaDB 存储引擎的监控
在 SequoiaDB 数据库,存在两个大的系统,一个是盘算层,像我们就是使用了 MySQL 实例,另外一个就是 SequoiaDB 的漫衍式存储层,也是整个数据库对性能影响最大的部门。
关于 MySQL 的监控,公司本来就已经存在一整套完整的监控程序,以是这块就不需要再分外的开发了。然则对于 SequoiaDB 底层的漫衍式,照样异常有需要将相关指标网络起来的。
SequoiaDB 在监控系统上,着实做得照样对照完整的,只是在展现方式上,还需要再打磨一下。SequoiaDB 底层漫衍式的所有运行信息,用户都可以通过snapshot,或者是list 下令获取。
我从 SequoiaDB 的技术职员中领会到,着实像 SAC,或者 sdbtop 等这种 SequoiaDB 官方提供的监控工具,实际上也是基于 snapshot 和 list 下令开发。人人可以通过查阅官网信息中心领会更多的方式说明,snapshot 方式先容 和 list 方式先容。
2.1 SequoiaDB 的快照说明
在 SequoiaDB 存储引擎中,若是你要查看运行状况,可以通过快照来获取信息。
SequoiaDB 的快照下令异常简答,若是使用它提供的 sdb 客户端,可以这么来执行,例如查看整个集群中,每个 table 的使用情形:
> db.snapshot(SDB_SNAP_COLLECTIONS)
{
"Name": "foo.bar",
"UniqueID": 4294967297,
"Details": [
{
"GroupName": "group1",
"Group": [
{
"ID": 0,
"LogicalID": 0,
"Sequence": 1,
"Indexes": 1,
"Status": "Normal",
"TotalRecords": 1,
"TotalDataPages": 1,
"TotalIndexPages": 2,
"TotalLobPages": 0,
"TotalDataFreeSpace": 65432,
"TotalIndexFreeSpace": 65486,
"TotalDataRead": 1,
"TotalIndexRead": 0,
"TotalDataWrite": 1,
"TotalIndexWrite": 1,
"TotalUpdate": 0,
"TotalDelete": 0,
"TotalInsert": 1,
"TotalSelect": 1,
"TotalRead": 1,
"TotalWrite": 1,
"TotalTbScan": 1,
"TotalIxScan": 0,
"ResetTimestamp": "2020-05-26-13.42.20.163109",
"NodeName": "datanode:11820"
}
]
}
]
}
人人从返回的效果就能够领会,首先 SequoiaDB 的漫衍式存储引擎,在获取快照时,它返回的效果花样为 JSON ,这个和我们已往使用 Oracle 或者 MySQL 数据异常的差别,可能有一些同伙在开始时不大顺应。然则当你习惯了JSON 的天真结构后,你会打开一片新的大陆 。
我给人人演示的例子中,是查询整个集群表级的快照信息。它能够让人人清晰地领会每个table 在各个 group 上的漫衍,以及它对应的数据读,索引读这类要害信息的瞬时绝对值。固然,若是人人直接这么查看信息,估量人人眼睛都要看瞎,以是在后续的工具跟进上,SequoiaDB 数据库还需要多多起劲的。
2.2 SequoiaDB SQL 快速处置
若是人人已经在使用SequoiaDB 存储引擎提供的 snapshot 和 list 功效了,那么你是否也发现了一个问题,sdb 客户端提供的 api 下令,执行起来的盘算能力着实太弱了,例如我要关联把 SDB_SNAP_SESSIONS 快照(http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1479173713-edition_id-304)和 SDB_SNAP_TRANSACTIONS 快照(http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1479173720-edition_id-304) 关联起来,查看当前 SequoiaDB 存储引擎中,到底有哪些事务在守候锁。这个时刻,单纯使用 api 就会痛苦万分,由于要自己手工编写一个关联程序。我信赖大部门的 DBA 同伙都市眷念那些单纯使用 SQL 下令的时光。
通过自己不停的起劲(翻官网信息中心),终于找到了一种优雅的方式来解决,就是 sql 语法的监控视图 (http://doc.sequoiadb.com/cn/sequoiadb-cat_id-1559546719-edition_id-304)。
,
联博统计
www.th666888111.com采用以太坊区块链高度哈希值作为统计数据,联博以太坊统计数据开源、公平、无任何作弊可能性。联博统计免费提供API接口,支持多语言接入。
,
例如适才的提出的问题,就可以通过这个 sql 下令获取信息:
> db.exec("select trans.NodeName as node, session.LastOpType as lastOpType, session.LastOpInfo as lastOpInfo from $SNAPSHOT_TRANS as trans inner join $SNAPSHOT_SESSION as session on trans.RelatedID = session.RelatedID where trans.WaitLock.CSID is not null ")
{
"node": "datanode:11820",
"lastOpType": "GETMORE",
"lastOpInfo": "ContextID:297, NumToRead:-1"
}
{
"node": "datanode:11820",
"lastOpType": "UPDATE",
"lastOpInfo": ""
}
SequoiaDB 存储引擎中这个简易版的 SQL 语法剖析,对于一样平常的操作和运维监控来说,已经到达了事半功倍的效果了。
2.3 开发语言选择
SequoiaDB 存储引擎,支持多种开发语言获取引擎的监控信息,包罗常见的:Java、PHP、Python、C++、C等等。人人在开发时,可以在 SequoiaDB 官网中下载对应的驱动包,在开发和编译时,将 SequoiaDB 的驱动包加入到 ClassPath 就可以了。
对于我小我私家来说,虽然 Java 很香,然则我照样选择了 REST 接口作为我的程序与 SequoiaDB 引擎的交互方式。REST 接口虽然不像 Driver 驱动使用那么便利,然则它胜在脱离语言与环境的要求,我可以在任何地方调用它,而且获得的效果都是一样的。
引玉抛砖引玉的Demo程序
为了给人人演示,我基于 SequoiaDB 提供的 REST 接口,使用 Python 语言做了一个能够实时监控 SequoiaDB 中某张表的数据读、写情形的小程序,算是回馈 SequoiaDB 社区的小孝敬。
程序的源码可以从:
https://github.com/yuki0703/Demo
Github项目中获取。
程序的逻辑异常简朴,就是通过 SequoiaDB 提供的 REST 接口,通过 SequoiaDB 的 SQL 语法中的监控视图方式,获取某张表的快照信息,然后通过盘算1秒以内的数值差距,得出该表每秒钟所执行数据操作。
程序的 help 信息如下:
SequoiaDB Monitor
optional arguments:
-h, --help show this help message and exit
--host HOST coord host
-u USERNAME username
-p PASSWORD password
-t TABLE table name
监控 SequoiaDB 某张表的效果如下:
后记
整理来看,SequoiaDB 所提供的接口照样很厚实的,然则在可视化监控界面上,还需要多多起劲,能够直接提供对接现在市面上大部门的监控系统,那样就加倍完美了。然则不管怎么说,能够做出一款属于国人自己的漫衍式数据库,照样异常值得人人佩服和学习的。
共勉之!