[应用相关] ArcSDE性能优化之更改ST_GEOMETRY的点串的LOB为CACHE

[复制链接]
1159|9
 楼主| 尽快回复过 发表于 2022-2-23 23:39 | 显示全部楼层 |阅读模式
  LOB(large object)是一种用于存储大对象的数据类型,如医学记录(如X-射线)、视频、图像等。LOB有三种类型:BLOB:Binary Large Object、CLOB:Character Large Object、DBCLOB:Double-byte  Character Large Object。每个LOB可以有2GB。

 楼主| 尽快回复过 发表于 2022-2-23 23:40 | 显示全部楼层
我们可以查看一下ST_GEOMETRY的结构
SQL> desc st_geometry;
st_geometry 不是最终的
名称                                      是否为空? 类型
----------------------------------------- -------- -----------
ENTITY                                             NUMBER(38)
NUMPTS                                             NUMBER(38)
MINX                                               FLOAT(64)
MINY                                               FLOAT(64)
MAXX                                               FLOAT(64)
MAXY                                               FLOAT(64)
MINZ                                               FLOAT(64)
MAXZ                                               FLOAT(64)
MINM                                               FLOAT(64)
MAXM                                               FLOAT(64)
AREA                                               FLOAT(64)
LEN                                                FLOAT(64)
SRID                                               NUMBER(38)
POINTS                                             BLOB
 楼主| 尽快回复过 发表于 2022-2-23 23:52 | 显示全部楼层
那么我们可以看到ST_GEOMETRY不管是点、线、面,到最后都是以点串的形式存储BLOB,那么我们可以从在安装ArcSDE PostInstallation看到DBTUNE的配置文件关于ST_GEOMETRY中LOB的定义
 楼主| 尽快回复过 发表于 2022-2-23 23:54 | 显示全部楼层
  1. GEOMETRY_STORAGE    "ST_GEOMETRY"
  2. ST_GEOM_LOB_STORAGE  " STORE AS (
  3. #                      TABLESPACE <lob segment tablespace_name>
  4.                        ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE) "
 楼主| 尽快回复过 发表于 2022-2-23 23:55 | 显示全部楼层
      那么我们可以清楚的看到ArcGIS默认的LOB对象是以CACHE存储的。

      如果你只有小规模或者中等规模的LOB(例如使用LOB存储只有几KB的描述性文字),对其缓存就很有意义。如果不缓存,当用户更新描述字段时,还必须等待I/O将数据写至磁盘(将执行一个CHUNK大小的I/O,而且用户要等待这个I/O完成)。如果你在执行多个LOBde加载,那么加载每一行时都必须等待这个I/O完成,所以启动这些LOBde缓存很合理,如果一个大小为50MB的LOB,启动缓存也没有什么可以提高性能的意义了。
 楼主| 尽快回复过 发表于 2022-2-23 23:57 | 显示全部楼层
那么如果我们使用ArcSDE SQL操作时,我们需要创建一个ST_GEOMETRY字段的数据表,然后对表进行注册sdelayer -o register,但是我们看一下


  1. SQL> create table rrr (shape sde.st_geometry);

  2. 表已创建。

  3. SQL> select dbms_metadata.get_ddl('TABLE','RRR') from dual;

  4. DBMS_METADATA.GET_DDL('TABLE','RRR')
  5. --------------------------------------------------------------------------------

  6.   CREATE TABLE "TEST"."RRR"
  7.    (    "SHAPE" "SDE"."ST_GEOMETRY"
  8.    ) SEGMENT CREATION IMMEDIATE
  9.   PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  10.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  11.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAUL
  12. T CELL_FLASH_CACHE DEFAULT)
  13.   TABLESPACE "ESRI"
  14. LOB ("SHAPE"."POINTS") STORE AS BASICFILE (
  15.   TABLESPACE "ESRI" ENABLE STORAGE IN ROW CHUNK 8192 PCTVERSION 10

  16. DBMS_METADATA.GET_DDL('TABLE','RRR')
  17. --------------------------------------------------------------------------------
  18.   NOCACHE LOGGING
  19.   STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  20.   PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAU
  21. LT))
 楼主| 尽快回复过 发表于 2022-2-27 23:46 | 显示全部楼层
即使我们使用Sdelayer -o register进行注册,相关的LOB仍然是NOCACHE状态,我们也可以进行相关的查询


  1. SQL> select column_name,segment_name, cache from user_lobs where table_name='RRR';

  2. COLUMN_NAME
  3. 我们可以看到尽管在注册时添加-t ST_GEOMETRY也不行,这可能是一个Bug吧

  4. --------------------------------------------------------------------------------
  5. SEGMENT_NAME                   CACHE
  6. ------------------------------ ----------
  7. "SHAPE"."POINTS"
  8. SYS_LOB0000076971C00016$      NO
 楼主| 尽快回复过 发表于 2022-2-27 23:48 | 显示全部楼层
那么我们可以使用以下命令进行修改
 楼主| 尽快回复过 发表于 2022-2-27 23:49 | 显示全部楼层
  1. SQL> alter table rrr modify lob(shape.points)(CACHE);

  2. 表已更改。

  3. SQL> select column_name,segment_name, cache from user_lobs where table_name='RRR';

  4. COLUMN_NAME
  5. --------------------------------------------------------------------------------
  6. SEGMENT_NAME                   CACHE
  7. ------------------------------ ----------
  8. "SHAPE"."POINTS"
  9. SYS_LOB0000076971C00016$      YES
 楼主| 尽快回复过 发表于 2022-2-27 23:50 | 显示全部楼层
这方面在电信、电力的ArcGIS应用方面应该需要注意,因为这些行业基本上都是属于自己创建表,然后注册,然后使用SQL进行编辑。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

45

主题

599

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部