1、当数据库变慢时的解决方法有哪些当数据库变慢时的解决方法有哪些当数据库变慢时的解决方法有哪些加城,本文测重于Unix环境。第一章检查系统的状态通过操作系统的一些工具检查系统的状态,比方CPU、内存、交换、磁盘的利用率,根据经历或与系统正常时的状态相比对,有时系统外表上看起来看空闲,这可以能不是一个正常的状态,由于cpu可能正等待IO的完成。除此之外,还应观注那些占用系统资源(cpu、内存)的进程。1.1使用sar来检查操作系统能否存在IO问题#sar-u210-即每隔2秒检察一次,共执行20次。结果示例:注:在redhat下,%system就是所谓的%wio。Linux2.4.21-20.ELs
2、mp(YY075)05/19/200510:36:07AMCPU%user%nice%system%idle10:36:09AMall0.000.000.1399.8710:36:11AMall0.000.000.00100.0010:36:13AMall0.250.000.2599.4910:36:15AMall0.130.000.1399.7510:36:17AMall0.000.000.00100.00其中:%usr指的是用户进程使用的cpu资源的百分比;%sys指的是系统资源使用cpu资源的百分比;%wio指的是等待io完成的百分比,这是值得观注的一项;%idle即空闲的百分比。假如w
3、io列的值很大,如在35%以上,讲明系统的IO存在瓶颈,CPU花费了很大的时间去等待I/O的完成。Idle很小讲明系统CPU很忙。像以上的示例,能够看到wio平均值为11,讲明I/O没什么十分的问题,而idle值为零,讲明cpu已经满负荷运行了。当系统存在IO问题时,能够从下面几个方面解决:联络相应的操作系统的技术支持对这方面进行优化,比方hp-ux在划定卷组时的条带化等方面。查找Oracle中不合理的sql语句,对其进行优化;对Oracle中访问量频繁的表除合理建索引外,再就是把这些表分表空间存放以免访问上产生热门,再有就是对表合理分区。1.2关注内存常用的工具便是vmstat,对于hp-u
4、nix来讲,能够用glance。Aix来讲能够用topas。当发现vmstat中pi列非零,memory中的free列的值很小,glance、topas中内存的利用率多于80%时,这时讲明内存方面应该调节一下。方法大体有下面几项:划给Oracle使用的内存不要超过系统内存的1/2,一般保在系统内存的40%为益。为系统增加内存;假如你的连接十分多,能够使用MTS的方式;打全补丁,防止内存漏洞。1.3找到使用资源十分大的Oracle的session及其执行的语句Hp-unix能够用glance或top。IBMAIX能够用topas。此外能够使用ps的命令。通过这些程序能够找到点用系统资源十分大的这
5、些进程的进程号,就能够通过下面的sql语句发现这个pid正在执行哪个sql,这个sql最好在pl/sqldeveloper、toad等软件中执行: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分析一下,看一下它的执行计划能否走索引。对其优
6、化避免全表扫描,以减少IO等待,进而加快语句的执行速度。提示:在做优化sql时,经常碰到使用in的语句,这时一定要用exists把它给换掉,由于Oracle在处理In时是按Or的方式做的,即便使用了索引也会很慢。比方:SELECTcol1,col2,col3FROMtable1aWHEREa.col1NOTIN(SELECTcol1FROMtable2)能够换成:SELECTcol1,col2,col3FROMtable1aWHERENOTEXISTS(SELECTxFROMtable2bWHEREa.col1=b.col1)1.4查找前十条性能差的sql语句SELECT*FROM(SELEC
7、Tparsing_user_id,executions,sorts,command_type,disk_reads,sql_textFROMv$sqlareaORDERBYdisk_readsDESC)WHEREROWNUM第二章检查会话状态要快速发现OracleServer的性能问题的原因,能够求助于v$session_wait视图,看系统的这些session在等什么,使用了多少的IO。下面是参考脚本:-脚本讲明:查看占I/O较大的正在运行的session:SELECTse.sid,se.serial#,pr.spid,se.username,se.status,se.terminal,se
8、.program,se.module,se.sql_address,st.event,st.p1text,si.physical_reads,si.block_changesFROMv$sessionse,v$session_waitst,v$sess_iosi,v$processprWHEREst.sid=se.sidANDst.sid=si.sidANDse.PADDR=pr.ADDRANDse.sid6ANDst.wait_time=0ANDst.eventNOTLIKE%SQL%ORDERBYphysical_readsDESC;对检索出的结果的几点讲明:1.以上是按每个正在等待的se
9、ssion已经发生的物理读排的序,由于它与实际的I/O相关。2.能够看一下这些等待的进程都在忙什么,语句能否合理?SELECTsql_addressFROMv$sessionWHEREsid=;SELECT*FROMv$sqltextWHEREaddress=;执行以上两个语句便能够得到这个session的语句。也以用altersystemkillsessionsid,serial#把这个session杀掉。3.应观注一下event列,这是调优的关键一列,下面对常出现的event做以扼要的讲明:1)bufferbusywaits,freebufferwaits这两个参数所标识是dbwr能否够用
10、的问题,与IO很大相关的,当v$session_wait中的freebufferwait的条目很小或没有时,讲明系统的dbwr进程决对够用,不用调整;freebufferwait的条目很多,系统感觉起来一定很慢,这时讲明dbwr已经不够用了,它产生的wio已经成为数据库性能的瓶颈,这时的解决办法如下:增加写进程,同时要调整db_block_lru_latches参数:示例:修改或添加如下两个参数db_writer_processes=4db_block_lru_latches=8开异步IO。IBM这方面简单得多,hp则费事一些,能够与Hp工程师联络。2)dbfilesequentialread
11、,指的是顺序读,即全表扫描,这也是应尽量减少的部分,解决方法就是使用索引、sql调优,同时能够增大db_file_multiblock_read_count这个参数。3)dbfilescatteredread参数指的是通过索引来读取,同样能够通过增加db_file_multiblock_read_count这个参数来提高性能。4)latchfree与栓相关,需要专门调节。5)其他参数能够不十分观注补充:解决系统变慢的常用技巧方法1、在我的电脑窗口,右击要清理的盘符属性清理磁盘-勾选要删除的文件-确定-是。2、右键阅读器e属性点2个删除1个去除(都要逐一确定)确定。3、把C:WINDOWSPre
12、fetch(预读文件)把里面的文件全部删除4、用优化大师或超级兔子清理注册表和垃圾文件。5、开场运行中输入msconfig确定启动除了输入法ctfmon以外的勾全去掉。6、右键我的电脑属性点高级点启动和故障恢复中的设置去掉所有的勾写入调试信息选择无确定点高级下面错误报告点禁用2次确定。7、开场.打开控制面板中的文件夹选项.点查看.点去末项自动搜索文件夹前面的勾.确定。8、右键我的电脑属性硬件设备管理器双击IDE控制器次要通道高级设置传送形式都选DMA设备类型选无确定主要通道也同样设置确定。9、右键C盘进行磁盘清理和其它选项中的系统复原清理。10、删除不用的程序软件。当数据库变慢时的解决方法有哪些
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1