先分析表
select 'analyze table '||table_name||' compute statistics;' from user_tables;
把查询结果依次执行
把所有表分析一遍
然后user_tables中就会刷新表的信息
select * from user_tables where num_rows=0;
查出行数为0的表信息.
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理不再仅仅是存储和管理数据,而转变成用户所需要的各种数据管理的方式.数据库有很多种类型,从最简单的存储有各种数据的表格到能够进行海量数据存储的大型数据库系统都在各个方面得到了广泛的应用.
如果是分析oracle的错误,一般看日志进行解决.如果是优化sql执行效率,这个你得买本专门讲解oracle优化的书好好看看.sql优化是一条漫长的路.
第二段:查询Oracle数据库中数据文件信息的方法
①.、查看Oracle数据库中数据文件信息的工具方法:
使用上面介绍过的方法登录oracle enterprise manager console工具,选择'存储' 数据文件,会看到如下的界面,该界面显示了数据文件名称,表空间名称,以兆为单位的数据文件大小,已使用的数据文件大小及数据文件利用率.
第一段:通过PL/SQL Dev工具
①.、直接File-New-Explain Plan Window,在窗口中执行sql可以查看计划结果.其中,Cost表示cpu的消耗,单位为n%,Cardinality表示执行的行数,等价Rows.
注意:PL/SQL Dev工具的Command window中不支持set autotrance on的命令.还有使用工具方法查看计划看到的信息不全,有些时候我们需要sqlplus的支持.
第二段:通过sqlplus
①..最简单的办法
Sql set autotrace on
Sql select * from dual;
执行完语句后,会显示explain plan 与 统计信息.
这个语句的优点就是它的缺点,这样在用该方法查看执行时间较长的sql语句时,需要等待该语句执行成功后,才返回执行计划,使优化的周期大大增长.如果不想执行语句而只是想得到执行计划可以采用:
Sql set autotrace traceonly
这样,就只会列出执行计划,而不会真正的执行语句,大大减少了优化时间.虽然也列出了统计信息,但是因为没有执行语句,所以该统计信息没有用处,如果执行该语句时遇到错误,解决方法为:
(1)在要分析的用户下:
Sqlplus @ ?
dbmsadminutlxplan.sql
Sqlplus @ ?sqlplusadminplustrce.sql
Sqlplus grant plustrace to user_name;
- - user_name是上面所说的分析用户
(1) sqlplus explain plan for select * from testdb.myuser
buffer_gets/executions AVG FROM v$sqlarea
ADDRESS TEXT BUFFER_GETS EXECUTIONS AVG
-------- ---------------------------------------- ----------- ---------- ------------------------------------------------------------
从而对找出的语句进行进一步优化.当然我们还可以为一个正在运行的会话中运行的所有SQL语句生成执行计划,这需要对该会话进行跟踪,产生trace文件,然后对该文件用tkprof程序格式化一下,这种得到执行计划的方式很有用,因为它包含其它额外信息,如SQL语句执行的每个阶段(如Parse、Execute、Fetch)分别耗费的各个资源情况(如CPU、DISK、elapsed等).
全局参数设置: .OracleHome/admin/SID/pfile中指定: SQL_TRACE = true (10g)
当前session中设置:
SQL alter session set SQL_TRACE=true;
SQL select * from dual;
SQL alter session set SQL_TRACE=false;
对其他用户进行跟踪设置:
SQL select sid,serial#,username from v$session where username='XXX';
SID SERIAL# USERNAME
------ ---------- ------------------
然后使用oracle自带的tkprof命令行工具格式化跟踪文件.
Lv1 - 启用标准的SQL_TRACE功能,等价于SQL_TRACE
全局设定:
当前session设定:
对其他用户进行设置:
一般,一次跟踪可以分为以下几步:
①.、界定需要跟踪的目标范围,并使用适当的命令启用所需跟踪.
--使用一下SQL找到当前session的跟踪文件:
--查找后使用tkprof命令,将TRACE文件格式为到D盘的explain_format.txt文件中
文件内容大致如下(看不太懂....懵懂啊.....天啊....神啊.....过几时就懂了/////////////)
Sort options: default
********************************************************************************
count = number of times OCI procedure was executed
cpu = cpu time in seconds executing
elapsed = elapsed time in seconds executing
disk = number of physical reads of buffers from disk
query = number of buffers gotten for consistent read
current = number of buffers gotten in current mode (usually for update)
rows = number of rows processed by the fetch or execute call********************************************************************************
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 0 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 0 0.00 0.00 0 0 0 0
total 1 0.00 0.00 0 0 0 0
Misses in library cache during parse: 0
Misses in library cache during execute: 1
Optimizer goal: CHOOSE
Parsing user id: SYS
oracle里对sql查询的日志进行查看步骤如下:
①.、Oracle日志的路径的查看.
以上就是土嘎嘎小编为大家整理的如何分析oracle查询相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!