MYSQL网页编程之Oracle10g数据库优化有用心得小结
解决方案提供商开始推动DBaaS浪潮之前,他们应该深入了解究竟什么是DBaaS。oracle|数据|数据库|心得|优化良多的时侯,做OracleDBA的我们,当使用办理员向我们公告如今使用很慢、数据库很慢的时侯,我们到数据库时做几个示例的Select也发明一样的成绩时,有些时侯我们会无从动手,由于我们以为数据库的各类命种率都是满意Oracle文档的倡议。实践上现在的优化己经向优化守候(waits)转型了,实践中功能优化最基本的呈现点也都会合在IO,这是影响功能最次要的方面,由体系中的守候往发明Oracle库中的不敷、操纵体系某些资本使用的分歧理是一个对照好的举措,上面把我的一点理论履历与人人分享一下,本文测重于Unix情况。1、经由过程操纵体系的一些工具反省体系的形态,好比CPU、内存、互换、磁盘的使用率,依据履历或与体系一般时的形态比拟对,偶然体系外表上看起来看余暇这也大概不是一个一般的形态,由于cpu大概正守候IO的完成。除此以外我们还应不雅注那些占用体系资本(cpu、内存)的历程。
1、怎样反省操纵体系是不是存在IO的成绩?利用的工具有sar,这是一个对照通用的工具。
Rp1#sar-u210
即每隔2秒审查一次,共实行20次,固然这些都由你决意了。
示例前往:
HP-UXhpn2B.11.00U9000/80008/05/03
18:26:32%usr%sys%wio%idle
注:我在redhat下检察是这类了局,不知%system就是所谓的%wio
Linux2.4.21-20.ELsmp(YY075)05/19/2005
10:36:07AMCPU%user%nice%system%idle
10:36:09AMall0.000.000.1399.87
10:36:11AMall0.000.000.00100.00
10:36:13AMall0.250.000.2599.49
10:36:15AMall0.130.000.1399.75
10:36:17AMall0.000.000.00100.00
10:36:17AMCPU%user%nice%system%idle
10:36:19AMall0.000.000.00100.00
10:36:21AMall0.000.000.00100.00
10:36:23AMall0.000.000.00100.00
10:36:25AMall0.000.000.00100.00
个中的%usr指的是用户历程利用的cpu资本的百分比,%sys指的是体系资本利用cpu资本的百分比,%wio指的是守候io完成的百分比,这是值得我们不雅注的一项,%idle即余暇的百分比。假如wio列的值很年夜,如在35%以上,申明你的体系的IO存在瓶颈,你的CPU消费了很年夜的工夫往守候IO的完成。Idle很小申明体系CPU很忙。像我的这个示例,能够看到wio均匀值为11申明io没甚么出格的成绩,而我的idle值为零,申明我的cpu已满负荷运转了。
当你的体系存在IO的成绩,能够从以下几个方面办理
*接洽响应的操纵体系的手艺撑持对这方面举行优化,好比hp-ux在规定卷组时的条带化等方面。
*查找Oracle中分歧理的sql语句,对其举行优化。
*对Oracle中会见量频仍的表除公道建索引外,再就是把这些表分表空间寄存以避免会见上发生热门,再有就是对表公道分区。
2、存眷一下内存
经常使用的工具即是vmstat,关于hp-unix来讲能够用glance,Aix来讲能够用topas,当你发明vmstat中pi列非零,memory中的free列的值很小,glance,topas中内存的使用率多于80%时,这时候申明你的内存方面应当调治一下了,办法大致有以下几项。
*划给Oracle利用的内存不要凌驾体系内存的1/2,一样平常保在体系内存的40%为益。
为体系增添内存
*假如你的毗连出格多,可使用MTS的体例
*打全补钉,避免内存毛病。
3、怎样找到点用系用资本出格年夜的Oracle的session及其实行的语句。
Hp-unix能够用glance,top
IBMAIX能够用topas
别的可使用ps的命令。
经由过程这些程序我们能够找到点用体系资本出格年夜的这些历程的历程号,我们就能够经由过程以下的sql语句发明这个pid正在实行哪一个sql,这个sql最幸亏pl/sqldeveloper,toad等软件中实行,把中的spid换成你的spid就能够了。
SELECTa.username,a.machine,a.program,a.sid,a.serial#,a.status,c.piece,c.sql_textfromv$sessiona,v$processb,v$sqltextcWHEREb.spid=ORCLANDb.addr=a.paddrANDa.sql_address=c.address(+)orderBYc.piece
我们就能够把失掉的这个sql剖析一下,看一下它的实行企图是不是走索引,对其优化制止全表扫描,以削减IO守候,从而加速语句的实行速率。
提醒:我在做优化sql时,常常碰着利用in的语句,这时候我们必定要用exists把它给换失落,由于Oracle在处置In时是按Or的体例做的,即便利用了索引也会很慢。
好比:
SELECTcol1,col2,col3FROMtable1a
WHEREa.col1notin(SELECTcol1FROMtable2)
能够换成:
SELECTcol1,col2,col3FROMtable1a
WHEREnotexists
(SELECTxFROMtable2b
WHEREa.col1=b.col1)
4、另外一个有效的剧本:查找前十条功能差的sql.
SELECT*FROM(selectPARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_textFROMv$sqlarea
orderBYdisk_readsDESC)whereROWNUM<10;
2、敏捷发明OracleServer的功能成绩的成因,我们能够乞助于v$session_wait这个视图,看体系的这些session在等甚么,利用了几的IO。以下是我供应的参考剧本:
剧本申明:检察占io较年夜的正在运转的session
SELECTse.sid,se.serial#,pr.SPID,se.username,se.status,se.terminal,se.program,se.MODULE,se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changesFROMv$sessionse,v$session_waitst,v$sess_iosi,v$processpr
WHEREst.sid=se.sidANDst.sid=si.sid
ANDse.PADDR=pr.ADDR
ANDse.sid>6
ANDst.wait_time=0
ANDst.eventNOTLIKE%SQL%
ORDERBYphysical_readsDESC
对检索出的了局的几点申明:
1、我是按每一个正在守候的session已产生的物理读排的序,由于它与实践的IO相干。
2、你能够看一下这些守候的历程都在忙甚么,语句是不是公道?
Selectsql_addressfromv$sessionwheresid=;
Select*fromv$sqltextwhereaddress=;
实行以上两个语句即可以失掉这个session的语句。
你也以用altersystemkillsessionsid,serial#;把这个session杀失落。
3、应不雅注一下event这列,这是我们调优的关头一列,上面对常呈现的event做以扼要的申明:
a、bufferbusywaits,freebufferwaits这两个参数所标识是dbwr是不是够用的成绩,与IO很年夜相干的,当v$session_wait中的freebufferwait的条目很小或没有的时侯,申明你的体系的dbwr历程决对够用,不必调剂;freebufferwait的条目良多,你的体系感到起来必定很慢,这时候申明你的dbwr已不敷用了,它发生的wio已成为你的数据库功能的瓶颈,这时候的办理举措以下:
a.1增添写历程,同时要调剂db_block_lru_latches参数
示例:修正或增加以下两个参数
db_writer_processes=4
db_block_lru_latches=8
a、2开异步IO,IBM这方面复杂很多,hp则贫苦一些,能够与Hp工程师接洽。
b、dbfilesequentialread,指的是按次读,即全表扫描,这也是我们应当只管削减的部分,办理办法就是利用索引、sql调优,同时能够增年夜db_file_multiblock_read_count这个参数。
c、dbfilescatteredread,这个参数指的是经由过程索引来读取,一样能够经由过程增添db_file_multiblock_read_count这个参数来进步功能。
d、latchfree,与栓相干的了,必要专门调治。
e、其他参数能够不出格不雅注。
结篇:匆仓促当中写下了这篇文章,但愿能举一反三,能为你的Oracle调优理论带来匡助。使用DBaaS能让收入损失从其他业务上得到弥补,如软件更新和硬件管理。也许决定走DBaaS之路的客户可能会跳过解决方案提供商,尽管这个决策看起来有点短视。 始终遗憾SQLServer的登陆无法分配CPU/内存占用等指标数。如果你的SQLServer给别人分配了一个只可以读几个表的权限,而这个家伙疯狂的死循环进行连接查询,会给你的系统带来很大的负担。 我是新手,正在学习数据库和操作系统,深感理论的泛广,唯有一步一步来,但是又感觉时间不够,收集了很多资料却总是没能认真的看完,希望有一个讨论板块,大家共同解决,共同分享,共同努力 SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。 语句级快照和事务级快照终于为SQLServer的并发性能带来了突破。个人感觉语句级快照大家应该应用。事务级快照,如果是高并发系统还要慎用。如果一个用户总是被提示修改不成功要求重试时,会杀人的! 如果处理少量数据,比如几百条记录的数据,我不知道这两种情况哪个效率更高,如果处理大量数据呢?比如有表中有20万条记录. 我们学到了什么?思考问题的时候从表的角度来思考问 我们学到了什么?思考问题的时候从表的角度来思考问 一个是把SQL语句写到客户端,可以使用DataSet进行加工;
页:
[1]