Erp100论坛's Archiver

xiangzhao 发表于 2008-7-9 12:54

oracle占cpu100%,想请问瓶颈在哪里

最近我的oracle总是占CPU100%。查到是因
select count(1)
  from (select *
     from abc
    where qymc='中国语言中国语言中国语言')
这句SQL引起的。且如果换别的数据库语句执行并没有问题,或者把条件的中文字符减少到11个以下中文字符都可以执行。然后分析不下去了。
请问,像这样的情况我要怎么查瓶颈在哪里?怎么对数据库进行优化呢?

xiangzhao 发表于 2008-7-9 12:54

查看不到执行计划,因为SQL一执行CPU马上到50%,而且半天也不能返回执行结果。
新建的没有数据的表也是同样的情况。
减少where条件里面的中文字符个数到11个。查看执行计划
PLAN_TABLE_OUTPUT
------------------------------------------------------------------------
-----------------------------------------------------------------------
| Id  | Operation            |  Name          | Rows  | Bytes | Cost  |
-----------------------------------------------------------------------
|   0 | SELECT STATEMENT     |                |     1 |    24 |   443 |
|   1 |  SORT AGGREGATE      |                |     1 |    24 |       |
|*  2 |   TABLE ACCESS FULL  | GOV_JB_GSDJZC  |     1 |    24 |   443 |
-----------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

PLAN_TABLE_OUTPUT
------------------------------------------------------------------------

   2 - filter("GOV_JB_GSDJZC"."QYMC"='中国语言中国语言中国语')

xiangzhao 发表于 2008-7-9 12:55

语句:
select count(1)
  from (select *
     from gov_jb_gsdjzc
    where qymc='中国语言中国语言中国语言')

表结构
create table GOV_JB_GSDJZC
(
  NBXH   VARCHAR2(16) not null,
  ZCH    VARCHAR2(26),
  QYMC   VARCHAR2(100),
  QYDEMC VARCHAR2(100),
  ZS     VARCHAR2(100),
  JYCS   VARCHAR2(100),
  HY     VARCHAR2(10),
  GXDW   VARCHAR2(10),
  QYDL   VARCHAR2(10),
  QYLX   VARCHAR2(10),
  ZCZB   NUMBER(16,4),
  JYFW   VARCHAR2(1000),
  DJJG   VARCHAR2(20),
  CLRQ   DATE,
  HZRQ   DATE,
  JYJZRQ DATE,
  YZBM   VARCHAR2(70),
  DH     VARCHAR2(50),
  DZYJDZ VARCHAR2(40),
  GSWZ   VARCHAR2(100),
  ZT     VARCHAR2(2),
  ZXRQ   DATE,
  CYRS   NUMBER(10),
  LRDW   VARCHAR2(50),
  LRR    VARCHAR2(20),
  LRRQ   DATE,
  LYDQ   VARCHAR2(10)
);
alter table GOV_JB_GSDJZC
  add primary key (NBXH);
create index AABDE on GOV_JB_GSDJZC (QYMC);

执行频率:
就只执行了一次.CPU50%.查询始终不能返回结果

原来不那么慢1秒多一点跟可以有返回结果.
最近啥也没做(至少本机管理员没做任何操作)

表没有分析过.

等待事件表的查询结果是:
12        SQL*Net message to client        32        0        0        0        0        90
12        SQL*Net more data to client        17        0        0        0        0        695
12        SQL*Net message from client        31        0        164944        5321        94691        1649443522

xiangzhao 发表于 2008-7-9 12:55

语句改写为 select count(*)
     from gov_jb_gsdjzc
    where qymc='中国语言中国语言中国语言'
分析表及索引

xiangzhao 发表于 2008-7-9 12:55

改成select count(*)
     from gov_jb_gsdjzc
    where qymc='中国语言中国语言中国语言'
马上就能查出来.没有任何问题.

页: [1]

Powered by Discuz! Archiver 7.0.0  © 2001-2007 Comsenz Inc.