集群性能监控
本文档介绍 SequoiaDB 数据库提供的集群监控功能,用于快速找到数据库实例性能和活动的统计信息。
客户端连接数
客户端连接数反映了应用系统与集群建立的连接数量,可以使用以下命令查看:
sdb -f getCoordConn.js
getCoordConn.js内容如下:
var db = new Sdb();
var nodes = db.list(7,{GroupName:"SYSCoord"},{"Group.HostName":1,"Group.Service.Name":1}).next().toObj()["Group"];
var sum = 0;
for(var i in nodes){
var node = nodes[i];
sum += new Sdb(node["HostName"],node["Service"][0]["Name"]).snapshot(6,{},{"TotalNumConnects":1}).next().toObj()["TotalNumConnects"];
}
println("集群客户端连接数:"+sum);
连接会消耗文件句柄和内存资源,并发量过大还会导致线程上下文的频繁切换。如果该指标高于预期值,表明用户请求量超过了数据库处理请求的能力;当数据节点压力不大时,可以增加协调节点提高并发量,否则需要对集群进行扩容。
数据库连接的创建是比较耗时的操作,应用程序频繁创建销毁,未关闭连接也有可能导致连接数过高,建议使用驱动程序中的数据库连接池进行连接管理,连接池允许应用程序更有效地使用和重用连接。
读写操作量
集群读写操作量连接的是集群协调节点,输出内容是整个集群的读写操作数量。
- DataRead 和 IndexRead
数据和索引的访问次数,如果指标值偏低,建议应用配置会话为读写分离模式,如果DataRead值远高于IndexRead的值,可能会话中有未通过索引检索,直接进行表扫描的查询,通过使用sdbtop工具的会话统计界面,查出DataRead高的会话, 检查该查询是否有命中的索引。其次,查看该查询的访问计划,查看用户请求在每个数据节点的索引命中情况和返回记录条数,如果在某些节点的 ScanType 为 tbscan ,则有可能是部分节点索引缺失导致未命中索引,如果各节点返回记录条数差距过大,则有可能是分区键选择不合理,导致热点数据。
- DataWrite和 IndexWrite
数据和索引的写入次数,如果指标值偏低,检查应用程序,确认能否将单条插入改写成批量插入的方式。其次如果观察到数据节点磁盘 io 偏高,建议增加集合的分片数量,将 io 压力分担到其他磁盘。或考虑使用 SSD 磁盘替换 SAS 或 SATA 盘。
副本集同步
snapshot命令可以查看当前节点副本集同步状态,命令如下:
db.snapshot(SDB_SNAP_HEALTH,{},{LSNQueSize:1,DiffLSNWithPrimary:1})
输出实例:
{
"LSNQueSize": 0,
"DiffLSNWithPrimary": 0
}
{
"LSNQueSize": 0,
"DiffLSNWithPrimary": 0
}
{
"LSNQueSize": 0,
"DiffLSNWithPrimary": 0
}
LSNQueSize: 等待同步的 LSN 队列长度
DiffLSNWithPrimary: 与主节点的 LSN 差异
通过以上两个指标,可以看出集群数据复制组间副本集数据同步的压力,如果两个指标长期较高,需要检查复制组间网络状态。
节点运行状态
snapshot命令可以查看当前节点运行状态,命令如下:
db.snapshot(SDB_SNAP_HEALTH,{},{ServiceStatus:1,SyncControl:1})
输出实例:
{
"ServiceStatus": true,
"SyncControl": false
}
{
"ServiceStatus": true,
"SyncControl": false
}
{
"ServiceStatus": true,
"SyncControl": false
}
通过以上两个指标,可以看出集群节点的运行状态,如果ServiceStatus为false,表明节点状态异常,不对外提供服务;如果SyncControl为true,表明节点正在进行数据全量同步。