课程简介
本课程是基于金融行业技术实践和业务应用场景,结合当前企业级应用场景进行综合性课程设计。从专业知识,专业技能,通用技能多维度全面培养数据库优化人才的的综合能力。
目标收益
基于金融行业大规模应用为基础的真实架构案例驱动教学;
大规模分布式/国产化数据库架构设计与真实案例实践;
构筑顶级能力维度模型,带你快速成长为数据化转型所需的复合型人才。
培训对象
研发人员 数据库工程师等
课程大纲
SQL优化本质和优化技术(一方面阐述分布式数据库架构特点和优化理论,另一方面着重分析几款分布式数据库技术共同点和不同点(通过案例分析讲解);3小时 |
理解SQL在分布式数据库下查询的工作原理 SQL查询的执行过程 分布式数据库引擎解析、执行SQL语句 SQL优化本质和优化技术 数据访问方式效率的对比:全表扫描与索引扫描 多表连接的执行计划、适用场景与优劣势 嵌套循环 合并连接 哈希连接 三种表连接案例讲解(从业务场景分析) 分析和诊断SQL查询性能 SQL调优方法论-执行计划深度分析 从案例中辨别低效执行计划 优化SQL查询语句 选择合适的连接类型 避免使用子查询、改用连接Join(那些场景下) 避免使用复杂的查询(多表关联性能为什么差) 索引技术:应用场景以及对业务数据查询的影响 索引类型和工作原理 分析索引覆盖 避免过度索引 定期维护索引 案例讲解 索引碎片导致执行计划问题分析和解决 理解SQL的执行过程与性能瓶颈 并发控制和锁的实现方式 理解分布式数据库并发机制 隔离级别对分布式数据库影响 减少锁的竞争,优化事务的粒度 乐观锁实现策略(那些场景使用) 针对不同数据库特定优化策略 |
SQL性能瓶颈分析和解决(通过执行计划分解不同分布式数据库使用方式,能快速掌握分析辨识低效的SQL执行问题症状) 3小时 |
SQL性能问题定位以及性能问题来源 用户SQL写法 - 遵循开发规约 代价模型缺陷 - 执行计划 统计信息不准确 数据库物理设计:决定查询性能 系统负载:影响整体吞吐率,影响单sql rt 客户端路由 - 远程执行 SQL调优方法 针对单条 SQL 执行的性能调优 单表访问场景:索引、排序或聚合、分区、分布式并行 多表访问场景:连接顺序、连接算法、分布式并行、 查询改写 针对吞吐量的性能优化 优化慢SQL 均衡SQL的请求流量资源 如何通过执行计划字段辨识低效的SQL 查看各阶段耗时 调优基本流程分析步骤 通过全局SQL审计表、 SQL Trace 、Profile等查看SQL 执行信息 ,初步查找SQL请求的流程中导致耗时或消耗资源(如内存、 磁盘IO等)的 SQL 单条SQL的执行性能往往与该SQL的执行计划相关,执行计划的分析是最重要的手段。通过执行EXPALIN命令查看优化器针对给定 SQL 生成的逻辑执行计划 ,确定可能的调优方向 找到具体的慢SQL,为了使某些 SQL 的执行时间或资源消耗符合预期 , 常见的优化方式如下: 对SQL做等价改写生成最佳执行计划 针对多表访问的SQL,还需要关注多表间的联接问题 , 通过优化访问路径、联接顺序和联接算法等实现查询优化 |
优化实践(通过金融客户某业务系统,针对调优方式进行综合阐述,并模拟相关案例进行输出说明) 2小时 |
实际案例讲解 分布式兼容与限制 分布式表连接 分布式事务 部署服务器需要注意的事项总结 最佳实践 Explain解读 Trace信息 分布式更新操作原理 跨节点分布式查询优化 逻辑优化、条件下推、隔离 引擎如何优雅处理海量SQL逻辑 分布式事务实现 优化实践 数据库优化方法论 全链路性能调优实战 业务模型优化 先整体再局部 先解阻塞性问题 热点SQL优化 慢SQL优化 减少数据访问次数(减少磁盘访问) 返回更少数据(减少网络传输或磁盘访问) 减少交互次数(减少网络传输) 减少服务器CPU开销 利用更多资源(增加资源) 联接顺序 索引回表 分区表性能诊断 数据表优化 核心数据表设计 字段类型设计 对表逻辑更新 添加创建和修改时间列 乐观锁还是悲观锁,选择依据是什么 如何查找慢查询:为什么会对业务造成危害 优化大表总要性:多大是最优的 为什么不要使用大字段类型 为什么要限制DML操作的数据大小 综合优化案例讲解和使用 构造一个复杂的查询SQL(如包含多表关联、子查询、cte、filesort、临时表等),讲解分析方法、SQL改写方法 SQL优化案例实践 条件查询索引选择性导致查询慢 统计信息过期或数据空快碎片多导致执行计划错误 阻塞、死锁引发SQL超时 模拟数据库乐观锁实现机制,提高并发和吞吐量 分页查询如何提高性能 非分片键查询引发SQL性能问题 分布式数据库查询数据优化(流式处理模型和通用处理模型) 网关下推技术:分布式数据库场景下对SQL处理优化, 关联数据表不一致、字段类型不一致导致数据库性能问题 in + order by优化 范围查询阻断,后续字段不能走索引 |
通过模拟银行转账和互金数据库设计两个案例贯穿落地实践(通过java springboot程序模拟转账并发) 4小时 |
金融转账一致性测试实战 电商平台数据库架构和表设计方案 数据库测试实践案例 需求分析与规划(需求收集/风险评估) 测试设计(测试工具/准备数据) 初步测试(功能验证/性能初步评估) 分析与优化(问题分析/优化方案) 再次测试(用户体验) 持续监控与维护(性能健康/定期检查) 数据库异常诊断(慢查询、并发、锁、阻塞等) 测试结合要点 表设计(分表依据) 锁设计(乐观锁/悲观锁) 事物设计(如何控制事物大小) 索引设计(最佳设计原则) 连接池设计(使用连接池要注意事项) SQL优化(小表变大表/改写) 服务器性能(CPU/IO/内存/NUMA) 网络性能 参数配置 监控 关键问题 数据库性能分析问题 SQL影响:慢查询和慢查询收集工具 SQL事务监控 SQL阻塞监控 CPU抖动:Prometheus+zabbix、Top监控 通过慢日志或监控平台获取某一个时刻SQL 业务并发访问问题 业务压力突增全链路监控 界定每个部分是否有问题 定位问题所在 性能问题:小数据量下性能良好,但在大数据量下性能急剧下降 基准测试:在小数据量下进行基准测试,记录性能指标。 压力测试:使用工具如 JMeter、LoadRunner 进行压力测试,模拟大数据量和高并发场景。 长时间测试:进行长时间的稳定性测试,观察系统在长时间高负载下的表现。 并发问题:在单用户或少量用户情况下表现良好,但在多用户并发访问时出现死锁、数据不一致等问题 并发测试:使用工具模拟多用户并发访问,观察系统的响应时间和错误率。 事务测试:特别关注涉及多个事务的操作,确保事务的隔离性和一致性。 数据一致性问题:数据在不同模块之间不一致,尤其是在分布式系统中。 数据校验:在不同模块之间进行数据校验,确保数据的一致性。 日志分析:分析系统日志,查找数据不一致的原因。 事务管理:确保事务的正确管理和回滚机制。 异常处理问题:异常处理不当,导致系统崩溃或数据丢失。 异常测试:模拟各种异常情况,如网络中断、数据库连接失败等。 日志记录:确保所有异常都被记录下来,便于后续分析。 恢复测试:测试系统的恢复机制,确保系统在异常后能够恢复正常运行。 资源泄漏问题:内存泄漏、文件句柄泄漏等。 内存分析:使用工具如Valgrind、VisualVM 进行内存分析。 文件句柄检查:检查系统中打开的文件句柄数量,确保没有泄漏。 性能监控:持续监控系统的资源使用情况,及时发现异常。 日志和监控问题:日志记录不完整,监控机制不健全 日志审计:定期审计日志文件,确保日志记录的完整性和准确性。 监控工具:部署性能监控工具,持续监控系统的运行状态。 报警机制:设置合理的报警阈值,及时发现和处理异常。 分布式事务处理能力 分布式存储能力 分布式事务能力 数据可靠性 数据分片操作 服务高可用 水平扩展能力 数据库测试工程实施方法论和阶段性优化概述 SQL优化应用场景以及策略实践 慢查询 连接查询性能问题 子查询性能问题 过度使用通配符%的 LIKE 查询 大批量插入或更新 频繁的重复查询 过度使用分组和聚合函数 大量重复数据的查询 过度使用 OR 条件的查询 大型数据分页查询 使用不必要的列 频繁更新的表 未使用索引的外键约束 大型查询的分批处理 未使用存储过程的重复逻辑 未使用合适的数据类型 大量写操作导致的锁竞争 频繁使用数据库函数和表达式 未使用合适的索引策略 大量数据的联合操作 大量数据的联合操作 数据分布不均匀的索引 过度使用子查询 未使用批量操作 过度使用内存表 缺乏定期统计和优化 未使用合适的数据库引擎 使用强制类型转换 未优化的长事务 未优化的存储过程 未考虑DB服务器配置和硬件资源 |
SQL优化本质和优化技术(一方面阐述分布式数据库架构特点和优化理论,另一方面着重分析几款分布式数据库技术共同点和不同点(通过案例分析讲解);3小时 理解SQL在分布式数据库下查询的工作原理 SQL查询的执行过程 分布式数据库引擎解析、执行SQL语句 SQL优化本质和优化技术 数据访问方式效率的对比:全表扫描与索引扫描 多表连接的执行计划、适用场景与优劣势 嵌套循环 合并连接 哈希连接 三种表连接案例讲解(从业务场景分析) 分析和诊断SQL查询性能 SQL调优方法论-执行计划深度分析 从案例中辨别低效执行计划 优化SQL查询语句 选择合适的连接类型 避免使用子查询、改用连接Join(那些场景下) 避免使用复杂的查询(多表关联性能为什么差) 索引技术:应用场景以及对业务数据查询的影响 索引类型和工作原理 分析索引覆盖 避免过度索引 定期维护索引 案例讲解 索引碎片导致执行计划问题分析和解决 理解SQL的执行过程与性能瓶颈 并发控制和锁的实现方式 理解分布式数据库并发机制 隔离级别对分布式数据库影响 减少锁的竞争,优化事务的粒度 乐观锁实现策略(那些场景使用) 针对不同数据库特定优化策略 |
SQL性能瓶颈分析和解决(通过执行计划分解不同分布式数据库使用方式,能快速掌握分析辨识低效的SQL执行问题症状) 3小时 SQL性能问题定位以及性能问题来源 用户SQL写法 - 遵循开发规约 代价模型缺陷 - 执行计划 统计信息不准确 数据库物理设计:决定查询性能 系统负载:影响整体吞吐率,影响单sql rt 客户端路由 - 远程执行 SQL调优方法 针对单条 SQL 执行的性能调优 单表访问场景:索引、排序或聚合、分区、分布式并行 多表访问场景:连接顺序、连接算法、分布式并行、 查询改写 针对吞吐量的性能优化 优化慢SQL 均衡SQL的请求流量资源 如何通过执行计划字段辨识低效的SQL 查看各阶段耗时 调优基本流程分析步骤 通过全局SQL审计表、 SQL Trace 、Profile等查看SQL 执行信息 ,初步查找SQL请求的流程中导致耗时或消耗资源(如内存、 磁盘IO等)的 SQL 单条SQL的执行性能往往与该SQL的执行计划相关,执行计划的分析是最重要的手段。通过执行EXPALIN命令查看优化器针对给定 SQL 生成的逻辑执行计划 ,确定可能的调优方向 找到具体的慢SQL,为了使某些 SQL 的执行时间或资源消耗符合预期 , 常见的优化方式如下: 对SQL做等价改写生成最佳执行计划 针对多表访问的SQL,还需要关注多表间的联接问题 , 通过优化访问路径、联接顺序和联接算法等实现查询优化 |
优化实践(通过金融客户某业务系统,针对调优方式进行综合阐述,并模拟相关案例进行输出说明) 2小时 实际案例讲解 分布式兼容与限制 分布式表连接 分布式事务 部署服务器需要注意的事项总结 最佳实践 Explain解读 Trace信息 分布式更新操作原理 跨节点分布式查询优化 逻辑优化、条件下推、隔离 引擎如何优雅处理海量SQL逻辑 分布式事务实现 优化实践 数据库优化方法论 全链路性能调优实战 业务模型优化 先整体再局部 先解阻塞性问题 热点SQL优化 慢SQL优化 减少数据访问次数(减少磁盘访问) 返回更少数据(减少网络传输或磁盘访问) 减少交互次数(减少网络传输) 减少服务器CPU开销 利用更多资源(增加资源) 联接顺序 索引回表 分区表性能诊断 数据表优化 核心数据表设计 字段类型设计 对表逻辑更新 添加创建和修改时间列 乐观锁还是悲观锁,选择依据是什么 如何查找慢查询:为什么会对业务造成危害 优化大表总要性:多大是最优的 为什么不要使用大字段类型 为什么要限制DML操作的数据大小 综合优化案例讲解和使用 构造一个复杂的查询SQL(如包含多表关联、子查询、cte、filesort、临时表等),讲解分析方法、SQL改写方法 SQL优化案例实践 条件查询索引选择性导致查询慢 统计信息过期或数据空快碎片多导致执行计划错误 阻塞、死锁引发SQL超时 模拟数据库乐观锁实现机制,提高并发和吞吐量 分页查询如何提高性能 非分片键查询引发SQL性能问题 分布式数据库查询数据优化(流式处理模型和通用处理模型) 网关下推技术:分布式数据库场景下对SQL处理优化, 关联数据表不一致、字段类型不一致导致数据库性能问题 in + order by优化 范围查询阻断,后续字段不能走索引 |
通过模拟银行转账和互金数据库设计两个案例贯穿落地实践(通过java springboot程序模拟转账并发) 4小时 金融转账一致性测试实战 电商平台数据库架构和表设计方案 数据库测试实践案例 需求分析与规划(需求收集/风险评估) 测试设计(测试工具/准备数据) 初步测试(功能验证/性能初步评估) 分析与优化(问题分析/优化方案) 再次测试(用户体验) 持续监控与维护(性能健康/定期检查) 数据库异常诊断(慢查询、并发、锁、阻塞等) 测试结合要点 表设计(分表依据) 锁设计(乐观锁/悲观锁) 事物设计(如何控制事物大小) 索引设计(最佳设计原则) 连接池设计(使用连接池要注意事项) SQL优化(小表变大表/改写) 服务器性能(CPU/IO/内存/NUMA) 网络性能 参数配置 监控 关键问题 数据库性能分析问题 SQL影响:慢查询和慢查询收集工具 SQL事务监控 SQL阻塞监控 CPU抖动:Prometheus+zabbix、Top监控 通过慢日志或监控平台获取某一个时刻SQL 业务并发访问问题 业务压力突增全链路监控 界定每个部分是否有问题 定位问题所在 性能问题:小数据量下性能良好,但在大数据量下性能急剧下降 基准测试:在小数据量下进行基准测试,记录性能指标。 压力测试:使用工具如 JMeter、LoadRunner 进行压力测试,模拟大数据量和高并发场景。 长时间测试:进行长时间的稳定性测试,观察系统在长时间高负载下的表现。 并发问题:在单用户或少量用户情况下表现良好,但在多用户并发访问时出现死锁、数据不一致等问题 并发测试:使用工具模拟多用户并发访问,观察系统的响应时间和错误率。 事务测试:特别关注涉及多个事务的操作,确保事务的隔离性和一致性。 数据一致性问题:数据在不同模块之间不一致,尤其是在分布式系统中。 数据校验:在不同模块之间进行数据校验,确保数据的一致性。 日志分析:分析系统日志,查找数据不一致的原因。 事务管理:确保事务的正确管理和回滚机制。 异常处理问题:异常处理不当,导致系统崩溃或数据丢失。 异常测试:模拟各种异常情况,如网络中断、数据库连接失败等。 日志记录:确保所有异常都被记录下来,便于后续分析。 恢复测试:测试系统的恢复机制,确保系统在异常后能够恢复正常运行。 资源泄漏问题:内存泄漏、文件句柄泄漏等。 内存分析:使用工具如Valgrind、VisualVM 进行内存分析。 文件句柄检查:检查系统中打开的文件句柄数量,确保没有泄漏。 性能监控:持续监控系统的资源使用情况,及时发现异常。 日志和监控问题:日志记录不完整,监控机制不健全 日志审计:定期审计日志文件,确保日志记录的完整性和准确性。 监控工具:部署性能监控工具,持续监控系统的运行状态。 报警机制:设置合理的报警阈值,及时发现和处理异常。 分布式事务处理能力 分布式存储能力 分布式事务能力 数据可靠性 数据分片操作 服务高可用 水平扩展能力 数据库测试工程实施方法论和阶段性优化概述 SQL优化应用场景以及策略实践 慢查询 连接查询性能问题 子查询性能问题 过度使用通配符%的 LIKE 查询 大批量插入或更新 频繁的重复查询 过度使用分组和聚合函数 大量重复数据的查询 过度使用 OR 条件的查询 大型数据分页查询 使用不必要的列 频繁更新的表 未使用索引的外键约束 大型查询的分批处理 未使用存储过程的重复逻辑 未使用合适的数据类型 大量写操作导致的锁竞争 频繁使用数据库函数和表达式 未使用合适的索引策略 大量数据的联合操作 大量数据的联合操作 数据分布不均匀的索引 过度使用子查询 未使用批量操作 过度使用内存表 缺乏定期统计和优化 未使用合适的数据库引擎 使用强制类型转换 未优化的长事务 未优化的存储过程 未考虑DB服务器配置和硬件资源 |