注册
DM8收集用户统计信息及导出txt
培训园地/ 文章详情 /

DM8收集用户统计信息及导出txt

guoguo 2023/06/01 1850 1 0

1.创建临时存统计信息表:

DBMS_STATS.CREATE_STAT_TABLE('SYSDBA', 'OADB_ALLTB');

2.收集用户统计信息:

DBMS_STATS.GATHER_SCHEMA_STATS('TEST',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

3.导出统计信息

DECLARE
BEGIN 
    FOR RS IN (SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER IN ('TEST'))
    LOOP
        DBMS_STATS.EXPORT_TABLE_STATS(RS.OWNER,RS.TABLE_NAME,NULL,'OADB_ALLTB','table stats',true);
    END LOOP;
END;
/

4.查看表结构:(可选)

SP_TABLEDEF ('SYSDBA','STAT$_OADB_ALLTB');
结果如下:
CREATE TABLE "SYSDBA"."STAT$_OADB_ALLTB" 
(
"STATID" VARCHAR(128) NOT NULL, 
"OWNNAME" VARCHAR(128) NOT NULL,
"TABNAME" VARCHAR(128) NOT NULL,
"NAME" VARCHAR(128) NOT NULL, 
"T_FLAG" CHAR(1) NOT NULL,
"T_TOTAL" BIGINT,
"N_SAMPLE" BIGINT,
"N_DISTINCT" BIGINT,
"N_NULL" BIGINT,
"V_MIN" VARBINARY(255),
"V_MAX" VARBINARY(255),
"BLEVEL" TINYINT,
"N_LEAF_PAGES" BIGINT,
"N_LEAF_USED_PAGES" BIGINT,
"CLUSTER_FACTOR" INT,
"N_BUCKETS" SMALLINT,
"DATA" BLOB,
"COL_AVG_LEN" INT,  
"LAST_GATHERED" DATETIME(6),  
"INFO1" VARBINARY(255),  
"INFO2" VARBINARY(255),  
NOT CLUSTER PRIMARY KEY("STATID", "OWNNAME", "TABNAME", "NAME", "T_FLAG")) 
STORAGE(ON "MAIN", CLUSTERBTR)   
DISTRIBUTED BY HASH ("STATID", "OWNNAME", "TABNAME", "NAME", "T_FLAG")  ;

5.通过dmfldr导出txt

LOAD DATA
INFILE '/dm8/fldr/stats.txt'
INTO TABLE "SYSDBA"."STAT$_OADB_ALLTB"
FIELDS '|'

6.操作步骤:

SQL> DBMS_STATS.CREATE_STAT_TABLE('SYSDBA', 'OADB_ALLTB');

SQL> SELECT COUNT (*) FROM STAT$_OADB_ALLTB;

行号     COUNT(*)            
---------- --------------------
1          0

SQL> DBMS_STATS.GATHER_SCHEMA_STATS('TEST',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');

SQL> DECLARE
2   BEGIN 
3       FOR RS IN (SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER IN ('TEST'))
4       LOOP
5           DBMS_STATS.EXPORT_TABLE_STATS(RS.OWNER,RS.TABLE_NAME,NULL,'OADB_ALLTB','table stats',true);
6       END LOOP;
7   END;
8   /
警告: 在集函数中计算NULL值
DMSQL 过程已成功完成
已用时间: 270.512(毫秒). 执行号:506.
SQL> SELECT COUNT (*) FROM STAT$_OADB_ALLTB;

行号     COUNT(*)            
---------- --------------------
1          269

已用时间: 0.475(毫秒). 执行号:507.
SQL> 
SQL> 
SQL> desc STAT$_OADB_ALLTB;

行号     NAME       TYPE$          NULLABLE
---------- ---------- -------------- --------
1          STATID     VARCHAR(128)   N
2          OWNNAME    VARCHAR(128)   N
3          TABNAME    VARCHAR(128)   N
4          NAME       VARCHAR(128)   N
5          T_FLAG     CHAR(1)        N
6          T_TOTAL    BIGINT         Y
7          N_SAMPLE   BIGINT         Y
8          N_DISTINCT BIGINT         Y
9          N_NULL     BIGINT         Y
10         V_MIN      VARBINARY(255) Y
11         V_MAX      VARBINARY(255) Y

行号     NAME              TYPE$          NULLABLE
---------- ----------------- -------------- --------
12         BLEVEL            TINYINT        Y
13         N_LEAF_PAGES      BIGINT         Y
14         N_LEAF_USED_PAGES BIGINT         Y
15         CLUSTER_FACTOR    INTEGER        Y
16         N_BUCKETS         SMALLINT       Y
17         DATA              BLOB           Y
18         COL_AVG_LEN       INTEGER        Y
19         LAST_GATHERED     DATETIME(6)    Y
20         INFO1             VARBINARY(255) Y
21         INFO2             VARBINARY(255) Y

21 rows got

已用时间: 6.287(毫秒). 执行号:508.
SQL> 
SQL> SP_TABLEDEF ('SYSDBA','STAT$_OADB_ALLTB');

行号     COLUMN_VALUE                                                                                                                                                                                     
---------- -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
1          CREATE TABLE "SYSDBA"."STAT$_OADB_ALLTB"  (  "STATID" VARCHAR(128) NOT NULL,  "OWNNAME" VARCHAR(128) NOT NULL,  "TABNAME" VARCHAR(128) NOT NULL,  "NAME" VARCHAR(128) NOT NULL,  "T_FLAG" CHAR(1) NOT NULL,  "T_TOTAL" BIGINT,  "N_SAMPLE" BIGINT,  "N_DISTINCT" BIGINT,  "N_NULL" BIGINT,  "V_MIN" VARBINARY(255),  "V_MAX" VARBINARY(255),  "BLEVEL" TINYINT,  "N_LEAF_PAGES" BIGINT,  "N_LEAF_USED_PAGES" BIGINT,  "CLUSTER_FACTOR" INT,  "N_BUCKETS" SMALLINT,  "DATA" BLOB,  "COL_AVG_LEN" INT,  "LAST_GATHERED
2          " DATETIME(6),  "INFO1" VARBINARY(255),  "INFO2" VARBINARY(255),  NOT CLUSTER PRIMARY KEY("STATID", "OWNNAME", "TABNAME", "NAME", "T_FLAG")) STORAGE(ON "MAIN", CLUSTERBTR)   DISTRIBUTED BY HASH ("STATID", "OWNNAME", "TABNAME", "NAME", "T_FLAG")  ;

已用时间: 1.318(毫秒). 执行号:509.



[dmdba@localhost stats]$ cat stats.ctl 
LOAD DATA
INFILE '/dm8/fldr/stats/stats.txt'
INTO TABLE "SYSDBA"."STAT$_OADB_ALLTB"
FIELDS '|'
[dmdba@localhost stats]$ 
[dmdba@localhost stats]$ 
[dmdba@localhost stats]$ /dm8/bin/dmfldr sysdba/dameng123@192.168.52.188:5336 control=\'/dm8/fldr/stats/stats.ctl\' lob_directory=\'/dm8/fldr/stats\' mode=\'out\'
dmfldr V8
269 rows is load out
export success.
269 行数据已导出
用时:49.965(ms)


[dmdba@localhost stats]$ ll
总用量 76
-rw-r--r-- 1 dmdba dinstall 20694  5月 31 13:51 dmfldr.lob
-rw-r--r-- 1 dmdba dinstall   218  5月 31 13:51 fldr.log
-rw-r--r-- 1 dmdba dinstall    95  5月 31 13:50 stats.ctl
-rw-r--r-- 1 dmdba dinstall 42212  5月 31 13:51 stats.txt
[dmdba@localhost stats]$ head stats.txt
table stats|TEST|T1|T1|T|300|0|0|0|||0|5|5|0|0|dmfldr.lob:0:8|-1|2023-05-31 13:37:32.659||
table stats|TEST|T1|ID|C|300|300|300|0|01000000|2c010000|0|4|4|0|300|dmfldr.lob:8:2408|4|2023-05-31 13:37:32.663|||
table stats|TEST|T1|NAME|C|300|300|300|0|06000000434343333030|06000000454545453939|0|4|4|0|300|dmfldr.lob:2416:4399|6|2023-05-31 13:37:32.665||
table stats|TEST|T1|INDEX33555885|I|300|300|300|0|01000000|2c010000|0|4|4|0|300|dmfldr.lob:6815:2408|4|2023-05-31 13:37:32.671|1 13:37:32.665|||
table stats|TEST|MLOG$_T1|MLOG$_T1|T|0|0|0|0|0|||0|1|1|0|0|dmfldr.lob:9223:8|-1|2023-05-31 13:37:32.659|023-05-31 13:37:32.671|| 13:37:32.665||
table stats|TEST|T1_PN|T1_PN|T|1|0|0|0|0|0|0|1|1|0|0|dmfldr.lob:9231:8|-1|2023-05-31 13:37:32.653|2.659|023-05-31 13:37:3|.671|| 13:37:32.665|
table stats|TEST|T1_PN|ID|C|1|1|1|0|2c010000|2c010000|0|1|1|0|1|dmfldr.lob:9239:16|4|2023-05-31 13:37:32.655|5-31 13:37:3|.671|| 13:|7:32.665||
table stats|TEST|T1_PN|NAME|C|1|1|1|0|06000000434343333030|06000000434343333030|0|1|1|0|1|dmfldr.lob:9255:22|6|2023-05-31 13:37:32.658|32.665||||
table stats|TEST|T1_PN|INDEX33555889|I|1|1|1|0|2c010000|2c010000|0|1|1|0|1|dmfldr.lob:9277:16|4|2023-05-31 13:37:32.671|1 13:37:32.658|32.665|||||
table stats|TEST|T1_P3|T1_P3|T|100|0|0|0|1|1|0|1|1|0|0|dmfldr.lob:9293:8|-1|2023-05-31 13:37:32.646|-05-31 13:37:32.671|1 1|:37:32.658|32.665||

也可以通过dts工具
image.png
image.png
当然如果是为了迁移统计信息,还可以通过dexp/dimp方式。
先导入STAT$_OADB_ALLTB表信息,最后导入统计信息即可。
导入统计信息参考:

--还原统计信息,使用SYSDBA用户登陆数据库,执行下面备份语句
语法:DBMS_STATS.IMPORT_TABLE_STATS(OWNNAME, TABNAME, PARTNAME, STATTAB, STATID, CASCADE, STATOWN, NO_INVALIDATE, FORCE, STAT_CATEGORY);
参数详解
    OWNNAME 目标表的模式名,区分大小写。
    TABNAME 目标表名,区分大小写。
    PARTNAME 目标表分区名,如果不指定分区,则一起导出所有子表的统计信息,缺省为NULL。
    STATTAB 统计信息表名,区分大小写。
    STATID 由用户指定的统计信息标识名,缺省为空字符串。
    CASCADE 是否连列和索引的统计信息一起导出,缺省为 TRUE
    STATOWN 统计信息表的模式名,区分大小写,缺省为 NULL。
    NO_INVALIDATE 是否让依赖游标失效,缺省为 TRUE。
    FORCE 仅保留参数以兼容 ORACLE,功能暂未实现。
    STAT_CATEGORY 仅保留参数以兼容 ORACLE,功能暂未实现。
---单表
DBMS_STATS.IMPORT_TABLE_STATS('OA', 'OA_TABLE1', NULL, 'OADB_ALLTB', 'import stats test', TRUE, 'SYSDBA');
---多表
DECLARE
BEGIN
    FOR RS IN (SELECT OWNER,TABLE_NAME FROM DBA_TABLES WHERE OWNER IN ('SYSDBA','USER2'))
    LOOP
        BEGIN
            DBMS_STATS.IMPORT_TABLE_STATS(RS.OWNER,RS.TABLE_NAME,NULL,'OADB_ALLTB','TABLE STATS',TRUE);
        EXCEPTION
        WHEN OTHERS THEN
            PRINT ('OWNER:' || RS.OWNER);
            PRINT ('TABLE_NAME:' || RS.TABLE_NAME);
            PRINT ('CODE: ' || SQLCODE);
            PRINT ('ERRM: ' || SQLERRM);
        END;
    END LOOP;
END;
/

7.相关参考文档:

https://eco.dameng.com/document/dm/zh-cn/ops/performance-optimization
https://eco.dameng.com/document/dm/zh-cn/pm/dbms_stats-package
https://blog.csdn.net/qq_35273918/article/details/129398284
https://eco.dameng.com/community/post/202212091238397NIH3M0RMXZ0PBM5UO

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服