1、OracleOracle数据库监控数据库监控主讲:kevin.zhang问题发现及解决方法1p 性能监控的必要性p 数据库常见问题分析p 调优工具的历史变迁p 诊断的六种方法p 监控系统设计p 问题及讨论讨论点2监控的必要性p是否稳定?p实时状态?p重复故障?p是否扩展?p是否安全?3DBA工作现状故障无影无踪,问题得不到根本解决故障无影无踪,问题得不到根本解决被动处理被动处理被动的等待故障的发生,然后解决问题被动的等待故障的发生,然后解决问题扩展无评估扩展无评估业务增长,数据库出现瓶颈,但缺乏扩展评估的依据业务增长,数据库出现瓶颈,但缺乏扩展评估的依据 重复工作重复工作 处理重复而简单的故障
2、,时间总不够用处理重复而简单的故障,时间总不够用束手无措束手无措故障无影无踪,问题得不到根本解决故障无影无踪,问题得不到根本解决4数据库常见问题分析p系统问题p程序问题p数据库问题5CPU瓶颈vmstat -n 3sar -u 2 10sar -q 2 10较小的内存sga_targetpga_aggregate_targetMemory_target(11g) I/0吞吐能力iostatsar d 2 10vmstat - wa I/O等待严重系统问题系统问题6 应用程序问题 频繁的建立连接 大量的SQL软,硬解析 session_cached_cursors避免软解析 Value bind
3、 避免硬解析 并发连接问题 过多并发操作,长时间占用共享资源,导致其他会话无法得到需要的资源,锁,缓存而处于等待状,造成应用的无响应现象程序问题78 数据库配置问题 无常,短暂的性能问题 数据库性能日益下降 效率低或高负载的SQL语句 SQL优化后出现不可意料的性能下降数据库问题数据库问题9调优工具的历史变迁 起步阶段(V5) Debug code 小有建树(V6)Counters/RatioBSTAT/ESTATSQL*Trace 渐进式发展(V7) 出现了 Wait Event counters向timers的变迁10 快速发展(8i) 扩大数据搜集范围 STATPACK 逐步完善(9i)
4、 更精细的收集 - Session tuning using 10046 SQL traces 更加全面的STATSPACK 智能化、自动化开始初现 日渐成熟(10g)自动化收集更加广泛的收集 保留一段时间的历史提供了:ASH, AWR, ADDM, EM等功能调用形成了越来越完善的性能优化诊断工具11诊断的六种方法动态性能视图-性能诊断的基础数据来源 v$sysstatv$session v$sessstatv$sgastat v$filestatv$undostat v$waitstatv$lock v$latchv$sql v$librarycachev$processes v$sess
5、ion_longops v$session_wait 12案例-1:利用的动态性能视图发现占CPU高的数据库用户SQL: SELECT n.username, s.sid, s.value, FROM v$sesstat s, v$statname t, v$session n WHERE s.statistic#=t.statistic# AND n.sid=s.sid AND t.name=CPU used by this session ORDER BY s.value DESC;13案例-2:数据库表空间监控SQL:见备注结果:TABLESPACE_NAME SUM_SPACE(M)
6、SUM_BLOCKS USED_SPACE(M) USED_RATE(%) FREE_SPACE(M) FREE_RATE(%)- - - - - - -UNDOTBS1 65 8320 37.5 57.69 27.5 42.31USERS 10 1280 8.81 88.1 1.19 11.9SYSTEM 690 88320 685 99.28 5 0.72SYSAUX 618.69 79192 586.88 94.86 31.81 5.14TEMP 54 6912 54 100 0 014等待事件性能优化的核心v$system_event / v$session_event / v$ses
7、sion_wait竞争即等待从v$system_event中发现系统问题从v$session_event中发现会话问题从v$session_wait的参数中找到竞争对象15主要等待事件 缓冲区忙等待 db file scattered read db file sequential read free buffer waits latch free eng:TX-row block contention16 缓冲区忙等待 常见原因是对属于表和索引的数据块的争用,以及对段头的争用 也可能发生在回退段和回退段块的争用 SQL 定位争用发生的位置 SELECT class, count FROM v
8、$waitstat WHERE count 0 ORDER BY count DESC;17 db file scattered read 全表扫描或索引快速扫描 V$FILESTAT phyrds Phyblkrd db file sequential read 索引读或者等待物理I/O调用返回时 在统计数据极大的情况下,结合磁盘I/O分析18 free buffer waits 数据写入进程跟不上对缓冲区高速缓存的请求 诊断 SGA db_writer_processes latch free wait event latch 保护SGA中共享数据结构 shared pool latch
9、cache buffers LRU chain19 STATPACK 快速定位 全面分析20 Statspack的安装$ORACLE_HOME/rdbms/admin/spcreate.sql 收集统计信息 $ORACLE_HOME/rdbms/admin/statspack.snap 自动收集统计信息$ORACLE_HOME/rdbms/admin/spauto.sql 生成报表$ORACLE_HOME/rdbms/admin/spreport.sql 要收集计时信息TIMED_STATISTICS = True21STATPACK 内容22Oracle 10g 新诊断工具 ASH 活动会话
10、历史记录 v$active_session_history AWR 自动负荷信息库 dba_hist_* ADDM 以AWR为基础,输出对性能问题的描述及建议的解决方法ADDR23 Active Session History 每秒钟自动从内存中获取的活动会话信息,不保存 通过ashrpt.sql可以产生ash分析报告,发现某个时段的TOP值(Top Events/ Top SQL/ Top Sessions/ Top Objects/Files/Latches) SQL:找到157会话当前执行的SQL语句 select a.sql_text from v$sql where sql_id i
11、n (select sql_id from v$active_session_history where session_id=157);查找数据库的瞬间问题24示例-ASH 报告25示例-ASH 报告 continue26示例-ASH 报告 continue27 Automatic Workload Repository-自动负荷信息库 AWR是Oracle 10g及以后版本数据库自动化管理的基础架构 自动捕获工作负载数据 默认情况下,每隔 60 分钟保存一次,或者手动保存 7 天的数据 dba_hist_* 存储在新SYSAUX 表空间内 服务器自动管理空间要求 自动清除旧数据 存储不同类
12、别的数据: 基本统计,例如物理读取 SQL 统计,例如磁盘读取(每个 sql 语句) 量度,例如,物理读取数量/秒 通过awrrpt.sql可以产生与statspack类似的性能差异报告28示例-AWR 报告29示例-AWR 报告 continue30 Automatic Database Diagnostic MonitorSQLAdvisorHigh-load SQLIO / CPU issues RAC issuesSnapshots inAutomatic WorkloadRepositorySystem Resource AdviceNetwork + DB config Advic
13、eSelf-Diagnostic Engine inside DB31 ADDM诊断的关键问题 高代价的SQL语句 I/O性能问题 锁定和并发问题 额外的解析 资源瓶颈 过少的内存分配 连接管理问题,如频繁登陆/注销活动32 ADDM 分析结果 Statistics_level (typical 或者all) dbms_advisor.get_task_report SELECT dbms_advisor.get_task_report( task_name,TEXT,ALL) FROM dba_advisor_tasks WHERE task_id=(SELECT max(t.task_id
14、) FROM dba_advisor_tasks t, dba_advisor_log l WHERE t.task_id=l.task_id AND t.advisor_name=ADDM AND l.status=COMPLETED $ORACLE_HOME/rdbms/admin/addmrpt.sql33示例-ADDM 报告34示例-ADDM 报告 continue35 Automatic Database difference Report 基于基线的理念,对比比单纯的报告更能够说明问题 比基线更灵活,产生报告时随意选择对比基线 通过awrddrpt.sql可以获取性能异常时间与正常
15、时间段AWR报告的对比值,能够快速发现性能差异,从而定位问题36示例-ADDR 报告37 提示(hints) Oracle很强大的工具,优化SQL的利器,能够强制SQL的执行算法,确保SQL执行按照我们希望的执行计划。 典型的hits FIRST_ROWS, ALL_ROWS ,RULE FULL(tab) INDEX( tab index ) NO_INDEX ( tab index ) USE_NL(tab) USE_MERGE(tab.) USE_HASH(tab1 tab2) PARALLEL ( table, , )38监控架构 主机与数据库性能数据主机与数据库性能数据收集层收集层数
16、据分析,建立监控数据分析,建立监控分析层分析层展示层展示层39架构图DB ServerMonitor Server辅助服务器辅助服务器Monitor Center监控数据流监控数据流40收集层Agent Shell+Crontab监控数据:系统磁盘状态表空间状态信息 系统负载,数据库负载CPU使用率Oracle Alert日志OS日志采集数据传输SSH 节点间通信信任41分析层邮件报警sendmail短信报警飞信API数据分析Shell脚本42标准接口架构统一的数据结构统一的接口程序短信报警邮件报警文件传输文件同步rsync + crontabscc43用户程序用户程序用户程序用户程序标准接口架构 图示用户程序用户程序接口程序或配置文件接口程序或配置文件接口程序或配置文件接口程序或配置文件接口程序接口程序Monitor Server接口程序或配置文件接口程序或配置文件44展示层公共接口Mobile PhoneE-mailWeb展示Nagio 系统服务状态 开发监控插件Cacti 走势图45Nagio46Cacti47淘宝数据库监控平台48SQL维度分析49Q & A50谢谢!51