惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

WordPress大学
WordPress大学
T
Threatpost
阮一峰的网络日志
阮一峰的网络日志
美团技术团队
F
Fortinet All Blogs
The GitHub Blog
The GitHub Blog
月光博客
月光博客
V
Visual Studio Blog
T
Tailwind CSS Blog
Stack Overflow Blog
Stack Overflow Blog
博客园 - 聂微东
Jina AI
Jina AI
J
Java Code Geeks
Martin Fowler
Martin Fowler
大猫的无限游戏
大猫的无限游戏
Recorded Future
Recorded Future
C
Check Point Blog
腾讯CDC
N
Netflix TechBlog - Medium
aimingoo的专栏
aimingoo的专栏
罗磊的独立博客
Hacker News: Ask HN
Hacker News: Ask HN
SecWiki News
SecWiki News
博客园 - Franky
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News | PayPal Newsroom
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
W
WeLiveSecurity
The Last Watchdog
The Last Watchdog
Cloudbric
Cloudbric
F
Full Disclosure
The Cloudflare Blog
Y
Y Combinator Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Google DeepMind News
Google DeepMind News
MongoDB | Blog
MongoDB | Blog
S
Schneier on Security
Schneier on Security
Schneier on Security
Spread Privacy
Spread Privacy
L
LINUX DO - 热门话题
AI
AI
N
News and Events Feed by Topic
T
Tor Project blog
P
Palo Alto Networks Blog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
H
Hackread – Cybersecurity News, Data Breaches, AI and More
G
Google Developers Blog

博客园 - LiuLei

[转]oracle RAC 日志体系 [转]Oracle10g RAC crsctl&srvctl SQL2008数据库还原后显示受限制用户解决办法 [转].net 连接oracle的几种方式 [转]动态交叉表 二维表 [转]日常养生:按摩七大养生穴位 让你百毒不侵! [转]两个长寿穴合谷与内关 [原]C#错误解决-"Window无法访问指定设备,路径或文件..." [转]WeifenLuo.WinFormsUI.Docking——DockPanel的一点点改进 [转]VS2010 项目引用了DLL文件,也写了Using,但是编译时提示:未能找到类型或命名空间名称 [原]升级sqlserver2008 r2的错误:perf-ReportServer-rsctr.dll被使用 [原]安装SQL SERVER2008错误:Microsoft.SqlServer.Configuration.LandingPage.Properties.Settings [原]卸载mssqlserver2008R2并重新安装 [原] sqlserver2008 还原数据库出现错误:3154 [转]【C#】Color颜色对照表 [转]关于本博客数据仓库方面的原创文章汇总 [解决]CS0016: 未能写入输出文件...\App_Web_default.aspx.cdcab7d2.zii776dc.dll”--"拒绝访问。 " 解决方法 - LiuLei [解决]Windows 7 IIS (HTTP Error 500.21 - Internal Server Error)解决 [解决]无法识别的属性“targetFramework”。请注意属性名称区分大小写。错误解决办法
[转]oracle v$sqlarea 分析SQL语句使用资源情况
LiuLei · 2013-06-28 · via 博客园 - LiuLei

V$SQLAREA 

本视图持续跟踪所有shared pool中的共享cursor,在shared pool中的每一条SQL语句都对应一列。本视图在分析SQL语句资源使用方面非常重要。 

V$SQLAREA中的信息列 

HASH_VALUE:SQL语句的Hash值。 
ADDRESS:SQL语句在SGA中的地址。 
这两列被用于鉴别SQL语句,有时,两条不同的语句可能hash值相同。这时候,必须连同ADDRESS一同使用来确认SQL语句。 
PARSING_USER_ID:为语句解析第一条CURSOR的用户 
VERSION_COUNT:语句cursor的数量 
KEPT_VERSIONS: 
SHARABLE_MEMORY:cursor使用的共享内存总数 
PERSISTENT_MEMORY:cursor使用的常驻内存总数 
RUNTIME_MEMORY:cursor使用的运行时内存总数。 
SQL_TEXT:SQL语句的文本(最大只能保存该语句的前1000个字符)。 
MODULE,ACTION:使用了DBMS_APPLICATION_INFO时session解析第一条cursor时的信息 

V$SQLAREA中的其它常用列 

SORTS: 语句的排序数 
CPU_TIME: 语句被解析和执行的CPU时间 
ELAPSED_TIME: 语句被解析和执行的共用时间 
PARSE_CALLS: 语句的解析调用(软、硬)次数 
EXECUTIONS: 语句的执行次数 
INVALIDATIONS: 语句的cursor失效次数 
LOADS: 语句载入(载出)数量 
ROWS_PROCESSED: 语句返回的列总数 

