The attached are two output logs with debug on. You can see that the output from GDAL 3.7 has two extra queries at the beginning. These queries only happen when the eAccess is GA_ReadOnly. The logs are generated with the same command parameters to gdal_translate.
From: Even Rouault <even.roua...@spatialys.com> Date: Tuesday, November 28, 2023 at 6:36 PM To: Fengting Chen <fengting.c...@oracle.com>, gdal-dev@lists.osgeo.org <gdal-dev@lists.osgeo.org> Subject: [External] : Re: [gdal-dev] GDAL driver Open() calls Hi, Please share the stack trace (on a debug build) of both instances where GDALOpen() is called Even Le 28/11/2023 à 23:40, Fengting Chen via gdal-dev a écrit : Hi, I noticed from the GeoRaster driver that in GDAL 3.6 and 3.7 (maybe 3.8 too), there are two GDALOpen() calls on the driver with GDALOpenInfo eAccess as GA_ReadOnly, even when the GeoRaster is the output format in gdal_translate command. There are no such calls in GDAL 3.4. I am wondering if these invocations of Open() with eAccess as GA_ReadOnly are necessary when the driver is the output driver. This has caused performance issue for the GeoRaster driver when a user is trying to load the data into Oracle database because it has two unnecessary reads from the database. If these Open() calls are unavoidable, how to differentiate the calls whether it is as input or as output in the gdal_translate command? Thanks. _______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org<mailto:gdal-dev@lists.osgeo.org> https://lists.osgeo.org/mailman/listinfo/gdal-dev<https://urldefense.com/v3/__https:/lists.osgeo.org/mailman/listinfo/gdal-dev__;!!ACWV5N9M2RV99hQ!IqVgHqcg5DBb3fu5ZpXizGqYnezdKvCzFALf06Gt-Vs7RiPPCXFACcefd_slweWtNCqHy-G-OsmoPt9XZqR4DOWs5UiD$> -- http://www.spatialys.com<https://urldefense.com/v3/__http:/www.spatialys.com__;!!ACWV5N9M2RV99hQ!IqVgHqcg5DBb3fu5ZpXizGqYnezdKvCzFALf06Gt-Vs7RiPPCXFACcefd_slweWtNCqHy-G-OsmoPt9XZqR4DFVEpZ99$> My software is free, but my time generally not.
GDAL: Auto register /scratch/oracle/md/gdal/lib/gdalplugins/gdal_GEOR.so using GDALRegister_GEOR. GDAL: Auto register /scratch/oracle/md/gdal/lib/gdalplugins/gdal_JP2OpenJPEG.so using GDALRegister_JP2OpenJPEG. GDAL: Auto register /scratch/oracle/md/gdal/lib/gdalplugins/ogr_OCI.so using RegisterOGROCI. Warning 1: tgrcb1.tif: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. GDAL: GDALOpen(tgrcb1.tif, this=0x1740bb0) succeeds as GTiff. GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete() GTiff: ScanDirectories() Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. GDAL: GDALDefaultOverviews::OverviewScan() GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete() GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x1af58d0) succeeds as GeoRaster. PL/SQL: DECLARE TAB VARCHAR2(68) := UPPER('grtab'); COL VARCHAR2(68) := UPPER('grobj'); OWN VARCHAR2(68) := UPPER('herman'); CNT NUMBER := 0; BEGIN EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)' INTO CNT USING TAB, OWN; IF CNT = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE grtab (grobj MDSYS.SDO_GEORASTER)'; SDO_GEOR_UTL.createDMLTrigger( TAB, COL ); END IF; END; PL/SQL: DECLARE TAB VARCHAR2(68) := UPPER('grtab'); COL VARCHAR2(68) := UPPER('grobj'); OWN VARCHAR2(68) := UPPER('herman'); CNT NUMBER := 0; GR1 SDO_GEORASTER := NULL; BEGIN INSERT INTO grtab VALUES(6, sdo_geor.init('rdt_1', 6)) RETURNING grobj INTO GR1; GR1.spatialExtent := NULL; SELECT GR1.RASTERDATATABLE INTO :rdt FROM DUAL; SELECT GR1.RASTERID INTO :rid FROM DUAL; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_OBJECT_TABLES WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)' INTO CNT USING :rdt, OWN; IF CNT = 0 THEN EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)' INTO CNT USING :rdt, OWN; END IF; IF CNT = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE '||:rdt||' ( RASTERID NUMBER, PYRAMIDLEVEL NUMBER, BANDBLOCKNUMBER NUMBER, ROWBLOCKNUMBER NUMBER, COLUMNBLOCKNUMBER NUMBER, BLOCKMBR SDO_GEOMETRY, RASTERBLOCK BLOB, CONSTRAINT '||:rdt||'_RDT_PK PRIMARY KEY (RASTERID, PYRAMIDLEVEL, BANDBLOCKNUMBER, ROWBLOCKNUMBER, COLUMNBLOCKNUMBER)) LOB(RASTERBLOCK) STORE AS SECUREFILE(CACHE)'; END IF; SDO_GEOR.createTemplate(GR1, 21001, 'dimSize=(448,503,7) blockSize=(512, 512, 1) cellDepth=8BIT_U interleaving=BSQ compression=NONE', null, 'TRUE'); UPDATE grtab T SET grobj = GR1 WHERE T.grobj.RasterDataTable = :rdt AND T.grobj.RasterId = :rid; EXECUTE IMMEDIATE 'SELECT T.grobj.METADATA.getClobVal() FROM grtab T WHERE T.grobj.RASTERDATATABLE = UPPER(:1) AND T.grobj.RASTERID = :2' INTO :metadata USING :rdt, :rid; END; GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x1af58d0) PL/SQL: BEGIN IF :datatable IS NOT NULL AND :rasterid IS NOT NULL THEN EXECUTE IMMEDIATE 'SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM ALL_SDO_GEOR_SYSDATA WHERE RDT_TABLE_NAME = UPPER(:1) AND RASTER_ID = :2' INTO :owner, :table, :column USING :datatable, :rasterid; EXECUTE IMMEDIATE 'SELECT T.'||:column||'.METADATA.getClobVal() FROM '||:owner||'.'||:table||' T WHERE T.'||:column||'.RASTERDATATABLE = UPPER(:1) AND T.'||:column||'.RASTERID = :2' INTO :metadata USING :datatable, :rasterid; :counter := 1; ELSE EXECUTE IMMEDIATE 'SELECT T.'||:column||'.RASTERDATATABLE, T.'||:column||'.RASTERID, T.'||:column||'.METADATA.getClobVal() FROM '||:owner||'.'||:table||' T WHERE '||:where INTO :datatable, :rasterid, :metadata; :counter := 1; END IF; EXCEPTION WHEN no_data_found THEN :counter := 0; WHEN too_many_rows THEN :counter := 2; END; GDAL: GDALOpen(georaster:herman,vampire,cdb1_pdb1,RDT_1,6, this=0x1af58d0) succeeds as GeoRaster.
GDAL: Auto register /scratch/gdal/gdal-3.7.0/dist/lib64/gdalplugins/ gdal_JP2OpenJPEG.so using GDALRegister_JP2OpenJPEG. GDAL: Auto register /scratch/gdal/gdal-3.7.0/dist/lib64/gdalplugins/gdal_GEOR. so using GDALRegister_GEOR. GDAL: Auto register /scratch/gdal/gdal-3.7.0/dist/lib64/gdalplugins/ogr_OCI.so using RegisterOGROCI. Warning 1: tgrcb1.tif: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. GDAL: GDALOpen(tgrcb1.tif, this=0x2412370) succeeds as GTiff. PL/SQL: SELECT T.grobj.RASTERDATATABLE, T.grobj.RASTERID, extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/dimensionSize[@ type="ROW"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/dimensionSize[@ type="COLUMN"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/dimensionSize[@ type="BAND"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/cellDepth', 'xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/spatialReferenceInfo/ SRID','xmlns="http://xmlns.oracle.com/spatial/georaster"') FROM grtab T WHERE grobj IS NOT NULL ORDER BY T.grobj.RASTERDATATABLE ASC, T.grobj.RASTERID ASC GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000) succeeds as GeoRaster. GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000) GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete() GTiff: ScanDirectories() Warning 1: TIFFReadDirectory:Sum of Photometric type-related color channels and ExtraSamples doesn't match SamplesPerPixel. Defining non-color channels as ExtraSamples. GDAL: GDALDefaultOverviews::OverviewScan() PL/SQL: SELECT T.grobj.RASTERDATATABLE, T.grobj.RASTERID, extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/dimensionSize[@ type="ROW"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/dimensionSize[@ type="COLUMN"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/dimensionSize[@ type="BAND"]/size','xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/rasterInfo/cellDepth', 'xmlns="http://xmlns.oracle.com/spatial/georaster"'), extractValue(t.grobj.metadata, '/georasterMetadata/spatialReferenceInfo/ SRID','xmlns="http://xmlns.oracle.com/spatial/georaster"') FROM grtab T WHERE grobj IS NOT NULL ORDER BY T.grobj.RASTERDATATABLE ASC, T.grobj.RASTERID ASC GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000) succeeds as GeoRaster. GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000) GDAL: QuietDelete(geor:herman/vampire@cdb1_pdb1,grtab,grobj) invoking Delete() GDAL: GDALOpen(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000) succeeds as GeoRaster. PL/SQL: DECLARE TAB VARCHAR2(68) := UPPER('grtab'); COL VARCHAR2(68) := UPPER('grobj'); OWN VARCHAR2(68) := UPPER('herman'); CNT NUMBER := 0; BEGIN EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)' INTO CNT USING TAB, OWN; IF CNT = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE grtab (grobj MDSYS.SDO_GEORASTER)'; SDO_GEOR_UTL.createDMLTrigger( TAB, COL ); END IF; END; PL/SQL: DECLARE TAB VARCHAR2(68) := UPPER('grtab'); COL VARCHAR2(68) := UPPER('grobj'); OWN VARCHAR2(68) := UPPER('herman'); CNT NUMBER := 0; GR1 SDO_GEORASTER := NULL; BEGIN INSERT INTO grtab VALUES(5, sdo_geor.init('rdt_1', 5)) RETURNING grobj INTO GR1; GR1.spatialExtent := NULL; SELECT GR1.RASTERDATATABLE INTO :rdt FROM DUAL; SELECT GR1.RASTERID INTO :rid FROM DUAL; EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_OBJECT_TABLES WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)' INTO CNT USING :rdt, OWN; IF CNT = 0 THEN EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ALL_TABLES WHERE TABLE_NAME = :1 AND OWNER = UPPER(:2)' INTO CNT USING :rdt, OWN; END IF; IF CNT = 0 THEN EXECUTE IMMEDIATE 'CREATE TABLE '||:rdt||' ( RASTERID NUMBER, PYRAMIDLEVEL NUMBER, BANDBLOCKNUMBER NUMBER, ROWBLOCKNUMBER NUMBER, COLUMNBLOCKNUMBER NUMBER, BLOCKMBR SDO_GEOMETRY, RASTERBLOCK BLOB, CONSTRAINT '||:rdt||'_RDT_PK PRIMARY KEY (RASTERID, PYRAMIDLEVEL, BANDBLOCKNUMBER, ROWBLOCKNUMBER, COLUMNBLOCKNUMBER)) LOB(RASTERBLOCK) STORE AS SECUREFILE(CACHE)'; END IF; SDO_GEOR.createTemplate(GR1, 21001, 'dimSize=(448,503,7) blockSize=(512, 512, 1) cellDepth=8BIT_U interleaving=BIP compression=NONE', null, 'TRUE'); UPDATE grtab T SET grobj = GR1 WHERE T.grobj.RasterDataTable = :rdt AND T.grobj.RasterId = :rid; EXECUTE IMMEDIATE 'SELECT T.grobj.METADATA.getClobVal() FROM grtab T WHERE T.grobj.RASTERDATATABLE = UPPER(:1) AND T.grobj.RASTERID = :2' INTO :metadata USING :rdt, :rid; END; GDAL: GDALClose(geor:herman/vampire@cdb1_pdb1,grtab,grobj, this=0x270c000) PL/SQL: BEGIN IF :datatable IS NOT NULL AND :rasterid IS NOT NULL THEN EXECUTE IMMEDIATE 'SELECT OWNER, TABLE_NAME, COLUMN_NAME FROM ALL_SDO_GEOR_SYSDATA WHERE RDT_TABLE_NAME = UPPER(:1) AND RASTER_ID = :2' INTO :owner, :table, :column USING :datatable, :rasterid; EXECUTE IMMEDIATE 'SELECT T.'||:column||'.METADATA.getClobVal() FROM '||:owner||'.'||:table||' T WHERE T.'||:column||'.RASTERDATATABLE = UPPER(:1) AND T.'||:column||'.RASTERID = :2' INTO :metadata USING :datatable, :rasterid; :counter := 1; ELSE EXECUTE IMMEDIATE 'SELECT T.'||:column||'.RASTERDATATABLE, T.'||:column||'.RASTERID, T.'||:column||'.METADATA.getClobVal() FROM '||:owner||'.'||:table||' T WHERE '||:where INTO :datatable, :rasterid, :metadata; :counter := 1; END IF; EXCEPTION WHEN no_data_found THEN :counter := 0; WHEN too_many_rows THEN :counter := 2; END; GDAL: GDALOpen(georaster:herman,vampire,cdb1_pdb1,RDT_1,5, this=0x270c000) succeeds as GeoRaster.
_______________________________________________ gdal-dev mailing list gdal-dev@lists.osgeo.org https://lists.osgeo.org/mailman/listinfo/gdal-dev