第三天3-5索引】【执行计划】

来源:互联网 发布:淘宝长安cs95中网改装 编辑:程序博客网 时间:2024/05/16 01:13
---3-5索引select * from v$archived_logselect * from v$flash_recovery_area_usage --可以查看归档日志用量百分比SQL> alter system set db_recovery_file_dest_size=3g;系统已更改。SQL> show parameter db_recoveryNAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------db_recovery_file_dest                string      C:\oracle\product\10.2.0\flash                                                 _recovery_areadb_recovery_file_dest_size           big integer 3Gselect * from v$session_wait where wait_class<>'Idle'select * from v$streams_capture  --查看流捕获,流用于oracle数据库之间的数据同步exec dbms_capture_adm.stop_capture('TEST$CAP');   --停掉流捕获,TEST$CAP是流捕获的名字select * from dba_data_filesselect * from dba_tables where tablespace_name ='USERS'select count(*) from sys.ttTselect * from dba_tables where table_name='TTT'select * from ttt where rownum < 10;select  object_id,count(*) from ttt group by object_idSQL> select  object_id,count(*) from ttt group by object_id;已选择11334行。执行计划----------------------------------------------------------Plan hash value: 3008753727-----------------------------------------------------------------------------------| Id  | Operation          | Name | Rows  | Bytes |TempSpc| Cost (%CPU)| Time     |-----------------------------------------------------------------------------------|   0 | SELECT STATEMENT   |      | 11331 | 56655 |       |  3046   (2)| 00:00:37 ||   1 |  HASH GROUP BY     |      | 11331 | 56655 |  8704K|  3046   (2)| 00:00:37 ||   2 |   TABLE ACCESS FULL| TTT  |   727K|  3551K|       |  2222   (1)| 00:00:27 |-----------------------------------------------------------------------------------统计信息----------------------------------------------------------          1  recursive calls          0  db block gets       9362  consistent gets       9345  physical reads        116  redo size     199903  bytes sent via SQL*Net to client       8705  bytes received via SQL*Net from client        757  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)      11334  rows processed                  SQL> select * from ttt where object_id=25  2  ;已选择64行。执行计划----------------------------------------------------------Plan hash value: 2391132391-------------------------------------------------------------------------------| Id  | Operation                   | Name    | Rows  | Bytes | Cost (%CPU)| Ti-------------------------------------------------------------------------------|   0 | SELECT STATEMENT            |         |    64 |  5440 |    68   (0)| 00|   1 |  TABLE ACCESS BY INDEX ROWID| TTT     |    64 |  5440 |    68   (0)| 00|*  2 |   INDEX RANGE SCAN          | IDX_TTT |    64 |       |     3   (0)| 00-------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   2 - access("OBJECT_ID"=25)统计信息----------------------------------------------------------          1  recursive calls          0  db block gets         72  consistent gets                          --逻辑读,评价sql性能,比看时间准确,它表示orcl从内存中读访问过的块的块数         63  physical reads          0  redo size       2126  bytes sent via SQL*Net to client        444  bytes received via SQL*Net from client          6  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)         64  rows processed--查询100万条数据时过慢,可以增加sga大小,修改完SGA大小需要重新启动SQL> show parameter sga; NAME                                 TYPE        VALUE------------------------------------ ----------- ------------------------------lock_sga                             boolean     FALSEpre_page_sga                         boolean     FALSEsga_max_size                         big integer 200Msga_target                           big integer 200MSQL> select /*+ no_index(ttt idx_ttt) */ * from ttt where object_id=25;      --注释作用是让查询语句不走索引,比较逻辑读,发现比走索引要慢的多已选择64行。执行计划----------------------------------------------------------Plan hash value: 774701505--------------------------------------------------------------------------| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |--------------------------------------------------------------------------|   0 | SELECT STATEMENT  |      |    64 |  5440 |  2223   (1)| 00:00:27 ||*  1 |  TABLE ACCESS FULL| TTT  |    64 |  5440 |  2223   (1)| 00:00:27 |--------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------   1 - filter("OBJECT_ID"=25)统计信息----------------------------------------------------------          1  recursive calls          0  db block gets       9366  consistent gets                   --明显比用索引慢很多       9243  physical reads          0  redo size       2126  bytes sent via SQL*Net to client        444  bytes received via SQL*Net from client          6  SQL*Net roundtrips to/from client          0  sorts (memory)          0  sorts (disk)         64  rows processedselect cpu_time from v$sql where sql_text like 'select /*+ no_index(ttt idx_ttt) */ * from ttt where object_id=25' --查询sql执行的时间,单位10的6次幂,微秒--elapsed_time是花费时间,cpu_time 是处理器处理时间SQL> set autotrace onSQL> set autotrace offSQL> select distinct sid from v$mystat;       SID----------       158select * from dba_hist_active_sess_history where sided=158  --本测试失败,没懂SQL> set timing onSQL> select cpu_time from v$sql where sql_text like 'select /*+ no_index(ttt idx_ttt) */ * from ttt where object_id=25';  CPU_TIME----------    266268已用时间:  00: 00: 00.01            --不准确,也就是elapsed_time的四舍五入tahiti.oracle.com  --oracle 在线文档,可以查视图,表等select * from v$session_longops  -- sql 执行 cputime>6s 的信息,跟踪sql执行进度--SOFARTOTALWORKUNITS        --SOFAR 当前完成多少块13310109Blocks             --TOTALWORK 总共需要扫描多少块167910109Blocks           --UNITS 单位select  * from ttt where object_id=6779SQL> exec dbms_stats.gather_table_stats('SYS','TTT',cascade => TRUE)--优化系统统计信息,收集dba_tables 数据有多少块,每个列的数据的分布信息,凭此自动选择是否选择使用索引,来提高sql执行速度。--10g以后,oracle每天晚上10点以后自动执行这句,来收集各表列的统计信息,10g以前需要写成job,认为设定每晚自动执行PL/SQL 过程已成功完成。select * from dba_scheduler_jobs  --其中JOB_NAME为GATHER_STATS_JOB就是以上提到的行列信息统计select * from dba_tab_statistics where table_name='TTT'     --?? select * from dba_tab_col_statistics where table_name='TTT'OWNERTABLE_NAMECOLUMN_NAMENUM_DISTINCTLOW_VALUEHIGH_VALUEDENSITYNUM_NULLSNUM_BUCKETSLAST_ANALYZEDSAMPLE_SIZEGLOBAL_STATSUSER_STATSAVG_COL_LENHISTOGRAMSYSTTTOBJECT_ID11222C103C302231B8.911067545892E-5012013-9-26 19:37:126720YESNO5NONEset autotrace on--显示查询结果的跟踪 autotrace only 不显示查询的结果的跟踪select object_id,count(*) from ttt group by object_idselect count(*) from tt where object_id=25 --思考,通过直接查询索引而不访问表同样能得到结果,而且执行效率非常非常的快,所谓sql优化,这是一种更好的方案。create global temporary table gt1(id int); --基于事务的表inset into gt1 values(1);select * from gt1       --能查询到1commit;select * from gt1       --查询不到1,这就是基于事务的table的特点,事务结束数据就没了create global temporary table gt2(id int) on commit delete rows;  --实际上就省略了on commit delete rowscreate global temporary table gt3(id int) on commit preserve rows; --当session失效时,数据就没了,而且数据只在该session中可见。1.tab$,obj$ --基表 支撑视图的base table dba_  all_ user_ (data dictionary)  --来源于基表2.动态性能表 X$  --支持视图的3.动态性能视图  v$v$logv$logfileselect * from v$fixed_table   NAMEOBJECT_IDTYPETABLE_NUM1X$KQFTA4294950912TABLE0       --实力启动是创建的,用于跟踪性能,不需要掌握,oracle没公开的部分select * from X$KQFTAselect distinct type from v$fixed_tableselect * from dictionary  --查询视图