1、TDSQL智能运维平台智能运维平台扁鹊架构与实践扁鹊架构与实践大纲 1.扁鹊的基本介绍 2.系统架构 3.智能诊断原理与实践 4.总结1.1 扁鹊-TDSQL提供的智能运维平台 TDSQL (Tencent Distributed MySQL) 腾讯针对金融场景推出的高一致性,分布式数据库集群解决方案 数据库引擎覆盖Percona/Mariadb分支,支持InnoDB和RocksDB引擎 腾讯内部:腾讯 90% 的金融、计费、交易类业务核心 公有云、私有云私有云:覆盖政府、银行、保险、制造业、物流、电商等用户的核心系统1.2 运营过程面临的挑战 数据库节点多,出现故障人工分析效率低下 DB存在
2、风险没法提前预警和处理 用户咨询量非常大,尤其是性能相关的问题 专有云的场景下,很多客户不具备很强的故障分析能力1.3 扁鹊-智能运营平台 故障预警 故障自动诊断 历史事件剖析 优化建议 操作通过管理台自助化,经验积累 降低DBA工作复杂度,提升幸福感大纲 1.扁鹊的基本介绍 2.系统架构 3.智能诊断原理与实践 4.总结2.1 系统分层结构展示层健康报表故障/性能/优化建议分析层索引层主备切换元数据锁SQL优化事务信息主备延迟锁等待监控库慢查询空间资源会话存储层ELKDB状态活跃线程,QPS,主备延迟DB系统信息SQL采集层资源层系统资源表结构,索引,实时锁正在执行的SQL,历史SQLcpu
3、,mem,io,networkDB实例宿主机宿主机DB实例DB实例2.2 功能分解大纲 1.扁鹊的基本介绍 2.系统架构 3.智能诊断原理与实践 4.总结3.1.1 主备切换的诊断仲裁仲裁仲裁探测1.模拟客户建立连接2.对数据库进行读写操作3.将结果上报到仲裁心跳主Agent探测心跳心跳DB实例主备同步主备同步备备Agent探测Agent探测DB实例DB实例3.1.2 触发主备切换常见因素 DB意外重启 内核BUG引起系统hang住等 磁盘故障,文件系统故障等 资源竞争引起DB异常 IO耗尽 innodb并发线程耗尽 binlog写入竞争3.1.3 解决方案 采集DB的启动时间,监控DB是否重
4、启 每分钟采集show processlist信息 每秒采集宿主机各种状态信息 切换前,保存系统状态信息3.1.4 主备切换: 高并发 innodb状态日志看到活跃线程有64个(配置值就是64) Session状态看到大量查询处于执行或者等待状态3.1.5 主备切换: 大binlog事务 心跳探测线程被阻塞 大量事务已经完成了prepared,等待写入binlog3.1.6 扁鹊自动化诊断样例 主机宕机引起切换3.1.7 扁鹊自动化诊断样例 大量慢SQL引起切换3.1.8 扁鹊自动化诊断样例 由大事务(binlog写入竞争)引发的主备切换3.2 DB性能问题诊断 通常表现为用户请求耗时较长 网
5、络因素,如延迟,丢包等 SQL自身执行较慢 系统资源被其他慢SQL占用 锁等待3.2.1 SQL执行慢的诊断与优化 索引不合理,SQL写法效率低等原因导致SQL执行时耗较高 对某个慢查询使用扁鹊的SQL优化分析,得优化建议 如果是SELECT也可以建议采用读写分离3.2.2 资源饱和 当前CPU/IO等系统资源利用率彪升 利用扁鹊的会话诊断功能 将processlist汇总,按照SQL摘要进行聚合,统计出当前会话执行的TOP SQL 然后对TOP SQL给出优化建议3.2.3 锁等待 常见现象 SQL单独执行很快 负载低的环境中时快时慢 偶尔还会出现Lock wait timeout错误 常见
6、原因 事务未提交 事务时耗长锁: 事务未提交 请求响应时间 执行时间时间时间session1session210:00:00 beginbeginUpdate t1 set value=1where id=110:00:0110:00:10 锁等待时间 执行时间短 等待事务锁的时间长Update t1 set value=2where id=1(阻塞)(事务一直没结束,行锁 Lock wait timeout10:10:00 一直没释放,阻塞了session2)exceeded, tryrestarting transaction锁: 事务未提交(续) MySQL的information_sc
7、hema库下有三张表(innodb_trx,innodb_lock_waits,innodb_locks)记录了会话之间锁等待的依赖关系 分析这三张表的信息分析锁等待关系中并找出当前持有锁的领头的会话等待等待等待会话1会话2会话3会话4锁: 事务未提交(续) 扁鹊自动化诊断样例锁: 事务时耗长 事务持锁时间长 其他会话等锁时间长,执行时间并不长 等锁时间超过innodb_lock_wait_timeout会返回锁超时错误时间时间session1session210:00:00beginbeginUpdate t1 set value=1where id=110:00:0110:00:10间隔5
8、0sUpdate t1 set value=2 where id=1(阻塞)1. 执行结束,返回,时耗50s2. Lock wait timeout exceeded, tryrestarting transaction10:10:00commit锁: 事务时耗长(续) 审计日志 日志记录了SQL,时耗,源IP:PORT等信息 通过分析审计日志可以提取会话的事务信息锁: 事务时耗长(续) 扁鹊历史会话分析分析事务显示开启/分析事物持锁时间提交事务模拟器分析事务隐式开启/提交分析事物影响行数ddl/begin/setautocommit/按历史SQLIP:PORT语法解析提取事务信息分组事务中访
9、问表的方式,是否可能持有锁分析事物总时耗select/update/锁: 事务时耗长(续) 扁鹊的历史会话分析功能可时间时间session1session2以根据begin 22:00:37 T01_NOR_CUST_INFOInsert/update/delete/select for updateT01_NOR_CUST_INFO两个条件找出begincommit包含22:00:37且执行过对表T01_NOR_CUST_INFO有写操作的事务信息22:00:37updateT01_NOR_CUST_INFOWHERE ERROR: Lock waittimeout exceeded, tryrestarting transactioncommit锁: 事务时耗长(续)3.3可靠性问题可靠性问题DB当前运行良好,检查潜在风险DB体检,风险预估 系统状态 表空间分布 冗余索引死锁诊断 主备延迟 空间不足,碎片空间过大 冗余索引 锁等待诊断 慢查询分析 DB状态检查 表检查 检测报告 综合分析一段时间内DB统计信息,监控信息等对DB的健康状态评分 低评分通常表示DB可能处于风险状态4. 总结 扁鹊的基本情况 扁鹊的基本架构 诊断原理与实践 主备切换 性能问题 锁等待 可靠性问题 诊断报告腾讯云数据库客户案例腾讯云数据库客户案例