精华内容
下载资源
问答
  • ORACLE查看SQL执行次数/频率

    千次阅读 2016-04-26 11:54:04
    在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致。如果执行频繁的SQL,往往容易...

         在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致。如果执行频繁的SQL,往往容易遭遇一些并发性的问题。

    那么如何查看ORACLE数据库某个SQL的执行频率/次数呢? 有哪些途径方法呢?

     

    方法1: 通过查询V$SQLAREA或V$SQL的EXECUTIONS来查看SQL的执行次数,但是这个值的有效性需要结合FIRST_LOAD_TIME来判 断。因为V$SQLAREA或V$SQL中不保存历史数据,具有一定的时效性,所以如果要查询很久以前的某个SQL执行次数是办不到的。

    关于V$SQLAREA

            FIRST_LOAD_TIME        VARCHAR2(19)       Timestamp of the parent creation time

            EXECUTIONS             NUMBER             Total number of executions, totalled over all the child cursors

     

    如下所示,我们通过一个例子来演示如何查询一个语句的执行次数。

    SQL> COL  START_TIME FOR A20;
    SQL> SELECT TO_CHAR(sysdate,'YYYY-MM-DD HH24:MI:SS') AS START_TIME FROM DUAL;
     
    START_TIME
    --------------------
    2014-11-20 13:51:21
     
    SQL> 
    SQL> SELECT SQL_ID, SQL_TEXT,FIRST_LOAD_TIME, EXECUTIONS
      2  FROM V$SQLAREA
      3  WHERE SQL_TEXT LIKE '%SELECT * FROM TEST%';
     
    SQL_ID                 SQL_TEXT                   RST_LOAD_TIME    EXECUTIONS
    ----------- -------------------------------------- ---------------- ----------
     
    SQL> SELECT * FROM TEST;
     
             ID NAME
    ----------- ----------
     
    SQL> 
    SQL> SELECT SQL_ID, SQL_TEXT,FIRST_LOAD_TIME, EXECUTIONS
      2  FROM V$SQLAREA
      3  WHERE SQL_TEXT LIKE '%SELECT * FROM TEST%';
     
    SQL_ID                SQL_TEXT                   FIRST_LOAD_TIME    EXECUTIONS
    ----------- -------------------------------------- ---------------- --------------
    4ntr8ag38ujwd  SELECT * FROM TEST                  2014-11-20/13:51:40      1
     
    SQL> SELECT * FROM TEST;
     
             ID NAME
    ----------- ----------
     
    SQL> 
    SQL> SELECT SQL_ID, SQL_TEXT,FIRST_LOAD_TIME, EXECUTIONS
      2  FROM V$SQLAREA
      3  WHERE SQL_TEXT LIKE '%SELECT * FROM TEST%';
     
    SQL_ID                SQL_TEXT                 FIRST_LOAD_TIME   EXECUTIONS
    ------------- -------------------------------- ------------------- ----------
    4ntr8ag38ujwd  SELECT * FROM TEST              2014-11-20/13:51:40      2

     

    如果此时清空共享池,那么你会发现V$SQLAREA中对应的SQL的EXECUTIONS次数清零了。

     
    SQL> ALTER SYSTEM FLUSH SHARED_POOL;
     
    System altered
     
    SQL> SELECT * FROM TEST;
     
             ID NAME
    ----------- ----------
     
    SQL> 
    SQL> SELECT SQL_ID, SQL_TEXT,FIRST_LOAD_TIME, EXECUTIONS
      2  FROM V$SQLAREA
      3  WHERE SQL_TEXT LIKE '%SELECT * FROM TEST%';
     
    SQL_ID                SQL_TEXT                    FIRST_LOAD_TIME      EXECUTIONS
    ------------- ----------------------------------- ------------------- ----------
    4ntr8ag38ujwd  SELECT * FROM TEST                2014-11-20/13:52:38     1
     
    SQL> 

    如果要查看某个时间段该SQL语句执行了多少次,那么必须在这两个时间段执行上面SQL语句,两次EXECUTIONS的差值表示这段时间内SQL语句的执行次数。EXECUTIONS是全局的,往往不能查看某个会话或用户执行了多少次。这也是其局限性之一。

     

    方法2:通 过DBA_HIST_SQLSTAT关联DBA_HIST_SNAPSHOT找出某些SQL的执行次数,但是部分快照如果没有捕获到有些SQL。这样也就 无法通过下面SQL语句查看执行次数。也是就说这种方法是有缺陷的。执行越频繁的语句,也越容易被SNAPSHOT抓取到.

    SELECT M.SQL_ID ,
           TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD')   "DATETIME",
           SUM(M.EXECUTIONS_DELTA)  EXECUTIONS
    FROM DBA_HIST_SQLSTAT M, DBA_HIST_SNAPSHOT N
    WHERE M.SNAP_ID  = N.SNAP_ID
      AND M.DBID = N.DBID
      AND M.INSTANCE_NUMBER = N.INSTANCE_NUMBER
      AND M.INSTANCE_NUMBER=1
      AND TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD') ='2014-11-20'
      AND M.SQL_ID=&SQL_ID
    GROUP BY M.SQL_ID , TO_CHAR(N.BEGIN_INTERVAL_TIME, 'YYYY-MM-DD')
    ORDER BY M.SQL_ID

     

    方法3:AWR报告查看某个SQL的执行次数,同上面一样,AWR报告也受SNAPSHOT影响。不一定捕获了你需要查询的SQL

     

    查看当前数据库执行次数最多的SQL,例如,查询执行最频繁的TOP 15的SQL语句。

    SELECT SQL_TEXT, EXECUTIONS
      FROM (SELECT SQL_TEXT,
                   EXECUTIONS,
                   RANK() OVER(ORDER BY EXECUTIONS DESC) EXEC_RANK
              FROM V$SQLAREA)
     WHERE EXEC_RANK <= 15;
    展开全文
  • 主要是thinkphp获取php页面执行时间,数据库读写次数,函数调用次数等,需要的朋友可以参考下
  • QS.execution_count AS '执行次数', QS.total_elapsed_time AS '耗时', QS.total_logical_reads AS '逻辑读取次数', QS.total_logical_writes AS '逻辑写入次数', QS.total_physical_reads AS '物理读取次数', ...
    SELECT TOP 1000
           ST.text AS '执行的SQL语句',
           QS.execution_count AS '执行次数',
           QS.total_elapsed_time AS '耗时',
           QS.total_logical_reads AS '逻辑读取次数',
           QS.total_logical_writes AS '逻辑写入次数',
           QS.total_physical_reads AS '物理读取次数',       
           QS.creation_time AS '执行时间' ,  
           QS.*
    FROM   sys.dm_exec_query_stats QS
           CROSS APPLY
    sys.dm_exec_sql_text(QS.sql_handle) ST
    WHERE  QS.creation_time >'2020-08-18'
    ORDER BY
         QS.total_elapsed_time DESC
    
    
    
    
    

    展开全文
  • 查看oracle数据库sql的实际执行计划

    千次阅读 2015-11-25 21:06:15
     在生产环境中,如果发现某SQL执行慢,要查看它的执行计划,有如下方法: 方法一:  先查v$sqltext获得HASH_VALUE值,再通过HASH_VALUE值查询v$sql_plan获得此SQL的实际执行计划。  实例:  想知道如下SQL的...

            在生产环境中,如果发现某SQL执行慢,要查看它的执行计划,有如下方法:

    方法一:

            先查v$sqltext获得HASH_VALUE值,再通过HASH_VALUE值查询v$sql_plan获得此SQL的实际执行计划。

            实例:

            想知道如下SQL的实际执行计划

    SELECT /*+ index(tt IX_TT_CREATED_DATE) */ to_char(tt.created_date,'YYYY-MM-DD'),count(1)
     FROM test_table tt
    WHERE  tt.code IN('X01', 'X02', 'X333', 'X365')
     AND tt.created_time >= TO_DATE('2014-12-20', 'yyyy-mm-dd')
     AND tt.created_time < TO_DATE('2015-08-20', 'yyyy-mm-dd')
     group by to_char(tt.created_time,'YYYY-MM-DD');

            先查询v$sqltext获得HASH_VALUE值,如果未查询到记录,则可以先执行一下上面的SQL后再查

    select * from v$sqltext t where t.SQL_TEXT like 'SELECT /*+ index(pbi IX_PBI_CREATED_DATE) */%'


            上面SQL执行的结果中的HASH_VALUE的值为3042406205,那么我们可以以它作为条件再查询v$sql_plan获得实际的执行计划。

    select * from v$sql_plan t where t.HASH_VALUE = '3042406205';

            运行结果如下所示:

     

    方法二:

            sqlpuls登录成功后(关于sqlplus的登陆配置,请参考Oracle的tnsnames.ora配置),先设置set linesize 200,然后输入explain plan for select * from table_name...,再执行SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);查询执行计划。


            还可以通过如下语句查看统计信息、SQL资源消耗。

    select * from dba_tables a where a.table_name = upper('table_name');
    
    select * from v$sql a where a.SQL_TEXT like 'select * from ...';
            如下所示:


     

    PS:v$sql说明

            v$sql:一条语句可以映射多个 cursor,因为对象所指的 cursor可以有不同用户 (如例 1)。如果有多个 cursor(子游标 )存在,在 V$SQLAREA为所有 cursor提供集合信息。

    实例:

            这里介绍以下 child cursor

            user A: select * from tbl

            user B: select * from tbl

            大家认为这两条语句是不是一样的啊,可能会有很多人会说是一样的,但我告诉你不一定,那为什么呢?

            这个 tbl A看起来是一样的,但是不一定哦,一个是 A用户的,一个是 B用户的,这时他们的执行计划分析代码差别可能就大了哦,改下写法大家就明白了:

            select * from A.tbl

            select * from B.tbl

      在个别 cursor上, v$sql可被使用。该视图包含 cursor级别资料。当试图定位 session或用户以分析 cursor时被使用。

       PLAN_HASH_VALUE列存储的是数值表示的 cursor执行计划。可被用来对比执行计划。PLAN_HASH_VALUE让你不必一行一行对比即可轻松鉴别两条执行计划是否相同。

    V$SQL中的列说明:

            SQL_TEXT: SQL文本的前 1000个字符

            SHARABLE_MEM:占用的共享内存大小 (单位: byte)

            PERSISTENT_MEM:生命期内的固定内存大小 (单位: byte)

            RUNTIME_MEM:执行期内的固定内存大小

            SORTS:完成的排序数

            LOADED_VERSIONS:显示上下文堆是否载入, 1是 0否

            OPEN_VERSIONS:显示子游标是否被锁, 1是 0否

            USERS_OPENING:执行语句的用户数

            FETCHES: SQL语句的 fetch数。

            EXECUTIONS:自它被载入缓存库后的执行次数

            USERS_EXECUTING:执行语句的用户数

            LOADS:对象被载入过的次数

            FIRST_LOAD_TIME:初次载入时间

            INVALIDATIONS:无效的次数

            PARSE_CALLS:解析调用次数

            DISK_READS:读磁盘次数

            BUFFER_GETS:读缓存区次数

            ROWS_PROCESSED:解析 SQL语句返回的总列数

            COMMAND_TYPE:命令类型代号

            OPTIMIZER_MODE: SQL语句的优化器模型

            OPTIMIZER_COST:优化器给出的本次查询成本

            PARSING_USER_ID:第一个解析的用户 ID

            PARSING_SCHEMA_ID:第一个解析的计划 ID

            KEPT_VERSIONS:指出是否当前子游标被使用 DBMS_SHARED_POOL包标记为常驻内存

            ADDRESS:当前游标父句柄地址

            TYPE_CHK_HEAP:当前堆类型检查说明

            HASH_VALUE:缓存库中父语句的 Hash值

            PLAN_HASH_VALUE:数值表示的执行计划。

            CHILD_NUMBER:子游标数量

            MODULE:在第一次解析这条语句是通过调用 DBMS_APPLICATION_INFO.SET_MODULE设置的模块名称。

            ACTION:在第一次解析这条语句是通过调用 DBMS_APPLICATION_INFO.SET_ACTION设置的动作名称。

            SERIALIZABLE_ABORTS:事务未能序列化次数

            OUTLINE_CATEGORY:如果 outline在解释 cursor期间被应用,那么本列将显示出 outline各类,否则本列为空

            CPU_TIME:解析 /执行 /取得等 CPU使用时间 (单位,毫秒 )

            ELAPSED_TIME:解析 /执行 /取得等消耗时间 (单位,毫秒 )

            OUTLINE_SID: outline session标识

            CHILD_ADDRESS:子游标地址

            SQLTYPE:指出当前语句使用的 SQL语言版本

            REMOTE:指出是否游标是一个远程映象 (Y/N)

            OBJECT_STATUS:对象状态 (VALID or INVALID)

            IS_OBSOLETE:当子游标的数量太多的时候,指出游标是否被废弃 (Y/N)

     

    参考资料:http://lizhiyu.iteye.com/blog/966626

    展开全文
  • QS.execution_count AS '执行次数', QS.total_elapsed_time AS '耗时', QS.total_logical_reads AS '逻辑读取次数', QS.total_logical_writes AS '逻辑写入次数', QS.total_physical_reads AS '物理读取次数',
    SELECT TOP 1000 
           ST.text AS '执行的SQL语句',
           QS.execution_count AS '执行次数',
           QS.total_elapsed_time AS '耗时',
           QS.total_logical_reads AS '逻辑读取次数',
           QS.total_logical_writes AS '逻辑写入次数',
           QS.total_physical_reads AS '物理读取次数',       
           QS.creation_time AS '执行时间' ,  
           QS.*
    FROM   sys.dm_exec_query_stats QS
           CROSS APPLY 
    sys.dm_exec_sql_text(QS.sql_handle) ST
    WHERE  QS.creation_time BETWEEN '2020-06-01 00:00:00' AND '2020-06-10 11:00:00' 
    ORDER BY QS.creation_time desc;
    
    SELECT TOP 1000 total_worker_time/execution_count AS [Avg CPU Time],
        SUBSTRING(st.text, (qs.statement_start_offset/2)+1, 
            ((CASE qs.statement_end_offset
              WHEN -1 THEN DATALENGTH(st.text)
             ELSE qs.statement_end_offset
             END - qs.statement_start_offset)/2) + 1) AS statement_text
    FROM sys.dm_exec_query_stats AS qs
    CROSS APPLY sys.dm_exec_sql_text(qs.sql_handle) AS st
    ORDER BY total_worker_time/execution_count DESC
    
    展开全文
  • 为了确定功能是否生效,需要查看数据库最近执行sql语句,在里面找到想要的SQL语句 查看数据库最近执行了哪些sql语句 # 查看1小时内执行sql语句,并按照执行时间倒序排序 select s.LAST_ACTIVE_TIME,s.SQL_TEXT,...
  • 在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致。如果执行频繁的SQL,往往容易...
  • mysql 查看sql执行频率

    千次阅读 2018-02-13 17:12:43
    7.1 查看sql执行频率show 【session|global】 status; 实验一:查询自本次登陆以来的数据库操作,主要关心值的获取mysql> show session status like 'Com_insert%'; +-------------------+-------+ | Variable_...
  • SELECT TOP 2000 ST.text AS '执行的SQL语句', QS.execution_count AS '执行次数', QS.total_elapsed_time AS '耗时', QS.total_logical_reads AS '逻辑读取次数', QS.total_logical_writes AS '...
  • 一.查询思路 1.想要判断数据库查询缓慢的问题,可以使用如下语句,可以列出查询语句的平均时间,总时间,所用的CPU时间等信息 SELECT creation_time N'语句编译时间' ..., execution_count N'执行次数' ,
  • ORACLE数据库查看执行计划

    千次阅读 2018-09-25 10:12:50
    基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看SQL执行计划,本文就如何看懂执行计划,以及如何通过分
  • 数据库sql优化

    千次阅读 多人点赞 2018-07-06 15:55:30
    网上关于SQL优化的教程很多,但是比较杂乱。近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充。这篇文章我花费了大量的时间查找资料、修改、排版,希望大家阅读之后,感觉好的...
  • Oracle 查看 SQL执行计划 SQL性能分析

    万次阅读 2019-01-05 09:41:25
      ... 使用Oracle执行计划分析SQL性能 博客分类:  db oracle执行计划sql性能解释  ...一、查看执行计划的方法 1. 设置autotrace  set autotrace off: 此为默认值,即关闭autotrace  set...
  • 查看Sqlserver数据库中索引使用情况

    千次阅读 2020-05-25 12:14:46
    索引能加快数据库的数据查询,也会占用太多的资源开销,所以索引并不是越多越好,当加了索引后应该定期查看索引的使用情况,把没用的或者用的少了进行删除或修改,那如何查询索引的使用情况呢?如下: use vims_...
  • 总结之前的内容,MySQL数据库性能优化的途径有以下几个方式 提高硬件方面的配置,比如SSD固态硬盘等。选择合适的存储引擎,一般使用...执行sql之前,使用sql执行计划(如:EXPLAIN SELECT * FROM DEMO)检查
  • 数据库学习】数据库总结

    万次阅读 多人点赞 2018-07-26 13:26:41
    常见数据库管理系统有:Access、mysql、sql server 2)特点 ①数据库数据特点 永久存储、有组织、可共享。 (数据的最小存取单位是数据项) ②数据库系统的特点 数据结构化 数据的...
  • sqlserver 查看脚本执行时间

    千次阅读 2019-07-06 21:07:08
    执行后在输出的消息体里查看: 占用时间:当前这一步的总时间。如果占用时间比CPU时间大很多,那开销主要用于IO上。 逻辑读:从数据缓存读取的页数。数字越小,性能越好。在性能调优中这个数字...
  • SQL Server:查看sql语句的执行时间

    万次阅读 2019-08-13 09:39:55
    方法一: declare @d datetime set @d=getdate() /*你的SQL脚本开始*/ ...select [语句执行花费时间(毫秒)]=datediff(ms,@d,getdate()) 方法二 SET STATISTICS PROFILE ON SET STATISTICS io O...
  • ORACLE有些sql语句,不确定它是否会增加硬解析次数,对其它进行测试,是否会增加硬解析。
  • SQL执行过程

    千次阅读 2018-10-10 09:40:20
    SQL处理是SQL语句的解析、优化、行源生成和执行。为了更快的处理数据,数据库会做一些缓存,从而省略这些阶段中的一些。 下图描述了SQL处理的一般阶段。 SQL解析 解析阶段包括将SQL语句段分割成其他例程可以处理...
  • 查看sql语句执行时间

    千次阅读 2019-11-05 18:40:02
    2.profiling是否开启(让mysql收集执行语句所用的资源) 0代表 关闭 ——设置为1 打开它 3.打开后 , 写一条select语句 查看情况 4.查看当前会话所产生的所有profiles (第1 2 条语句 我写错了——第三...
  • 1.关于SQL查询效率,100w数据,查询只要1秒,与您分享: ...数据库: ms sql server 2000 目的: 查询性能测试,比较两种查询的性能 SQL查询效率 step by step -- setp 1. -- 建表 create table t_userinfo ( use
  • 优化目标 1、减少 IO 次数 IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数SQL 优化中需要第一优先考虑,当然,也是收效最...
  • 在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致。 如果执行频繁的SQL,往往容易...
  • 如何减少对数据库的访问次数来加快sql执行 ===================== 1、合理使用DECODE函数 例: SELECT COUNT(*),SUM(SAL) FROM EMP WHERE DEPT_NO = 0020 AND ENAME LIKE ‘SMITH%'; SELECT COUNT(*),SUM...
  • 如何查看SqlServer查询语句的执行效率 一:查看执行时间 SQL Server DATEDIFF() 函数 定义和用法 DATEDIFF() 函数返回两个日期之间的时间。 语法DATEDIFF(datepart,startdate,enddate)startdate 和 enddate ...
  • 执行计划(execution plan,也叫查询计划或者解释计划)是数据库...如果 SQL 语句性能不够理想,我们首先应该查看它的执行计划。本文主要介绍如何在各种数据库中获取和理解执行计划,并给出进一步深入分析的参考文档。
  • SQL数据库更新语句操作实例

    千次阅读 2020-12-13 14:56:09
    SQL Server数据库更新操作 名称解释(不区分大小写) student:学生表,属性分别为sno学号、sname学生姓名、age年龄、sex性别、dno学院编号、birthday生日 sc选课信息表:sno学号、cno课程号、grade成绩 dept学院...
  • 使用SQL Server数据库的时候,数据库耗资源很大、卡死,怎么办?可以试着找找是否有执行很慢的SQL语句......
  • 数据库SQL优化大总结

    千次阅读 2018-12-17 21:19:29
    索引通俗来讲就相当于书的目录,当我们根据条件查询的时候,没有索引,便需要全表扫描,数据量少还可以,一旦数据量超过百万甚至千万,一条查询sql执行往往需要几十秒甚至更多,5秒以上就已经让人难以忍受了。...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 139,665
精华内容 55,866
关键字:

数据库查看sql执行次数