为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM Database Server 64 V8
【操作系统】:Kylin V10
【CPU】:x86_64
【问题描述】*:如何发现数据库哪些索引存在索引碎片,或者怎么避免索引碎片引发性能问题。
回答 0
暂无回答
DM-0213
SELECT OBJNAME AS OBJNAME,
OBJTYPE AS OBJTYPE,
TO_CHAR(FRAGPCT) AS FRAGPCT
FROM (SELECT *
FROM (SELECT OWNER||'.'||INDEX_NAME AS OBJNAME,
'INDEX/INDEX PART' AS OBJTYPE,
ROUND(100.0*(1-INDEX_USED_PAGES(OWNER,INDEX_NAME)/1.0/INDEX_USED_SPACE(OWNER,INDEX_NAME)),2) FRAGPCT
FROM DBA_INDEXES
WHERE TABLESPACE_NAME NOT IN ('TEMP',
'ROLL',
'SYSTEM')
AND OWNER NOT IN ('SYS',
'SYSAUDITOR',
'SYSSSO',
'SYSJOB',
'SCHEDULER')
AND TEMPORARY='N'
AND INDEX_TYPE != 'CLUSTER'
AND INDEX_USED_SPACE(OWNER,INDEX_NAME)>(SELECT SUM(TOTAL_SIZE)* 0.0001 FROM V$DATAFILE)
ORDER BY INDEX_USED_SPACE(OWNER,INDEX_NAME) DESC)
ORDER BY FRAGPCT DESC LIMIT 10);
SELECT OBJNAME AS OBJNAME,
OBJTYPE AS OBJTYPE,
TO_CHAR(FRAGPCT) AS FRAGPCT
FROM (SELECT *
FROM (SELECT OWNER||'.'||INDEX_NAME AS OBJNAME,
'INDEX/INDEX PART' AS OBJTYPE,
ROUND(100.0*(1-INDEX_USED_PAGES(OWNER,INDEX_NAME)/1.0/INDEX_USED_SPACE(OWNER,INDEX_NAME)),2) FRAGPCT
FROM DBA_INDEXES
WHERE TABLESPACE_NAME NOT IN ('TEMP',
'ROLL',
'SYSTEM')
AND OWNER NOT IN ('SYS',
'SYSAUDITOR',
'SYSSSO',
'SYSJOB',
'SCHEDULER')
AND TEMPORARY='N'
AND INDEX_TYPE != 'CLUSTER'
AND INDEX_USED_SPACE(OWNER,INDEX_NAME)>(SELECT SUM(TOTAL_SIZE)* 0.0001 FROM V$DATAFILE)
ORDER BY INDEX_USED_SPACE(OWNER,INDEX_NAME) DESC)
ORDER BY FRAGPCT DESC LIMIT 10);
查看有没有碎片率高的索引,通过重建索引解决,没法避免除非索引字段数据稳定无变化