打印
[应用相关]

ArcSDE性能优化之更改ST_GEOMETRY的点串的LOB为CACHE

[复制链接]
612|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 | 只看该作者
GEOMETRY_STORAGE    "ST_GEOMETRY"
ST_GEOM_LOB_STORAGE  " STORE AS (
#                      TABLESPACE <lob segment tablespace_name>
                       ENABLE STORAGE IN ROW CHUNK 8K RETENTION CACHE) "

使用特权

评论回复
5
尽快回复过|  楼主 | 2022-2-23 23:55 | 只看该作者
      那么我们可以清楚的看到ArcGIS默认的LOB对象是以CACHE存储的。

      如果你只有小规模或者中等规模的LOB(例如使用LOB存储只有几KB的描述性文字),对其缓存就很有意义。如果不缓存,当用户更新描述字段时,还必须等待I/O将数据写至磁盘(将执行一个CHUNK大小的I/O,而且用户要等待这个I/O完成)。如果你在执行多个LOBde加载,那么加载每一行时都必须等待这个I/O完成,所以启动这些LOBde缓存很合理,如果一个大小为50MB的LOB,启动缓存也没有什么可以提高性能的意义了。

使用特权

评论回复
6
尽快回复过|  楼主 | 2022-2-23 23:57 | 只看该作者
那么如果我们使用ArcSDE SQL操作时,我们需要创建一个ST_GEOMETRY字段的数据表,然后对表进行注册sdelayer -o register,但是我们看一下


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

表已创建。

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

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

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

DBMS_METADATA.GET_DDL('TABLE','RRR')
--------------------------------------------------------------------------------
  NOCACHE LOGGING
  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 DEFAU
LT))

使用特权

评论回复
7
尽快回复过|  楼主 | 2022-2-27 23:46 | 只看该作者
即使我们使用Sdelayer -o register进行注册,相关的LOB仍然是NOCACHE状态,我们也可以进行相关的查询


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

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

--------------------------------------------------------------------------------
SEGMENT_NAME                   CACHE
------------------------------ ----------
"SHAPE"."POINTS"
SYS_LOB0000076971C00016$      NO

使用特权

评论回复
8
尽快回复过|  楼主 | 2022-2-27 23:48 | 只看该作者
那么我们可以使用以下命令进行修改

使用特权

评论回复
9
尽快回复过|  楼主 | 2022-2-27 23:49 | 只看该作者
SQL> alter table rrr modify lob(shape.points)(CACHE);

表已更改。

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

COLUMN_NAME
--------------------------------------------------------------------------------
SEGMENT_NAME                   CACHE
------------------------------ ----------
"SHAPE"."POINTS"
SYS_LOB0000076971C00016$      YES

使用特权

评论回复
10
尽快回复过|  楼主 | 2022-2-27 23:50 | 只看该作者
这方面在电信、电力的ArcGIS应用方面应该需要注意,因为这些行业基本上都是属于自己创建表,然后注册,然后使用SQL进行编辑。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

33

主题

512

帖子

0

粉丝