[Bug]ArcSDE10/10.1删除非版本数据慢的问题
2014-04-30 09:00
435 查看
环境:
中间件:ArcSDE10/10.1
数据库:Oracle
现象:用户在非版本编辑过程中,如果数据量非常大的情况下,在使用桌面删除某几条数据,速度非常慢。
一说起慢,大家都会想到是不是空间索引的问题,也会习惯性的重建空间索引,或者进行分析操作,但是做了这些之后,效果仍然不明显,那么问题的原因出在哪里呢?
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 首先我们还是要说明一下ArcSDE for Oracle的空间索引。
关于ArcSDE性能优化系列之索引篇的知识可以参考:/article/1358792.html
使用 ST_Geometry 存储方式创建的具有空间索引的要素类会在 Oracle 数据库中创建另一个表。此空间索引表的名称为 S<n>_IDX$,其中 <n> 是该表的几何索引值。可通过查询 SDE.ST_GEOMETRY_COLUMNS 表来获取该值。此空间索引表被创建为 Oracle 索引组织表 (IOT)。通过企业管理器查看时,ST_Geometry 属性的空间索引显示为 A<n>_IX1。值 <n> 表示存储在 LAYERS 表中的 LAYER_ID 值。
在 S<n>_IDX$ 表中还创建了另外两个索引:S<n>$_IX1 和 S<n>$_IX2。可以通过更改创建要素类时指定的 DBTUNE 配置关键字中的 S_STORAGE 参数来指定这些索引在 DBMS 中的存储方式。
从上面的描述我们可以得出,ArcSDE的要素类的高效浏览直接原因就是空间索引,但是空间索引也是有索引的,也就是说所谓的S表是空间索引表,但是空间索引表还有索引就是上面提到的S<n>$_IX1 和 S<n>$_IX2。
我们以ArcSDE10.1为例来看一下相关信息
我们看一下空间索引表的结构
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------我们看看ArcSDE10.2的空间索引的索引
从这两个不同的索引类型来说,IX2(Normal)的索引的选择度要高于IX1(IOT),而且IX2 是以索引的对象的SP_ID字段做索引的,效率是很高的。
所以,问题的根本原因就是ArcSDE10/10.1修改了源码,导致没有创建Normal类型的空间索引的索引,导致在查询空间索引的基础上效率不高的。
不过这个问题在ArcSDE10.2已经解决了。
解决方法可以参考:http://support.esri.com/en/knowledgebase/techarticles/detail/40871
补丁发布:http://support.esri.com/en/downloads/patches-servicepacks/view/productid/66/metaid/1941
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------
感谢@liufeng的技术指导!----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------
中间件:ArcSDE10/10.1
数据库:Oracle
现象:用户在非版本编辑过程中,如果数据量非常大的情况下,在使用桌面删除某几条数据,速度非常慢。
一说起慢,大家都会想到是不是空间索引的问题,也会习惯性的重建空间索引,或者进行分析操作,但是做了这些之后,效果仍然不明显,那么问题的原因出在哪里呢?
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301---------------------------------------------------------------------------------- 首先我们还是要说明一下ArcSDE for Oracle的空间索引。
关于ArcSDE性能优化系列之索引篇的知识可以参考:/article/1358792.html
使用 ST_Geometry 存储方式创建的具有空间索引的要素类会在 Oracle 数据库中创建另一个表。此空间索引表的名称为 S<n>_IDX$,其中 <n> 是该表的几何索引值。可通过查询 SDE.ST_GEOMETRY_COLUMNS 表来获取该值。此空间索引表被创建为 Oracle 索引组织表 (IOT)。通过企业管理器查看时,ST_Geometry 属性的空间索引显示为 A<n>_IX1。值 <n> 表示存储在 LAYERS 表中的 LAYER_ID 值。
在 S<n>_IDX$ 表中还创建了另外两个索引:S<n>$_IX1 和 S<n>$_IX2。可以通过更改创建要素类时指定的 DBTUNE 配置关键字中的 S_STORAGE 参数来指定这些索引在 DBMS 中的存储方式。
从上面的描述我们可以得出,ArcSDE的要素类的高效浏览直接原因就是空间索引,但是空间索引也是有索引的,也就是说所谓的S表是空间索引表,但是空间索引表还有索引就是上面提到的S<n>$_IX1 和 S<n>$_IX2。
我们以ArcSDE10.1为例来看一下相关信息
我们看一下空间索引表的结构
SQL> desc s45_IDX$ 名称 是否为空? 类型 ----------------------------------------- -------- --------------------- GX NOT NULL NUMBER(38) GY NOT NULL NUMBER(38) MINX NOT NULL NUMBER(38) MINY NOT NULL NUMBER(38) MAXX NOT NULL NUMBER(38) MAXY NOT NULL NUMBER(38) SP_ID NOT NULL ROWID然后根据这个空间索引表,我们看看这个索引表的索引是
SQL> select index_name,index_type from user_indexes where table_name='S45_IDX$'; INDEX_NAME INDEX_TYPE ------------------------------ --------------------------- S45$_IX1 IOT - TOP我们看到,ArcSDE10/10.1的空间索引的索引只有一个表,而不是上面所述的两个表,而且这个索引表的类型是IOT的,IOT索引一般是创建主键索引
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------我们看看ArcSDE10.2的空间索引的索引
SQL> select index_name,index_type from user_indexes where table_name='S4_IDX$'; INDEX_NAME INDEX_TYPE ------------------------------ --------------------------- S4$_IX1 IOT - TOP S4$_IX2 NORMAL这里面我们看到创建了有两个索引对象一个是IOT一个是NORMAL
SQL> select dbms_metadata.get_ddl('INDEX','S4$_IX1','SDE') from dual; DBMS_METADATA.GET_DDL('INDEX','S4$_IX1','SDE') -------------------------------------------------------------------------------- CREATE UNIQUE INDEX "SDE"."S4$_IX1" ON "SDE"."S4_IDX$" ("GX", "GY", "MAXX", "MAXY", "MINX", "MINY", "SP_ID") PCTFREE 0 INITRANS 4 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "SDE" SQL> select dbms_metadata.get_ddl('INDEX','S4$_IX2','SDE') from dual; DBMS_METADATA.GET_DDL('INDEX','S4$_IX2','SDE') -------------------------------------------------------------------------------- CREATE INDEX "SDE"."S4$_IX2" ON "SDE"."S4_IDX$" ("SP_ID") PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT) TABLESPACE "SDE"
从这两个不同的索引类型来说,IX2(Normal)的索引的选择度要高于IX1(IOT),而且IX2 是以索引的对象的SP_ID字段做索引的,效率是很高的。
所以,问题的根本原因就是ArcSDE10/10.1修改了源码,导致没有创建Normal类型的空间索引的索引,导致在查询空间索引的基础上效率不高的。
不过这个问题在ArcSDE10.2已经解决了。
解决方法可以参考:http://support.esri.com/en/knowledgebase/techarticles/detail/40871
补丁发布:http://support.esri.com/en/downloads/patches-servicepacks/view/productid/66/metaid/1941
----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------
Bug
NIM-084235Nimbus ID | NIM084235 |
---|---|
Submitted | Aug 28, 2012 4:22 PM |
Severity | Critical |
Applies To | ArcGIS |
Version Found | 10.1 |
Prog Language | N/A |
Server Platform | All |
Client Platform | |
Database | Oracle |
Locale | N/A |
Status | Resolved |
Version Fixed | 10.2 |
SP Fixed | 10.2 |
Synopsis
St_Geometry spatial indexes do not create S###$_IX2 indexes on the IOT SP_ID column.Additional Status Information
N/AAlternate Solution
Create the index manually感谢@liufeng的技术指导!----------------------------------------------------------------------------------版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!
Blog: http://blog.csdn.net/linghe301----------------------------------------------------------------------------------
相关文章推荐
- 解决ArcSDE版本编辑及删除数据时出现的
- Android;sql数据库:关于删除数据库数据无法刷新listview并且新listview的修改增加功能出现bug的问题
- [Bug]ArcGIS Desktop10.1进行Join版本数据操作报:"ORA-00904: invalid identifier"
- ARCSDE数据编辑版本问题讨论
- 解决ArcSDE版本编辑及删除数据时出现的Lock request conflicts with an established lock
- ArcSDE 10 for Microsoft SQL Server 2008安装以及导入数据遇到的问题总结
- ArcSDE 10 for Microsoft SQL Server 2008安装以及导入数据遇到的问题总结
- oracle 数据库删除表或表数据恢复问题
- 如何让 TreeView 的列表项携带数据、并读出或删除这个数据 - 回复 "Splendour" 的问题
- oracle11g、10g同时安装数据导入导出无法识别数据库版本问题
- 如何解决使用addBatch()和executeBatch()无法批量增加删除修改数据库数据等问题
- 如何解决ORA-01033问题(数据文件误删除 )
- 在ORACLE中给已有数据的表增加、修改、删除一个字段(或一个列)或者多个字段(或多个列)的问题
- SSH框架之Hibernate一对多关系数据绑值修改删除出现问题
- Mysql单文件存储删除数据文件容量不会减少的bug与解决方法
- 关于使用POI导出时excel版本问题的bug解决
- Oracle11g中数据的倒库和入库操作以及高版本数据导入低版本数据可能引发的问题
- [Bug]ArcGIS10.1 for Desktop为SDE栅格数据集创建金字塔只能创建level1的问题
- 使用事务实现--转账问题:从0001账户转1000块到0002账户。打开"隐式事务":设置为开,删除表中数据,回滚!(默认情况为关,如果打开了则不自动提交,学要手动提交)