Oracle 11g数据库索引失效和索引慢问题排查方法
-- 检查失效的索引并尝试重建
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数据库性能问题。
评论已关闭