[opencms-dev] Oracle performance && varchar columns

Bernat López bernatl at adequa.net
Sat Mar 28 20:31:01 CET 2009


Hi all,

Reviewing the Oracle version of OpenCMS (7.0.5) script for creating tables (create_tables.sql) I've noticed than some column type is varchar (not varchar2) such as:
CMS_STATICEXPORT_LINKS.LINK_ID
CMS_ONLINE_STRUCTURE.RESOURCE_ID
CMS_HISTORY_STRUCTURE.PARENT_ID

Is there any reason why this is so? Why these columns aren't varchar2? :-S ... is this a bug?

We've run some large test: xmlcontent publish+static export (>10.000 contents) and we've monitored Oracle identifying two slow queries:
SELECT OCMS.CMS_OFFLINE_STRUCTURE.STRUCTURE_ID,OCMS.CMS_OFFLINE_STRUCTURE.RESOURCE_ID
...
FROM OCMS.CMS_OFFLINE_STRUCTURE,OCMS.CMS_OFFLINE_RESOURCES 
WHERE OCMS.CMS_OFFLINE_STRUCTURE.RESOURCE_PATH=:1 AND OCMS.CMS_OFFLINE_STRUCTURE.RESOURCE_ID=OCMS.CMS_OFFLINE_RESOURCES.RESOURCE_ID 
ORDER BY OCMS.CMS_OFFLINE_STRUCTURE.STRUCTURE_STATE ASC

and 

SELECT OCMS.CMS_ONLINE_STRUCTURE.STRUCTURE_ID,OCMS.CMS_ONLINE_STRUCTURE.RESOURCE_ID,
...
FROM OCMS.CMS_ONLINE_STRUCTURE,OCMS.CMS_ONLINE_RESOURCES 
WHERE OCMS.CMS_ONLINE_STRUCTURE.RESOURCE_PATH=:1 AND 
      OCMS.CMS_ONLINE_STRUCTURE.RESOURCE_ID=OCMS.CMS_ONLINE_RESOURCES.RESOURCE_ID 
ORDER BY OCMS.CMS_ONLINE_STRUCTURE.STRUCTURE_STATE ASC

Query1 Statistics:
% Total DB Time: 52% 
590000 executions (0.018 secs per exec) 
Buffer gets: 60% of total 
Disk reads: 5% of total 

Query2 Statistics:
% Total DB Time: 26% 
320000 executions (0.016 secs per exec)
Buffer gets: 33% of total 
Disk reads: 83% del total

Query1 Explain Plan
SELECT STATEMENT ALL ROWS
  SORT ORDER BY
    HASH JOIN
     TABLE ACCESS BY INDEX ROWID TABLE OCMS.CMS_OFFLINE_STRUCTURE
       INDEX RANGE SCAN INDEX OCMS.CMS_OFFLINE_STRUCTURE_07_IDX
       TABLE ACCESS FULL TABLE OCMS.CMS_OFFLINE_RESOURCES (Cardinality 32900, Cost 290!!!)

Query2 Explain Plan
SELECT STATEMENT ALL ROWS
  SORT ORDER BY
    HASH JOIN 
      TABLE ACCESS BY INDEX ROWID TABLE OCMS.CMS_ONLINE_STRUCTURE
        INDEX RANGE SCAN INDEX OCMS.CMS_ONLINE_STRUCTURE_07_IDX
          TABLE ACCESS FULL TABLE OCMS.CMS_ONLINE_RESOURCES (Cardinality 34200, cost 290!!)

30000 rows table full acces for 900000 executions :-((((

I don't understand these FULL TABLE ACCESS for CMS_ONLINE_RESOURCES and CMS_OFFLINE_RESOURCES? These tables are indexed by RESOURCE_ID... but:

CMS_ONLINE_STRUCTURE.RESOURCE_ID type VARCHAR (36)
CMS_OFFLINE_STRUCTURE.RESOURCE_ID type VARCHAR (36)
CMS_OFFLINE_RESOURCES.RESOURCE_ID type VARCHAR2(36)
and CMS_ONLINE_RESOURCE.RESOURCE_ID type VARCHAR2(36)

Could be these difference of data types (structure.resource_id varchar versus resource.resouce_id varchar2) the reason for not using the index in the join (structure.resource_id = resource.resource_id)?  Any tuning ideas?

Kind regards!

b
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.opencms.org/pipermail/opencms-dev/attachments/20090328/52da2f3e/attachment.html>


More information about the opencms-dev mailing list