学习oracle10g调优

    前段时间我们在测程序时,发现用oracle10g速度老是上不去,而采用mysql,速度比oracle快了不止一两倍。难道Oracle,作为数据库界之翘楚,竟是如此之沉重缓慢?不太可能吧?整了好久天,硬是没搞定。后来我们找了oralce的技术支持,让他帮忙看一看,经过两天的从旁偷师学艺(:)),发现对于数据库,之前我们好像总是在门外徘徊,觉得神秘莫测,等到进去一看,原来也是有qm的hoho~~。也许这也算入行了吧?哈哈^-^
    好了,闲话少说,言归正传。人家的技术支持果然不同凡响,噼里啪啦敲了一通(具体什么命令,且看下文),就发现了原来我们有两个瓶颈:
    1、 rel="File-List" href="file:///D:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///D:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///D:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"> Latch: shared pool
    2、 rel="File-List" href="file:///D:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_filelist.xml"> rel="themeData" href="file:///D:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_themedata.thmx"> rel="colorSchemeMapping" href="file:///D:%5CDOCUME%7E1%5CADMINI%7E1%5CLOCALS%7E1%5CTemp%5Cmsohtmlclip1%5C01%5Cclip_colorschememapping.xml"> log file sync(写磁盘日志)
    而首当其冲的是shared pool的瓶颈。因为我们程序当中没有用到共享句柄,所以虽然只有短短的几个查询,但是每次查询数据库都要重新解析,然后查询。由于share pool 缓冲区有限,导致其他线程都在等待上一条查询解析完释放空间,再重复解析-〉查询。所以速度自然就不快了。而只是一味的加大share pool也是无法一劳永逸的。解决的办法就是采用共享句柄。真是奇哉怪也,之前速度100条/s都不到,改了以后,一下飙升到了2000多。看来还是行家出手,不同凡响阿!那他是怎么看到的呢?有两个办法。一个是在sqlplus中输以下的命令。
select sid ,event from v$session_wait where event not like 'SQL%' and event not like 'rdbms%' and sid in (select sid from v$session where username='TEST');
    就可以知道当前用户会话有哪些事件导致进程等待。第二个是通过oracle10g的emctl工具,在后台启动emctl(至于怎么启动就不说了,相信难不倒老兄你的),然后在前台输入htttp://hostname:1158/em就可以通过oracle10g的前台来监控数据库的性能情况,个人认为,是学习调优的绝好平台!嗯?都有什么东西?这怎么让我三言两语说清楚呢,自己试试不就知道了?不过,我要着重强调的一点,是它可以在界面提示你的数据库可能存在什么性能瓶颈。顺便带一句,俺们就是通过界面看到的:-)
    有的朋友可能急了,那第二个瓶颈呢?别急,听我慢慢说来。这第二个问题, log file sync是因为我们程序在执行insert语句时,oracle需要往磁盘写日志(为什么??因为为了将来可能要进行的数据恢复啊),而稍微懂行的人都清楚,写磁盘往往都是应用程序的瓶颈。为什么呢?硬盘的读写速度一般只有60M/s左右,能上100M就算相当8错了。而现在网卡已经是千兆了,内存就更快了。。所以,瓶颈在磁盘。所以我们后来就改用了裸设备。改完以后,效率又立马提升了至少20%。(什么是裸设备,自己上网查查吧,我的理解,就是没有经过文件系统格式化的LV,。。为什么会提高?唔唔。。。^o^),而改到盘阵的话,那就更快了。
  这是那几天调优学到的,当然还有很多其他的东西,比如分区(partition),用于维护数据库,便于管理。还有我们以前用analyze作索引分析的,其实10g里面改用exec dbms_stats.gather_table_stats('TEST','USERS');
exec dbms_stats.gather_schema_stats('TEST'); 了,还有学了一个磁盘读写很好用的命令。dd if=/dev/raw1 of=/dev/rmt0 bs=16k就是往裸设备写数据,输入、输出还有块的大小都可以指定,可以用来测测读写的速度或者进行备份之类。哦,忘了交待了,我们用的平台是UNIX系统。好了,时间有限,就先写这么多了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值