Unique index metadata scan triggers expensive operations on Oracle
------------------------------------------------------------------

                 Key: GEOT-2758
                 URL: http://jira.codehaus.org/browse/GEOT-2758
             Project: GeoTools
          Issue Type: Bug
          Components: data jdbc-ng
    Affects Versions: 2.5.7
            Reporter: Andrea Aime
            Assignee: Andrea Aime
             Fix For: 2.5.8, 2.6-RC1


The patch that added the scan of the unique indexes in the JDBCDataStore (as a 
further option from pk) triggers a full equivalent of the postgres "analyze" on 
the table being scanned.
If the dataset is big the operation lasts for various minutes (3-5 in the 
FOSS4G benchmarking case).

The thing is due to the last parameter in the metadata request, asking for 
accurage page information about the index. Something we actually don't need, it 
should just be turned off (the parameter is actually 'true' ->  use 
approximative index page informations).
The following patch adds a bit of extra logging should some other metadata 
operation cause long waits and allows the approximate page informations to be 
used:

{code}
Index: src/main/java/org/geotools/jdbc/JDBCDataStore.java
===================================================================
--- src/main/java/org/geotools/jdbc/JDBCDataStore.java  (revisione 34060)
+++ src/main/java/org/geotools/jdbc/JDBCDataStore.java  (copia locale)
@@ -30,10 +30,12 @@
 import java.sql.Statement;
 import java.sql.Types;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -84,6 +86,7 @@
 import org.opengis.filter.sort.SortBy;
 import org.opengis.filter.sort.SortOrder;
 import org.opengis.referencing.crs.CoordinateReferenceSystem;
 
 import com.vividsolutions.jts.geom.Envelope;
 import com.vividsolutions.jts.geom.Geometry;
@@ -760,6 +763,8 @@
                     try {
                         String tableName = entry.getName().getLocalPart();
                         DatabaseMetaData metaData = cx.getMetaData();
+                        if(LOGGER.isLoggable(Level.FINE))
+                            LOGGER.fine("Getting information about primary 
keys of " + tableName);
                         ResultSet primaryKey = metaData.getPrimaryKeys(null, 
databaseSchema,
                                 tableName);
 
@@ -781,7 +786,9 @@
                                 // causes problems with Oracle, so we skip it
                                 if(!isView(metaData, databaseSchema, 
tableName)) {
                                     //no primary key, check for a unique index
-                                    ResultSet uniqueIndex =  
metaData.getIndexInfo(null, databaseSchema, tableName, true, false);
+                                    if(LOGGER.isLoggable(Level.FINE))
+                                        LOGGER.fine("Getting information about 
unique indexes of " + tableName);
+                                    ResultSet uniqueIndex =  
metaData.getIndexInfo(null, databaseSchema, tableName, true, true);
                                     try {
                                         pkey = createPrimaryKey(uniqueIndex, 
metaData, tableName, cx);
                                     }
{code]

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://jira.codehaus.org/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

------------------------------------------------------------------------------
Come build with us! The BlackBerry® Developer Conference in SF, CA
is the only developer event you need to attend this year. Jumpstart your
developing skills, take BlackBerry mobile applications to market and stay 
ahead of the curve. Join us from November 9-12, 2009. Register now!
http://p.sf.net/sfu/devconf
_______________________________________________
Geotools-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/geotools-devel

Reply via email to