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


