高手的存在,就是让服务10亿人的时候,你感觉只是为你一个人服务......

性能监控与分析-数据库

目录
  1. 1. 常见的数据库问题有哪些?
  2. 2. ORCLE性能监控-AWR报告和ADDM
    1. 2.1. awr和addm介绍
    2. 2.2. 如何导出awr报告
    3. 2.3. 如何快速定位问题
    4. 2.4. 如何导出ADDM报告

一个网站的性能分为很多方面,从网络、OS、中间件、code、sql、数据库,还有前端的很多方面,比如:page size、请求数、开启压缩等,实在是太多太多,估计一辈子搞完所有的是不可能了。
大型网站在访问高峰的时候,实际上最大的瓶颈在数据库。很多互联网公司为了解决数据库瓶颈,会在DB端应用很多缓存机制,memcache、redis、包括减轻流复制的压力会应用MQ,kafka等消息队列。据统计,某宝和某度数据库的压力仅占期请求的10%~20%,大多数都是被redis等处理掉了。
那么问题来了,我们在性能测试的时候遇到DB端的性能问题该怎么定位与分析呢?

数据库的性能无非就两个方面-sql和配置

常见的数据库问题有哪些?

SQL语句低效或高负载
应用程序使用ORCLE数据库效果不佳
数据库内存结构大小不足
并发问题
I/O问题
数据库配置问题
数据库性能随着时间下降

ORCLE性能监控-AWR报告和ADDM

awr和addm介绍

AWR:Automatic Workload Repository 是 10g 引入的一个重要组件,存贮着近期一段时间内数据库活动状态的详细信息、信息保留默认是7天。
Alt text

ADDM:Oracle10g中推出了新的优化诊断工具:就是通过诊断和分析awr得到的数据来推断数据库可能存在的问题,addm给出的建议是依照减少db_time为依据。每次收集完awr报告后,都会产生一个addm分析,分析结果在shared_pool里,mmon进程定期将其写入磁盘,AWR每产生一次快照,MMON进程就通知ADDM把AWR最近两次快照之间的差值进行分析。因此,在默认情况下,每当有AWR的快照产生,ADDM将自动运行。通过em可以查看。所以说白了,addm应该是帮助我们发现问题的一个很好的工具。addm可以定位出很多问题,或许你想不到的,它都能帮你想到。

如何导出awr报告

首先进入$ORACLE_HOME/rdbms/admin目录,在sqlplus下运行@awrrpt脚本(记得切换oralce用户哦~),按照提示一步一步就可以达成,导出的格式有两种,txt格式和html格式

Alt text

Alt text

Alt text

我们看到最后生成一个awr报告文件,把它拿出来,改成html格式的文件。

Alt text

如何快速定位问题

刚开始看到AWR报告的时候我就mengbi了,内容实在是太多,从上到下哗啦啦的好多屏。
其实大家别害怕,里面99%的内容可以忽略了,我们直接看核心的东东-Top 5 Timed Events ,这个是oracle占用时间最长的5个events,直接看这个就行了。
Alt text

什么?里面写的啥,看不懂??
其实,里面很多东西DBA也不懂,我们百度,谷歌搜起来,很多优化的方案都有,更专业的话,请看一些oracle自己的文章。
还有更懒省事、简单有效的方法,使用ADDM报告,上面也介绍了,它就像个私人医生,给你诊断oracle的性能问题并且给你解决方案。
我们来看看ADDM能定位哪些问题

•操作系统内存页入页出问题
•由于Oracle负载和非Oracle负载导致的CPU瓶颈问题
•导致不同资源负载的Top SQL语句和对象——CPU消耗、IO带宽占用、潜在IO问题、RAC内部通讯繁忙
•按照PLSQL和JAVA执行时间排的Top SQL语句.
•过多地连接 (login/logoff).
•过多硬解析问题——由于shared pool过小、书写问题、绑定大小不适应、解析失败原因引起的。
•过多软解析问题
•索引查询过多导致资源争用.
•由于用户锁导致的过多的等待时间 (通过包dbms_lock加的锁)
•由于DML锁导致的过多等待时间(例如锁住表了)
•由于管道输出导致的过多等待时间(如通过包dbms_pipe.put进行管道输出)
•由于并发更新同一个记录导致的过多等待时间(行级锁等待)
•由于ITL不够导致的过多等待时间(大量的事务操作同一个数据块)
•系统中过多的commit和rollback(logfile sync事件).
•由于磁盘带宽太小和其他潜在问题(如由于logfile太小导致过多的checkpoint,MTTR设置问题,过多的undo操作等等)导致的IO性能问题I
•对于DBWR进程写数据块,磁盘IO吞吐量不足
•由于归档进程无法跟上redo日至产生的速度,导致系统变慢
•redo数据文件太小导致的问题
•由于扩展磁盘分配导致的争用
•由于移动一个对象的高水位导致的争用问题
•内存太小问题——SGA Target, PGA, Buffer Cache, Shared Pool
•在一个实例或者一个机群环境中存在频繁读写争用的热块
•在一个实例或者一个机群环境中存在频繁读写争用的热对象
•RAC环境中内部通讯问题
•LMS进程无法跟上导致锁请求阻塞
•在RAC环境中由于阻塞和争用导致的实例倾斜
•RMAN导致的IO和CPU问题
•Streams和AQ问题
•资源管理等待事件

如何导出ADDM报告

和上面导出AWR报告一样,首先进入$ORACLE_HOME/rdbms/admin目录,在sqlplus下运行@addmrpt脚本(记得切换oralce用户哦~),按照提示一步一步就可以达成。
我们把生成的addm报告拿出来,瞅一瞅~
Alt text

哎,我英语不好,很多看不懂,没办法啊!!!
去百度整片翻译一下吧~~
Alt text

好了,后面的事情不用多少了,调参数,优化sql,改bug吧~~