×

Loading...
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务
Ad by
  • 推荐 OXIO 加拿大高速网络,最低月费仅$40. 使用推荐码 RCR37MB 可获得一个月的免费服务

看到那么多人关心,我就再问一个Oracle的问题吧。

本文发表在 rolia.net 枫下论坛1、问题来源:用户用JDBC thin client访问数据库Oracle 8.1.7.4,说非常慢。
2、服务器是Unix,Oracle SGA开始定义为2.5G,后来我一查,靠,机器才有2G内存,一年多前是4G。估计是拔了内存没改数据库配置。难怪整天看到I/O。改为1.3G SGA以后,I/O正常
3、用户的表误建在system表空间 --- 哎,我就不说啥了,不知道是哪位DBA的大作。
4、用户所有的表加起来也才300多M,但凡是他运行一些稍微复杂一点的SQL,CPU就高达99.9%
5、该建的index都没问题
6、SGA的配置为:
Total System Global Area 1414280164 bytes
Fixed Size 103396 bytes
Variable Size 626417664 bytes
Database Buffers 786432000 bytes
Redo Buffers 1327104 bytes

在Unix上运行的sample SQL为
DELETE FROM loader_queue
WHERE EXISTS (SELECT 1
FROM loader_temp_lqv_dailies s
WHERE loader_queue.kpi_sid = s.kpi_sid
AND loader_queue.time_period_sid = s.time_period_sid
AND loader_queue.day_nr = s.day_nr
AND loader_queue.unit_lookup_id = s.unit_lookup_id)


问题:除了更换更强的CPU,还有什么计?老板坚持认为和CPU无关,虽然那是个几年前的老掉牙533 MHZ的Alpha cpu
即使把用户的表移出系统表空间system,会得到实质性的提高?更多精彩文章及讨论,请光临枫下论坛 rolia.net
Report

Replies, comments and Discussions:

  • 工作学习 / 专业知识杂谈 / 看到那么多人关心,我就再问一个Oracle的问题吧。
    本文发表在 rolia.net 枫下论坛1、问题来源:用户用JDBC thin client访问数据库Oracle 8.1.7.4,说非常慢。
    2、服务器是Unix,Oracle SGA开始定义为2.5G,后来我一查,靠,机器才有2G内存,一年多前是4G。估计是拔了内存没改数据库配置。难怪整天看到I/O。改为1.3G SGA以后,I/O正常
    3、用户的表误建在system表空间 --- 哎,我就不说啥了,不知道是哪位DBA的大作。
    4、用户所有的表加起来也才300多M,但凡是他运行一些稍微复杂一点的SQL,CPU就高达99.9%
    5、该建的index都没问题
    6、SGA的配置为:
    Total System Global Area 1414280164 bytes
    Fixed Size 103396 bytes
    Variable Size 626417664 bytes
    Database Buffers 786432000 bytes
    Redo Buffers 1327104 bytes

    在Unix上运行的sample SQL为
    DELETE FROM loader_queue
    WHERE EXISTS (SELECT 1
    FROM loader_temp_lqv_dailies s
    WHERE loader_queue.kpi_sid = s.kpi_sid
    AND loader_queue.time_period_sid = s.time_period_sid
    AND loader_queue.day_nr = s.day_nr
    AND loader_queue.unit_lookup_id = s.unit_lookup_id)


    问题:除了更换更强的CPU,还有什么计?老板坚持认为和CPU无关,虽然那是个几年前的老掉牙533 MHZ的Alpha cpu
    即使把用户的表移出系统表空间system,会得到实质性的提高?更多精彩文章及讨论,请光临枫下论坛 rolia.net
    • select event from v$session_events where SID='正在运行那个SQL的session SID', 把结果post出来, 我告诉你什么问题. 如果这个SQL不对, 你查查desc v$session_events, 就知道怎么写了.
      • 还有, 你可以在用户运行那个程序的只前, 运行bstat, 用户程序结束时候, 运行estat, 把report.txt 发给我, 对performancce, 本人还是比较高的. 以前, Oracle的performance问题, 一般能在发生后两分钟内找出root cause.
        • 嗯,我也在用statspack盯着
      • 多谢拉。 当前正在活动的session就是上面的那句SQL。我再OEM上监视了很长时间,发现只要有东西再跑cpu就很高。
    • 小饭,1.看看你的执行计划,是不是detail的那个表一直在做全表扫描. 是的话新建立一个可用的索引,尽量采用索引扫描.2. 8i下尽量别用exists, 效率特别特别的低.(9i下好象in和exists是一样的了)
      DELETE FROM loader_queue
      WHERE (kpi_sid,time_period_sid,day_nr,unit_lookup_id) in
      (SELECT s.kpi_sid,s.time_period_sid,s.s.day_nrs.unit_lookup_id
      FROM loader_temp_lqv_dailies s)
      先用select 代替 delete,看看结果是不是一样.
      有用的话把这个schema倒到别的tablespace下去吧, 尽量别占用system tablespace.
      • 我怀疑用户是故意写了很多效率极低的SQL,借此机会来喝咖啡和聊天。
    • 用Explain Plan查一下执行Plan吧。