`
itspace
  • 浏览: 959455 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

浅谈Oracle优化

阅读更多
现在是23:37,还没轮到我干活,闲来无事,随便归纳数据库缓慢的原因。可能是DBA做久了,在我的观念里,数据库稳定压倒一切,备份重于一切。不要没事找事干。
优化分为OS和DB两块内容,粗粗想起,粗枝大叶,欢迎补充。
OS:

1、CPU
可以用top(linux,hp-ux),topas(aix)或者vmstat(idle列)
2、MEMORY
AIX:SVMON -G,linux:free HP-UX glance。需要注意的是unix会最大程度利用其内存,这里需要用vmstat(po,pi观察其交换频率),同时观察其交换空间使用情况aix(lsps -a),hp-ux(swapinfo -awt)
3、IO
检查存储电池是否失效,raid?检测存储最直接的方法是用dd工具,当然也可以用Oracle statspack或者awr观察iops和磁盘效率,热点数据文件。操作系统工具可以用sar -d(avserv)
NETWORK
网络很少成为性能问题,在windows环境下,防止病毒堵塞网络。检测Oracle监听响应缓慢,可以通过tnsping实现。

除此之外,需要考虑2种因素:1、僵尸进程消耗大量的内存(defunct),内存泄露。2、操作系统进程消耗大量的CPU,可以用vmstat查看sys列。

DB:
数据库相应缓慢,操作系统资源消耗过多互为因果。
引起数据库缓慢的主要原因为:
1、操作系统问题
2、执行计划错误:对象统计信息失效,bind peeking
3、参数设置不合适


主要有以下解决办法:
做statspack(9i),awr,ash,addm(10g)
查看视图
select * from v$session_wait where wait_class<>'Idle';

1、确定是否SQL引起,如不必要的大表扫描
查看执行计划,调整其SQL,或者采用CBO
a)PLsqldev F5快捷键
b)
explain for select * from xxx;
select * from table(dbms_xplan.display);
c) set autot on EXP stat
d)v$sql_plan
e)SELECT * FROM table(dbms_xplan.display_cursor('1hqjydsjbvmwq',0));
f)SELECT * FROM table(dbms_xplan.display_awr('1hqjydsjbvmwq'));
g)statspack level=>6

2、确定是否大量排序引起,调整PGA大小,改写SQL
3、确定是否是Oracle动态内存分配引起,调整SGA大小,或者动态分配改成静态分配
4、确定是否是过多硬解析引起,改写SQL,建议使用绑定变量或者修改参数:cursor_sharing,session_cache_cursor
5、确定是否热点块引起,cache buffer busy,cache buffer chain等。解决办法改写sql,修改pctfree,修改blocksize,将小表放进keep pool。max分布,hash表,reverse index
6、确定是否死锁引起。v$block block=1或者mutex锁。
7、确定是否是监听响应不及时引起。采用tnsping测试。采用连接池,3层架构或者长连接。
8、确定是否是表格索引碎片或者行迁移,行连接引起不必要的IO。
9、业务高峰期间ddl
10、高峰期间大事务操作






分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics