https://www.cnblogs.com/lcword/p/8243685.html
前言
在ORACLE数据库应用调优中,一个SQL的执行次数/频率也是常常需要关注的,因为某个SQL执行太频繁,要么是由于应用设计有缺陷,需要在业务逻辑上做出优化处理,要么是业务特殊性所导致。如果执行频繁的SQL,往往容易遭遇一些并发性的问题。 那么如何查看ORACLE数据库某个SQL的执行频率/次数呢? 下面来看看完整的示例代码。
一、查询执行最慢的sql
select * from (select sa.SQL_TEXT, sa.SQL_FULLTEXT, sa.EXECUTIONS "执行次数", round(sa.ELAPSED_TIME / 1000000, 2) "总执行时间", round(sa.ELAPSED_TIME / 1000000 / sa.EXECUTIONS, 2) "平均执行时间", sa.COMMAND_TYPE, sa.PARSING_USER_ID "用户ID", u.username "用户名", sa.HASH_VALUE from v$sqlarea sa left join all_users u on sa.PARSING_USER_ID = u.user_id where sa.EXECUTIONS > 0 order by (sa.ELAPSED_TIME / sa.EXECUTIONS) desc) where rownum <= 50;
二、查询次数最多的 sql
select * from (select s.SQL_TEXT, s.EXECUTIONS "执行次数", s.PARSING_USER_ID "用户名", rank() over(order by EXECUTIONS desc) EXEC_RANK from v$sql s left join all_users u on u.USER_ID = s.PARSING_USER_ID) t where exec_rank <= 100;
二、查询每天执行慢的SQL:
SELECT S.SQL_TEXT, S.SQL_FULLTEXT, S.SQL_ID, ROUND(ELAPSED_TIME / 1000000 / (CASE WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN 1 ELSE EXECUTIONS END), 2) "执行时间'S'", S.EXECUTIONS "执行次数", S.OPTIMIZER_COST "COST", S.SORTS, S.MODULE, --连接模式(JDBC THIN CLIENT:程序) -- S.LOCKED_TOTAL, S.PHYSICAL_READ_BYTES "物理读", -- S.PHYSICAL_READ_REQUESTS "物理读请求", S.PHYSICAL_WRITE_REQUESTS "物理写", -- S.PHYSICAL_WRITE_BYTES "物理写请求", S.ROWS_PROCESSED "返回行数", S.DISK_READS "磁盘读", S.DIRECT_WRITES "直接路径写", S.PARSING_SCHEMA_NAME, S.LAST_ACTIVE_TIME FROM GV$SQLAREA S WHERE ROUND(ELAPSED_TIME / 1000000 / (CASE WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN 1 ELSE EXECUTIONS END), 2) > 5 --100 0000微秒=1S AND S.PARSING_SCHEMA_NAME = USER AND TO_CHAR(S.LAST_LOAD_TIME, 'YYYY-MM-DD') = TO_CHAR( SYSDATE, 'YYYY-MM-DD' ) AND S.COMMAND_TYPE IN (2 , 3, 5, 6 , 189) ORDER BY "执行时间'S'" DESC;
以及下面这个
SELECT S.SQL_TEXT, S.SQL_FULLTEXT, S.SQL_ID, ROUND(ELAPSED_TIME / 1000000 / (CASE WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN 1 ELSE EXECUTIONS END), 2) "执行时间'S'", S.EXECUTIONS "执行次数", S.OPTIMIZER_COST "COST", S.SORTS, S.MODULE, --连接模式(JDBC THIN CLIENT:程序) -- S.LOCKED_TOTAL, S.PHYSICAL_READ_BYTES "物理读", -- S.PHYSICAL_READ_REQUESTS "物理读请求", S.PHYSICAL_WRITE_REQUESTS "物理写", -- S.PHYSICAL_WRITE_BYTES "物理写请求", S.ROWS_PROCESSED "返回行数", S.DISK_READS "磁盘读", S.DIRECT_WRITES "直接路径写", S.PARSING_SCHEMA_NAME, S.LAST_ACTIVE_TIME FROM GV$SQLAREA S WHERE ROUND(ELAPSED_TIME / 1000000 / (CASE WHEN (EXECUTIONS = 0 OR NVL(EXECUTIONS, 1 ) = 1) THEN 1 ELSE EXECUTIONS END), 2) > 5 --100 0000微秒=1S AND S.PARSING_SCHEMA_NAME = USER AND TO_CHAR(S.LAST_LOAD_TIME, 'YYYY-MM-DD') = TO_CHAR( SYSDATE, 'YYYY-MM-DD' ) AND S.COMMAND_TYPE IN (2 , 3, 5, 6 , 189) ORDER BY "执行时间'S'" DESC;
相关推荐
本文将深入探讨Oracle中SQL语句执行效率的查找与解决方法,特别关注于如何识别和优化那些导致性能瓶颈的查询。 ### Oracle SQL执行效率:查找与解决 #### 一、资源消耗分析 在Oracle中,SQL语句执行效率低下通常...
以上步骤是Oracle执行SQL语句的一般过程,了解并掌握每个步骤对于分析和优化SQL语句至关重要。 四、影响SQL执行计划选择的因素 执行计划的选择受多种因素影响,如数据的分布、索引的可用性、表的大小、统计信息的...
### Oracle性能监控SQL语句详解 #### 一、分析表 **知识点:** - **Table Analysis:** - 使用`ANALYZE TABLE`命令来收集表及其索引的统计信息,这对于优化器做出正确的执行计划决策至关重要。 - `ANALYZE ...
通过筛选条件,我们可以获取执行次数大于0且平均执行时间大于0的SQL语句,同时只考虑当天的数据。这有助于我们找出那些频繁运行且效率低下的查询。 在测试阶段,我们模拟了一连串的插入操作,将数据从`EMPLOYEE_TMP...
SQL语句优化是数据库性能提升的关键环节,尤其在大数据量的场景下,优化SQL语句可以显著提升查询效率。以下是对标题"SQL语句优化总结34条"中提到的一些重要知识点的详细解释: 1. **选择最有效的表名顺序**:在...
- 分析和理解执行计划,通过EXPLAIN PLAN查看查询的执行路径,找出性能瓶颈。 - 使用物化视图预计算结果,提高查询速度,尤其适用于复杂的聚合查询。 - 考虑分区表,对于大型表,分区可以显著提高查询性能,特别...
8. **使用EXPLAIN PLAN或类似的工具**:大多数数据库系统提供工具查看执行计划,如MySQL的EXPLAIN,Oracle的EXPLAIN PLAN,或SQL Server的SET SHOWPLAN_ALL。这些工具帮助我们理解执行过程并定位问题。 9. **参数化...
本文将深入探讨几个关键的SQL优化策略,以提升SQL语句的执行速度和资源利用率。 首先,了解Oracle的优化器类型至关重要。Oracle提供了三种优化器:RULE、COST和CHOOSE。RULE基于预定义的规则进行查询优化,而COST则...
为了找出执行效率低下的SQL语句,可以使用系统提供的监控工具,例如`V$SQLAREA`视图,来查看每个SQL语句的执行次数、磁盘读取次数以及缓存命中率等指标,从而定位并优化问题语句。 #### 十六、索引重构 对于性能...
SQL语句优化是提高数据库性能的关键技术之一,尤其是在Oracle数据库系统中。Oracle提供了多种优化策略,以确保SQL查询能够高效地执行。以下是针对标题和描述中提到的SQL优化规则及建议的详细阐述: 1. **优化器的...
"Statement Tracer for Oracle"是一个专门针对Oracle数据库的代码跟踪工具,它帮助开发者和DBA深入分析SQL语句的执行情况,从而提高数据库性能和解决问题。 Statement Tracer for Oracle的主要功能包括: 1. **...
SQL语句优化是数据库性能提升的关键,尤其是在大数据量和高并发的环境中。下面将详细讲解提供的几个关键优化方法: 1. **选择最有效率的表名顺序**:在基于规则的优化器中,ORACLE会从右到左处理FROM子句中的表。...
数据库管理员可以通过调整 `init.ora` 文件中的参数,如 `shared_pool_size`,来增加共享池的大小,以存储更多的SQL语句和执行计划,从而提高共享的可能性和效率。 2. **选择表的处理顺序**:Oracle解析器按FROM...
使用EXPLAIN PLAN可以分析SQL语句的执行计划,帮助理解优化器如何处理查询,从而进行调整。 11. **考虑并行查询**: 对于大型数据集,启用并行查询可以利用多个CPU核心,加快处理速度。 12. **物化视图**: ...
11. 使用EXPLAIN PLAN:分析查询的执行计划,理解ORACLE如何处理SQL语句,以便进行优化。 12. 适当使用索引合并:当多个单列索引可以用于同一个查询时,ORACLE可能会合并这些索引,但这可能并不总是最优选择。 13....
在 Oracle 数据库的编写工作中,主要面临的难题是 SQL 语句可执行性问题,虽然有多种编写方式然而很难找到最适合的编写方式。因此,必须对数据查询优化做好 SQL 语句优化工作,保证能够实现高效率的 SQL 语句执行。 ...
当提交的SQL语句与共享池中已有的语句完全一致(包括空格、换行等)时,才能实现共享。共享SQL语句需要满足字符级比较和对象一致性两个条件,否则即使SQL逻辑相同,也无法共享。 4. **缓存和高速缓冲**:Oracle使用...