V$SQLAREA中的连接列Column View Joined Column(s) 
HASH_VALUE, ADDRESS V$SESSION SQL_HASH_VALUE, SQL_ADDRESS 
HASH_VALUE, ADDRESS V$SQLTEXT, V$SQL, V$OPEN_CURSOR HASH_VALUE, ADDRESS 
SQL_TEXT V$DB_OBJECT_CACHE NAME 

示例: 
1.查看消耗资源最多的SQL: 

  1. SELECT hash_value, executions, buffer_gets, disk_reads, parse_calls  
  2. FROM V$SQLAREA  
  3. WHERE buffer_gets > 10000000 OR disk_reads > 1000000  
  4. ORDER BY buffer_gets + 100 * disk_reads DESC;  

2.查看某条SQL语句的资源消耗: 

Sql代码  收藏代码

  1. SELECT hash_value, buffer_gets, disk_reads, executions, parse_calls  
  2. FROM V$SQLAREA  
  3. WHERE hash_Value = 228801498 AND address = hextoraw('CBD8E4B0');  

查找前10条性能差的sql语句 

  1. SELECT * FROM (select PARSING_USER_ID,EXECUTIONS,SORTS,COMMAND_TYPE,DISK_READS,sql_text FROM v$sqlarea  
  2. order BY disk_reads DESC )where ROWNUM<10 ;  

说明: 
EXECUTIONS表示同一条SQL语句一共执行了多少次,SORTS表示排序的次数,DISK_READS表示物理读的数量。 
DISK_READS NUMBER 
The sum of the number of disk reads over all child cursors 

SORTS NUMBER 
Sum of the number of sorts that were done for all the child cursors 

EXECUTIONS NUMBER 
Total number of executions, totalled over all the child cursors 
分析性能差的sql 

Sql代码  收藏代码

  1. SELECT EXECUTIONS , DISK_READS, BUFFER_GETS,   
  2. ROUND((BUFFER_GETS-DISK_READS)/BUFFER_GETS,2) Hit_radio,   
  3. ROUND(DISK_READS/EXECUTIONS,2) Reads_per_run,   
  4. SQL_TEXT   
  5. FROM V$SQLAREA   
  6. WHERE EXECUTIONS>0   
  7. AND BUFFER_GETS >0   
  8. AND (BUFFER_GETS-DISK_READS)/BUFFER_GETS < 0.8  

查询共享池中已经解析过的SQL语句及其相关信息 
--EXECUTIONS 所有子游标的执行这条语句次数 
--DISK_READS 所有子游标运行这条语句导致的读磁盘次数 
--BUFFER_GETS 所有子游标运行这条语句导致的读内存次数 
--Hit_radio 命中率 
--Reads_per_run 每次执行读写磁盘数 

笼统的说EXECUTIONS,BUFFER_GETS,Hit_radio越高表示读内存多,磁盘少是比较理想的状态,因此越高越好 
另外两个越高读磁盘次数越多,因此低点好 

选出最占用资源的查询 

  1. select b.username username,a.disk_reads reads,a.executions exec,  
  2.     a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,  
  3.     a.sql_text statement  
  4.     from v$sqlarea a,dba_users b  
  5.     where a.parsing_user_id=b.user_id  
  6.     and a.disk_reads>100000 

-----------------------
v$sqlarea,v$sql
-----------------------
从V$SQLAREA中查询最占用资源的查询select b.username username,a.disk_reads reads,
     a.executions exec,a.disk_reads/decode(a.executions,0,1,a.executions) rds_exec_ratio,
     a.sql_text Statement
from   v$sqlarea a,dba_users b
where a.parsing_user_id=b.user_id
and a.disk_reads > 100000
order by a.disk_reads desc;用buffer_gets列来替换disk_reads列可以得到占用最多内存的sql语句的相关信息。 V$SQL是内存共享SQL区域中已经解析的SQL语句。
列出使用频率最高的5个查询:select sql_text,executions
    from (select sql_text,executions,
    rank() over
     (order by executions desc) exec_rank
    from v$sql)
where exec_rank <=5;消耗磁盘读取最多的sql top5:
select disk_reads,sql_text
from (select sql_text,disk_reads,
          dense_rank() over (order by disk_reads desc) disk_reads_rank
          from v$sql)
where disk_reads_rank <=5;
找出需要大量缓冲读取(逻辑读)操作的查询:select buffer_gets,sql_text
from (select sql_text,buffer_gets,
         dense_rank() over   (order by buffer_gets desc) buffer_gets_rank
         from v$sql)
where buffer_gets_rank<=5;

-------

--top 10 sql
SELECT   *
    FROM (SELECT   b.username username,
                     a.disk_reads
                   / DECODE (a.executions, 0, 1, a.executions) rds_exec_ratio,
                   a.sql_text STATEMENT
              FROM v$sqlarea a, dba_users b
             WHERE a.parsing_user_id = b.user_id AND b.username = '用户名'
          ORDER BY rds_exec_ratio DESC)
   WHERE ROWNUM < 11
ORDER BY rds_exec_ratio DESC