中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 数据库开发 > Oracle
一次数据库性能问题的tuning
作者:oasis  时间:2006-10-07 12:43 出处:IT168  责编:月夜寒箫
              摘要:一次数据库性能问题的tuning
基本情况:

    系统是一个基于web的业务系统,以online查询为主,数据更新以批量为主,晚上执行。应该说系统还不算负载太大。5-1之后上班的时候客户反映很慢,察看DB的cpu慢慢长到100%状态。服务基本处于不可用状态。i/o wait也挺高的。
    经检查,前些天的批量竟然有达到20多小时才完成,导致次日批量都跑不起来。
   
    打开statspack收集信息
   
    从系统中发现本应该夜间执行的批量作业还在运行。停掉后,rollback做了4个小时!(因为一个transaction中只有一个复杂的、数据量巨大的insert语句)
   
    然后做statspack分析,
   
    系统中存在问题:等待事件较严重,缓存命中率较低,
   
    语句分析:

    1、一些大量执行update/delete语句竟然没有建立索引,其实可以建立pk,根据pk处理。

    where中使用常量(引起parse)
   
    2、存在大量这样的语句:

    SELECT fieldx FROM Tablesname where trim(ServiceNUM) = 'DDDDDD'
    - 在ServiceNUM字段上是唯一索引,因为trim就不能使用index(败笔) --改!
    - 使用常量查询,造成每次查询都要parse,没有必要的占用的CPU -- 改!
   
   
    3、在批量的存储过程中,

    所有语句基本都是全表扫描! --- 和开发人员沟通,需要修改逻辑。改进之后效果还是蛮大的。
   
    另外发现一个问题:

    客户需要的是n百万用户数据中的活动用户万数据,他们却全部把n百万数据从其他系统中收集到自己的系统中,在批量的时候又使用full table scan,性能自然不会好。系统从刚开始设计的时候就存在隐患。这个问题就需要从长计议了。
   
    修改后,CPU高峰时间基本稳定在30-40%之间。
    批量基本在2个小时内完成。
   
    其实是一个很简单的系统,但是做到这种样子,尤其是从设计到编码都存在问题。呵呵,说真的,不是在优化语句的,而是从头开始看设计。
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有