【问题标题】:how to sort_area_size increasesort_area_size 如何增加
【发布时间】:2010-12-24 20:20:32
【问题描述】:

如何在 oracle 10g 中设置 sort_area_size 以及应该是什么大小,因为我在单个表中有超过 2.2m 行。请告诉我建议的 SORT_AREA_RETAINED_SIZE 大小

由于我的查询速度太慢,它们需要 1 个多小时才能完成。 (大多) 请建议我优化查询和调整数据库 oracle 10g 的方法

谢谢


使用查询更新

查询是

SELECT   A.TITLE,C.TOWN_VILL U_R,F.CODE TOWN_CODE,F.CITY_TOWN_MAKE,A.FRM,A.PRD_CODE,A.BR_CODE,A.SIZE_CODE ,B.PRICES, 
       A.PROJECT_YY,A.PROJECT_MM,d.province ,D.BR_CODE  BRANCH_CODE,D.STRATUM,L.LSM_GRP LSM, 
         SUM(GET_FRAC_FACTOR_ALL_PR_NEW(A.FRM,A.PRD_CODE,A.BR_CODE,A.SIZE_CODE,A.PROJECT_YY,A.PROJECT_MM,A.FRAC_CODE ,B.PRICES,A.QTY_USED,A.VERIF_CODE, A.PACKING_CODE, J.TYPE ,'R') )  
        * MAX(D.UNIVERSE) / MAX(E.SAMPLE)   /1000000   MARKET ,  D.UNIVERSE ,E.SAMPLE  
FROM A2_FOR_CPMARKETS  A, 
     BRAND  J, 
     PRICES B,CP_SAMPLE_ALL_MONTHS C ,
     CP_LSM L, 
     HOUSEHOLD_GL D, 
     SAMPLE_CP_ALL_MONTHS E , 
     City_Town_ALL F   
WHERE A.PRD_CODE = B.PRD_CODE 
AND A.BR_CODE = B.BR_CODE 
AND DECODE(A.SIZE_CODE,NULL,'L',A.SIZE_CODE) = B.SIZE_CODE -- for unbranded loose  
AND DECODE(B.VAR_CODE,'X','X',A.VAR_CODE) = B.VAR_CODE  
AND DECODE(B.COL_CODE,'X','X',A.COL_CODE) = B.COL_CODE  
AND DECODE(B.PACK_CODE,'X','X',A.PACKING_CODE) = B.PACK_CODE  
AND A.project_yy||A.project_MM BETWEEN B.START_DATE AND B.END_DATE  
AND A.PRD_CODE=J.PRD_CODE 
AND A.BR_CODE=J.BR_CODE 
AND A.FRM = C.FRM 
AND A.PROJECT_YY=L.YEAR 
AND A.frm=L.FORM_NO 
AND C.TOWN_VILL= D.U_R 
AND C.CLASS = D.CLASS 
AND D.TOWN=F.GRP 
AND D.TOWN = E.TOWN_CODE 
AND A.PROJECT_YY = E.PROJECT_YY 
AND A.PROJECT_MM = E.PROJECT_MM 
AND A.PROJECT_YY = C.PROJECT_YY 
AND A.PROJECT_MM = C.PROJECT_MM 
 -- FOR HOUSEJOLD_GL  
AND A.PROJECT_YY = D.YEAR 
AND A.PROJECT_MM = D.MONTH 


-- END HOUSEHOLD_GL  
AND C.TOWN_VILL = E.TOWN_VILL 
AND C.CLASS = E.CLASS 

AND C.TOWN_VILL = F.TOWN_VILL 
AND C.TOWN_CODE=F.CODE 

 AND (DECODE(e.PROJECT_YY,'1997','1','1998','1','1999','1','2000','1','2001','1','2002','1','2') = F.TYP ) 
GROUP BY A.TITLE,C.TOWN_VILL,F.CODE ,F.CITY_TOWN_MAKE,A.FRM,A.PRD_CODE,A.BR_CODE,A.SIZE_CODE ,B.PRICES, 
      A.PROJECT_YY,A.PROJECT_MM,d.province,D.BR_CODE ,D.STRATUM,L.LSM_GRP , 
      UNIVERSE ,E.SAMPLE

![替代文字][1]

[1]:http://C:\Documents and Settings\Hussain\My Documents\My Pictures\explain plan.jpg

【问题讨论】:

    标签: performance oracle oracle10g


    【解决方案1】:

    在此处查看SORT_AREA_SIZE 的 Oracle 文档。您可以使用alter session set sort_area_size=10000 命令为会话修改此设置,并为系统使用alter system。对于 SORT_AREA_RETAINED_SIZE 也是如此。

    您是否在结果集中提取了整个表(有 2.2 m 行)?里面有排序操作吗?

    查询性能不佳可能还有其他一些原因。可以分享一下查询和解释计划吗?

    【讨论】:

    • sort_area_size=10000 (如果我想扩展至 500MB,是否以 KB 为单位。我可以将其扩展至 500MB 对吗???)请告诉我。
    • 如果您阅读过文档,您可能会注意到这些值是以字节为单位的。
    【解决方案2】:

    当您使用 DBMS_Xplan.Display 方法为查询运行执行计划时,oracle 将估计(通常相当合理)您需要执行它的临时表空间存储大小。

    顺便说一下,220 万行可能与排序大小无关。 MAX 和 SUM 等聚合运算所需的内存更多地与结果集的大小有关,而不是与源数据的大小有关。

    顺便说一句,提供存储在您电脑上的 jpg 文件的链接不算作提供了执行计划。

    【讨论】:

      【解决方案3】:
      A.project_yy||A.project_MM BETWEEN B.START_DATE AND B.END_DATE
      

      您知道我们在数据库中有 DATE 数据类型,对吧?使用不正确的数据类型会使 Oracle 更难确定数据分布、谓词选择性和适当的查询计划

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-22
        • 2017-08-10
        • 2014-04-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多