设为首页 收藏本站
查看: 662|回复: 0

[经验分享] 16、oracle数据库维护

[复制链接]

尚未签到

发表于 2018-9-6 11:08:56 | 显示全部楼层 |阅读模式
  16、数据库维护
  1、管理优化程序统计信息
  用于收集统计信息的首选项
  DBA-> DBMS_STATS
  SCOPE: statement level| table level| schema level| database level| global level
  preferences: cascade | degree| estimate_percent|no_invalidate|metho_opt
  granularity | incremental | publish| stale_percent
  set| get| delete| export| import
  exec dbms_stats.set_table_prefs('SH','SALES','STALE_PERCENT','13')
  desc dbms_stats;
  其中一个存储过程为:
  PROCEDURE SET_TABLE_PREFS
  Argument Name                  Type                    In/Out Default?
  ------------------------------ ----------------------- ------ --------
  OWNNAME                        VARCHAR2                IN
  TABNAME                        VARCHAR2                IN
  PNAME                          VARCHAR2                IN
  PVALUE                         VARCHAR2                IN
  PROCEDURE GATHER_TABLE_STATS
  Argument Name                  Type                    In/Out Default?
  ------------------------------ ----------------------- ------ --------
  OWNNAME                        VARCHAR2                IN
  TABNAME                        VARCHAR2                IN
  PARTNAME                       VARCHAR2                IN     DEFAULT
  ESTIMATE_PERCENT               NUMBER                  IN     DEFAULT
  BLOCK_SAMPLE                   BOOLEAN                 IN     DEFAULT
  METHOD_OPT                     VARCHAR2                IN     DEFAULT
  DEGREE                         NUMBER                  IN     DEFAULT
  GRANULARITY                    VARCHAR2                IN     DEFAULT
  CASCADE                        BOOLEAN                 IN     DEFAULT
  例子1:
  (1)create table hr.t1 as select * from dba_objects;
  因为这张表是刚刚创建的,因此看不了它的行数及block;
  (2)select OWNER,TABLE_NAME,TABLESPACE_NAME,NUM_ROWS,BLOCKS from dba_tables where OWNER='HR' and TABLE_NAME='T1';
  OWNER   TABLE_NAME TABLESPACE   NUM_ROWSBLOCKS
  ---------- ---------- ---------- ---------- ----------
  HR          T1      USERS
  (3)收集统计信息
  exec dbms_stats.gather_table_stats('HR','T1');
  SQL> exec dbms_stats.gather_table_stats('HR','T1');
  PL/SQL procedure successfully completed.
  (4)继续查询,有结果
  SQL> select OWNER,TABLE_NAME,TABLESPACE_NAME,NUM_ROWS,BLOCKS from dba_tables where OWNER='HR' and T
  ABLE_NAME='T1';
  OWNER   TABLE_NAME TABLESPACE   NUM_ROWSBLOCKS
  HR          T1      USERS ##########  1061
  2、管理自动工作量资料档案库
  自动工作量资料档案库(AWR)
  内置性能信息资料档案库
  每60分钟获取一次数据库快照,保留为8天
  所有自我管理功能的基础
  SGA---->MMON--->(60分钟)---》AWR
  使用数据库自动诊断监视器
  ADDM
  在记录每个AWR快照之后运行
  监事实例
  在awr中存储结果。
  DBMS_ADVISOR程序包
  案例2:
  oracle是如何给sql优化提出建议的呢?
  (1)建表  create table scott.test_advisor (id varchar2(20),name varchar2(128));
  (2)插入数据  insert into scott.test_advisor select object_id,object_name from dba_objects;
  (3)建立索引  create index scott.idx_test_advisor_id on scott.test_advisor(id);
  (4)获得统计信息
  exec dbms_stats.gather_table_stats('SCOTT','test_advisor',cascade=>true);
  (5)查看执行计划
  set autotrace traceonly

  select>  结果为全表扫描,内容如下

  SQL> select>  Execution Plan
  ----------------------------------------------------------
  Plan hash value: 3695065845

  |>  |
  |   0 | SELECT STATEMENT  | |     1 |    30 |   103   (1)| 00:00:02
  |
  |*  1 |  TABLE ACCESS FULL| TEST_ADVISOR |     1 |    30 |   103   (1)| 00:00:02
  |

  Predicate Information (identified by operation>  ---------------------------------------------------
  1 - filter(TO_NUMBER("ID")=1000)
  Statistics
  ----------------------------------------------------------
  1  recursive calls
  0  db block gets
  375  consistent gets
  0  physical reads

  0  redo>  596  bytes sent via SQL*Net to client
  524  bytes received via SQL*Net from client
  2  SQL*Net roundtrips to/from client
  0  sorts (memory)
  0  sorts (disk)
  1  rows processed
  下面定义任务,看看oracle给sql有什么的好建议呢?
  (6)定义任务
  SQL> declare
  2  l_task_id varchar2(20);
  3  l_sql varchar2(2000);
  4  begin

  5  l_sql :='select>  6  l_task_id :=dbms_sqltune.create_tuning_task(
  7  sql_text =>l_sql,
  8  user_name =>'SCOTT',
  9  scope =>'COMPREHENSIVE',
  10  time_limit =>30,
  11  task_name =>'manual_advisor');
  12  end;
  13  /
  PL/SQL procedure successfully completed.
  (7)执行任务
  SQL> begin
  2  dbms_sqltune.execute_tuning_task('manual_advisor');
  3  end;
  4  /
  PL/SQL procedure successfully completed.
  (8)查看建议

  set serveroutput on>  set long 99999;
  select dbms_sqltune.report_tuning_task('manual_advisor') from dual;
  建议结果如下:
  SQL> select dbms_sqltune.report_tuning_task('manual_advisor') from dual;
  DBMS_SQLTUNE.REPORT_TUNING_TASK('MANUAL_ADVISOR')
  --------------------------------------------------------------------------------
  GENERAL INFORMATION SECTION
  -------------------------------------------------------------------------------
  Tuning Task Name   : manual_advisor
  Tuning Task Owner  : SYS
  Workload Type   : Single SQL Statement
  Scope   : COMPREHENSIVE
  Time Limit(seconds): 30
  Completion Status  : COMPLETED
  Started at   : 07/02/2017 21:21:56
  Completed at   : 07/02/2017 21:21:59
  DBMS_SQLTUNE.REPORT_TUNING_TASK('MANUAL_ADVISOR')
  Schema Name: SCOTT

  SQL>
  SQL Text   : select>  FINDINGS SECTION (2 findings)
  1- Index Finding (see explain plans section below)
  DBMS_SQLTUNE.REPORT_TUNING_TASK('MANUAL_ADVISOR')
  The execution plan of this statement can be improved by creating one or more
  indices.
  Recommendation (estimated benefit: 98.04%)
  ------------------------------------------
  - Consider running the Access Advisor to improve the physical schema design
  or creating the recommended index.
  create index SCOTT.IDX$$_023A0001 on SCOTT.TEST_ADVISOR(TO_NUMBER("ID"));
  Rationale
  ---------
  DBMS_SQLTUNE.REPORT_TUNING_TASK('MANUAL_ADVISOR')
  --------------------------------------------------------------------------------
  Creating the recommended indices significantly improves the execution plan
  of this statement. However, it might be preferable to run "Access Advisor"
  using a representative SQL workload as opposed to a single statement. This
  will allow to get comprehensive index recommendations which takes into
  account index maintenance overhead and additional space consumption.
  2- Restructure SQL finding (see plan 1 in explain plans section)
  ----------------------------------------------------------------

  The predicate TO_NUMBER("TEST_ADVISOR"."ID")=1000 used at line>  execution plan contains an implicit data type conversion on indexed column
  "ID". This implicit data type conversion prevents the optimizer from
  从上面可以看到有2条建议,说可以提高性能的98.4%(Recommendation (estimated benefit: 98.04%))分别如下:
  create index SCOTT.IDX$$_023A0001 on SCOTT.TEST_ADVISOR(TO_NUMBER("ID"));
  TO_NUMBER("TEST_ADVISOR"."ID")=1000
  下面来看看第二条建议怎么样?

  select>  结果还是全表扫描cost为103
  在看看第一条建议
  create index SCOTT.IDX$$_023A0001 on SCOTT.TEST_ADVISOR(TO_NUMBER("ID"));
  在查询结果为走索引,代价为3,的确提高了98.4%性能!!!!!!!


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-563980-1-1.html 上篇帖子: oracle 监听启动、停止、查看命令 下篇帖子: oracle查看被锁的表和解锁
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表