技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> MySQL --> 如何查询运行在某个表上的所有SQL

如何查询运行在某个表上的所有SQL

浏览:2539次  出处信息

    这里说的所有SQL指的是存在于v$sql中还没有被age out出去的SQL. 一般频繁运行的SQL都是存在于v$sql中没有被age out出去的。

    第一种方法最简单,也最不准确,就是直接查询sql_text

    select * from v$sql where lower(sql_text) like ‘%TABLE_NAME%’

    最不准确是因为他有几个问题:

     1. table_name可能会被折行,这样like就无法被匹配

     2. 可能存在表名一样,但是owner不一样的情况

     3. 如果用户查询的是view或者synonym,SQL语句中没有真实的表名,这种方法也无法显示

    使用这种方法主要是在当你要查询某个已知SQL的统计信息的时候。

    第二种方法是通过查询v$sql_plan

    select * from v$sql where hash_value in (select hash_value from v$sql_plan where object_owner=’xxx’ and object_name=’TABLE_NAME’);

    SQL被分析后,执行计划会被存储在v$sql_plan中,object_name就是执行计划里面的name那一列。这种方法可以避免上面所说的三个问题。

    但是这个方法也有个问题,就是当SQL执行计划中没有查询表的时候,SQL不会被显示,例如下面SQL的执行计划中没有表名,只有索引名

SYS@XFAN: SQL> explain plan for select * from test where x=1;

    Explained.

    SYS@XFAN: SQL> @?/rdbms/admin/utlxpls

    PLAN_TABLE_OUTPUT

    ------------------------------------------------------------------------------------------------------------------------------------

    Plan hash value: 1416057887

    -------------------------------------

    | Id  | Operation        | Name     |

    -------------------------------------

    |   0 | SELECT STATEMENT |          |

    |*  1 |  INDEX RANGE SCAN| TEST_IDX |

    -------------------------------------

    这时候查询表名是得不到该SQL的,必须查询索引名字。所以你可以稍微修改一下,将表名和索引名都加到object_name中:

    select * from v$sql where hash_value in (select hash_value from v$sql_plan where

     object_owner=’xxx’ and object_name in (‘TABLE_NAME’,\'INDEX1_NAME’,\'INDEX2_NAME’,…));

    另外这种方法也可以用于查询哪些SQL使用了改索引

    第三种方法是查询 v$object_dependency表

    select * from v$sql where hash_value in (select FROM_HASH from v$object_dependency where TO_OWNER=’table owner’ and TO_NAME=’table name’);

    这种方法应该是比较准确的,即使SQL中使用了view或者synonym,该方法还是可以找到SQL。 但是它不支持第二种方法的索引查询,dependency关系只是和表有关。

建议继续学习:

  1. Mysql监控指南    (阅读:19863)
  2. 批量添加主机到cacti+nagios的监控报警系统中    (阅读:13338)
  3. 我常用的主机监控shell脚本    (阅读:11568)
  4. 7 天打造前端性能监控系统    (阅读:10232)
  5. 如何监控HP服务器硬件状态    (阅读:9162)
  6. Cacti 添加 Nginx 监控    (阅读:8984)
  7. Linux下三种常用的流量监控软件对比    (阅读:8746)
  8. Cacti 添加 Memcached 监控    (阅读:8183)
  9. Cacti 添加 Apache 监控    (阅读:7643)
  10. 你应该知道的16个Linux服务器监控命令    (阅读:6900)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1