数据库调优重点:
1、SGA 、PGA 调整
2 redo.log的大小和路径
3.数据文件的自增长
数据库一般建议SGA大小为应用服务器内存的40%,PGA的大小与数据库的连接有关,
数据操作频繁但数据量不大的情况下,每个用户大约占3M-4M.
应用服务器调优重点:
1.线程池
2.连接池
3.JVM参数,中间价参数
4.日志
定位分析方法:
1.数据库CPU高
A.找出消耗PCU的进程<pid> TOP
B.查询问题进程的信息 ps -ef | grep <pid>
C.进入数据库查询进程使用的SQL
SELECT /*+ ORDERED */
sql_text FROM v$sqltext a
WHERE (a.hash_value, a.address) IN
( SELECT DECODE (sql_hash_value, 0, prev_hash_value, sql_hash_value ),
DECODE (sql_hash_value, 0, prev_sql_addr, sql_address) FROM v$session b
WHERE b.paddr = (SELECT addr FROM v$process c WHERE c.spid = '&pid'))
数据库查询可能缺少索引 ,数据库可能配置不对
应对方式:抓快照
2.应用服务器CPU不高
可能有线程锁,看看JVM线程在干什么?
应对方式: kill -3<pid>
可能有异常,大量错误信息输出到NOHUP.OUT文件中,有问题
3.TPS抖动得厉害,一会为0,一会很高,网络占用非常高
有可能是线程锁,也有可能是网络瓶颈
4.TPS稳定下跌,看走势随着时间拉长有可能会跌倒0,
有可能是内存溢出,建议把内存调小,间隔时间打印DUMP,通过工具分析找到瓶颈
5.看线程堆栈,
A.当前大量的线程在忙什么?有没有线程等待?
B.通过JCONSOLE 查看JVM中调用最多的方法,进行性能优化,会对整体性能有比较大的帮助。
可以通过JPOFILE ,FINDBUGS来检验代码性能~~~