单机性能监控

    在 SequoiaDB 中,用户可以使用[快照]命令进行简单监控。 快照命令中与数据库单机性能相关的快照类型有如下几种:

    • 数据库快照:数据库节点级别的统计信息,反映了数据库会话状态,网络通讯流量,以及当前实例启动以来各类操作的计数
    • 事务快照:数据库节点中正在运行的事务状态,包括事务执行状态,持有及等待的锁信息

    热点会话

    • 工具可以查看当前热点会话列表,命令如下:

    • 进入 sdbtop 统计界面后,输入s,进入会话统计界面;输入两次TAB键,切换到平均值模式;输入D并输入排序的列,统计界面将以输入的列降序排序,列出热点会话。

      例如:输入排序的列输入DataRead,统计界面动态展示当前节点数据读最高的若干会话。

      1. displayMode: AVERAGE Sessions snapshotModeInput: NULL
      2. hostname: localhost filtering Number: 0
      3. servicename: 11810 sortingWay: NULL sortingField: NULL
      4. usrName: NULL Refresh: F5, Quit: q, Help: h
      5. SessionID TID Type Name QueueSize ProcessEventCount Contexts DataRead IndexRead
      6. ------------------------------ -------- ------------------ ------------------------------ ---------- ------------------ --------------- -------------- ---------------
      7. 1 1 2252 Task DATASYNC-JOB-D 0 1 [] 2 0
      8. 2 1 2251 Task DATASYNC-JOB-D 0 1 [] 1 0
    • snapshot命令可以查看当前节点各类连接数,命令如下:

      1. db.snapshot(SDB_SNAP_DATABASE);
    • 输出实例

      1. {
      2. ……
      3. "CurrentActiveSessions": 19,
      4. "CurrentIdleSessions": 9,
      5. "CurrentSystemSessions": 12,
      6. "CurrentTaskSessions": 5,
      7. ……
      8. }
    • 活动连接数反映了当前节点的任务数量。通过该类指标,可以评估当前节点的系统任务和用户任务的运行负载。

      • CurrentActiveSessions:活动会话数量,该值记录了当前正在运行和阻塞的任务数量,包括系统任务和用户任务

      • CurrentIdleSessions:非活动会话数量,由于线程的创建和销毁开销是巨大的,将使用完的会话线程保存在线程池中进行复用,减少了这些不必要的开销,非活动会话指的就是保存在线程池中的空闲会话线程

      • CurrentSystemSessions:系统会话数量,该值记录了当前正在运行和阻塞的任务数量,不包括用户任务

      • CurrentTaskSessions:后台处理任务数量,返回值中Type为Task的任务

    读写操作量

    • 当前节点从启动实例以来,对数据库的各类操作的计数器,这些数字将随着时间的推移而增长

      • TotalDataRead, TotalIndexRead, TotalDataWrite, TotalIndexWrite: 数据和索引读写计数,各类操作计数记录读取或写入操作,访问数据或索引的次数。重点反映数据库对用户请求的实际执行情况。如果读指标 TotalDataRead 远大于 TotalIndexRead,表明查询是通过表扫描检索数据,需对比查询条件和已有索引是否匹配,或者添加新的索引。

      • TotalRead, TotalSelect, TotalUpdate, TotalDelete, TotalInsert: 各类请求操作计数,各类操作计数记录用户读写请求的次数,重点反映数据库接收到用户的各类请求。如果读指标 TotalRead 与 TotalSelect 相当,表明查询命中效率较高,读取性能最好,否则可能执行表扫描。其中,TotalInsert, TotalUpdate与TotalDelete的值包含ReplInsert, ReplUpdate和ReplDelete。

      • TotalReadTime, TotalWriteTime:读写操作耗时,记录用户读写请求的耗时。

    • snapshot命令可以查看当前节点副本集同步性能,命令如下:

      1. db.snapshot(SDB_SNAP_DATABASE);
    • 输出实例

      1. {
      2. ……
      3. "ReplUpdate": 0,
      4. "ReplDelete": 0,
      5. "ReplInsert": 0
      6. "replNetIn": 0,
      7. "replNetOut": 0,
      8. ……
      9. }
    • ReplUpdate, ReplDelete, ReplInsert: 主节点写操作同步至备节点计数,各类写操作计数记录副本同步写操作数量。节点写入操作量大时,该值会同时增加。

    • replNetIn, replNetOut: 主节点写操作同步至备节点网络流量信息,重点关注备节点上的replNetIn和主节点的replNetOut,网络带宽压力大时,可以看出副本同步占用的带宽比例。

    网络流量

    • snapshot命令可以查看当前节点各类网络流量,命令如下:

    • 输出实例

      1. {
      2. ……
      3. "svcNetIn": 546,
      4. "svcNetOut": 20495,
      5. "shardNetOut": 46310,
      6. ……
      7. }
    • shardNetIn, shardNetOut: 节点分区服务占用的网络流量。网络带宽压力大时,可以看出分区服务占用的带宽比例。

    • snapshot命令可以查看当前节点资源调度使用情况,命令如下:

    • 输出实例

      1. {
      2. ……
      3. "Run": 0,
      4. "Wait": 0,
      5. ……
      6. }

      该指标只有开启了资源调度功能才有效,该类值记录了本节点上的任务运行情况,判断节点的任务执行情况。

    • Run: 当前正在运行的任务数量,该指标是实时值,最大值受节点配置参数 svcmaxconcurrency 的限制

    • Wait: 当前处于等待队列的任务数量,当节点上正在运行的任务数量达到最大值是,后续的任务需要排队等待,该值反映了排队等待的任务数

    锁相关

    • snapshot命令可以查看当前节点资源调度使用情况,命令如下:

    • 输出实例

      1. {
      2. ……
      3. "WaitLock": {
      4. "CSID": -1,
      5. "CLID": 65535,
      6. "recordID": -1,
      7. "recordOffset": -1
      8. },
      9. "TransactionLocksNum": 3,
      10. "GotLocks": [
      11. {
      12. "CSID": 1,
      13. "CLID": 0,
      14. "recordID": -1,
      15. "recordOffset": -1
      16. }
      17. ],
      18. ……
      19. }
    • WaitLock: 事务等待获取的锁

    • GotLocks: 事务持有的锁