知识库

标准化实施手册及常见错误


达梦收集统计信息与重建索引

<p>[TOC]</p> <h2>一、何为统计信息</h2> <p>计信息主要是描述数据库中表和索引的大小数以及数据分布状况等的一类信息。比如:表的行数、块数、平均每行的大小、索引的高度、叶子节点数以及索引字段的行数等。</p> <p>统计信息对于 CBO(基于代价的优化器)生成执行计划具有直接影响。例如在嵌套循环中需要选择小表作为驱动表,两个关联表哪个是小表完全取决于统计信息中记录的数据量信息。此外,访问一个表是否要走索引,关联查询能否采用其它关联方式等都是 CBO 基于统计信息确定的。因此,统计信息的准确是生成最优执行计划的必要前提</p> <h2>二、收集统计信息的方法如下所示(SYSDBA登录):</h2> <p><strong><code>警告:统计信息收集过程中将对数据库性能造成一定影响,避免在业务高峰期收集统计信息</code></strong></p> <ul> <li> <h4>收集指定用户下所有表所有列的统计信息:</h4> <pre><code class="language-sql">DBMS_STATS.GATHER_SCHEMA_STATS('username',100,TRUE,'FOR ALL COLUMNS SIZE AUTO');</code></pre> </li> <li> <h4>收集指定用户下所有索引的统计信息:</h4> <pre><code class="language-sql">DBMS_STATS.GATHER_SCHEMA_STATS('usename',1.0,TRUE,'FOR ALL INDEXED SIZE AUTO');</code></pre> </li> <li> <h4>或 收集单个索引统计信息:</h4> <pre><code class="language-sql">DBMS_STATS.GATHER_INDEX_STATS('username','IDX_T2_X');</code></pre> </li> <li> <h4>收集指定用户下某表统计信息:</h4> <pre><code class="language-sql">DBMS_STATS.GATHER_TABLE_STATS('username','table_name',null,100,TRUE,'FOR ALL COLUMNS SIZE AUTO');</code></pre> </li> <li> <h4>收集某表某列的统计信息:</h4> <pre><code class="language-sql">STAT 100 ON table_name(column_name);</code></pre> </li> </ul> <h2>三、可设置自动收集统计信息</h2> <p>DM 数据库支持统计信息的自动收集,当全表数据量变化超过设定阈值后可自动更新统计信息</p> <ul> <li> <h4>打开表数据量监控开关,参数值为 1 时监控所有表,2 时仅监控配置表</h4> <pre><code class="language-sql">SP_SET_PARA_VALUE(1,'AUTO_STAT_OBJ',2);</code></pre> </li> <li> <h4>设置 SYSDBA.T 表数据变化率超过 15% 时触发自动更新统计信息</h4> <pre><code class="language-sql">DBMS_STATS.SET_TABLE_PREFS('SYSDBA','T','STALE_PERCENT',15);</code></pre> </li> <li> <h4>配置自动收集统计信息触发时机</h4> <pre><code class="language-sql">SP_CREATE_AUTO_STAT_TRIGGER(1, 1, 1, 1,'14:36', '2020/3/31',60,1); 函数各参数介绍: SP_CREATE_AUTO_STAT_TRIGGER( TYPE INT, --间隔类型,默认为天 FREQ_INTERVAL INT, --间隔频率,默认 1 FREQ_SUB_INTERVAL INT, --间隔频率,与 FREQ_INTERVAL 配合使用 FREQ_MINUTE_INTERVAL INT, --间隔分钟,默认为 1440 STARTTIME VARCHAR(128), --开始时间,默认为 22:00 DURING_START_DATE VARCHAR(128), --重复执行的起始时间,默认 1900/1/1 MAX_RUN_DURATION INT, --允许的最长执行时间(秒),默认不限制 ENABLE INT --0 关闭,1 启用 --默认为 1 );</code></pre> <h2>四、重建达梦数据库当前模式所有索引(SYSDBA登录)</h2> </li> <li> <h4>执行以下语句获取当前模式的全部索引(需要修改的模式名有两处)</h4> <p>示例:</p> <pre><code class="language-sql">select 'alter index RISENOA_HZSW_OA_WW.&amp;quot;'||a.OBJECT_NAME ||'&amp;quot; rebuild;' from DBA_objects a where OBJECT_TYPE='INDEX' AND OWNER='RISENOA_HZSW_OA_WW' AND GENERATED='N';</code></pre> <p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/e27614c8acc9fed7b645c2e323fcfcd6" alt="" /></p> </li> <li> <h4>复制查询结果并执行</h4> <p><img src="http://60.191.64.5:16100/server/index.php?s=/api/attachment/visitFile/sign/d496b21a28662b016fd55e19331b0f2a" alt="" /></p> </li> </ul>

页面列表

ITEM_HTML