oracle优化求生指南脚本记录

1.查找未使用索引

复制代码
/* Formatted on 2020/5/12 下午 03:32:39 (QP5 v5.163.1008.3004) */
WITH IN_PLAN_OBJECTS
     AS (SELECT DISTINCT OBJECT_NAME
           FROM V$SQL_PLAN
          WHERE OBJECT_OWNER = USER)
SELECT TABLE_NAME,
       INDEX_NAME,
       CASE WHEN OBJECT_NAME IS NULL THEN 'NO' ELSE 'YES' END
          AS IN_CACHED_PLAN
  FROM    USER_INDEXES
       LEFT OUTER JOIN
          IN_PLAN_OBJECTS
       ON (INDEX_NAME = OBJECT_NAME);
复制代码

复制代码
/*对所有索引添加MONITOR*/
BEGIN
   FOR r IN (SELECT index_name FROM user_indexes)
   LOOP
      EXECUTE IMMEDIATE 'ALTER INDEX ' || r.index_name || ' MONITORING USAGE';
   END LOOP;
END;

SELECT INDEX_NAME,
       TABLE_NAME,
       USED,
       START_MONITORING
  FROM V$OBJECT_USAGE
 WHERE MONITORING = 'YES';
复制代码

 2.查找数据库中应该修改为绑定变量减少硬解析的SQL

复制代码
/* Formatted on 2020/5/13 下午 05:43:03 (QP5 v5.163.1008.3004) */
WITH FORCE_MATCHES
     AS (  SELECT FORCE_MATCHING_SIGNATURE,
                  COUNT (*) MATCHES,
                  MAX (SQL_ID || CHILD_NUMBER) MAX_SQL_CHILD,
                  DENSE_RANK () OVER (ORDER BY COUNT (*) DESC) RANKING
             FROM V$SQL
            WHERE FORCE_MATCHING_SIGNATURE <> 0
                  AND PARSING_SCHEMA_NAME <> 'SYS'
         GROUP BY FORCE_MATCHING_SIGNATURE
           HAVING COUNT (*) > 5)
  SELECT SQL_ID,
         MATCHES,
         PARSING_SCHEMA_NAME SCHEMA,
         SQL_TEXT
    FROM V$SQL JOIN FORCE_MATCHES ON (SQL_ID || CHILD_NUMBER = MAX_SQL_CHILD)
   WHERE RANKING <= 10
ORDER BY MATCHES DESC;
复制代码

 

posted @   monkey6  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示