Oracle 11g数据库索引失效和索引慢问题排查方法
    		       		warning:
    		            这篇文章距离上次修改已过427天,其中的内容可能已经有所变动。
    		        
        		                
                
-- 检查失效的索引并尝试重建
DECLARE
    v_sql VARCHAR2(1000);
BEGIN
    FOR idx IN (SELECT index_name, owner, table_name FROM dba_indexes WHERE status = 'UNUSABLE')
    LOOP
        v_sql := 'ALTER INDEX ' || idx.owner || '.' || idx.index_name || ' REBUILD';
        EXECUTE IMMEDIATE v_sql;
    END LOOP;
END;
/
 
-- 查询执行时间长的SQL语句
SELECT * FROM (
    SELECT
        sql_id,
        executions,
        parse_calls,
        disk_reads,
        buffer_gets,
        elapsed_time,
        cpu_time,
        user_io_wait_time
    FROM v$sqlarea
    ORDER BY elapsed_time DESC
) WHERE ROWNUM <= 10;这段代码首先声明了一个变量用于存储重建索引的SQL语句,然后遍历失效的索引并尝试重建它们。接下来,查询了执行时间最长的SQL语句,并限制输出前10条结果。这些操作通常用于诊断和优化Oracle数据库性能问题。
评论已关闭