dbms_stats 导入导出 schema 级别统计信息

本文涉及的产品
应用型负载均衡 ALB,每月750个小时 15LCU
传统型负载均衡 CLB,每月750个小时 15LCU
日志服务 SLS,月写入数据量 50GB 1个月
简介:     在使用CBO优化器模式的Oracle数据库中,统计信息是CBO生成最佳执行计划的重要依据。这些统计信息通常包括列级、表级、索引、系统级别的统计信息等。

    在使用CBO优化器模式的Oracle数据库中,统计信息是CBO生成最佳执行计划的重要依据。这些统计信息通常包括列级、表级、索引、系统级别的统计信息等。所有的这些统计信息都可以被备份,导入导出也可以被锁定与解锁。因此相应地,我们可以导出列级、表级、索引、系统级别的统计信息。通过导出导入统计信息,可以在测试环境来模拟产生环境进行数据库性能优化,SQL调优等。本文主要描述了基于schema级别导出导入统计信息到不同的数据库。

    关于统计信息的具体描述与用法,本文不作详细介绍,大家可以参考 Oracle references 。

 

1、导入导出统计信息的情形或作用
  a、可以把生产环境的统计信息导入到测试环境使得执行计划的产生能极大程度上等同于生产环境
  b、通过导入导出可以冻结执行计划,即控制与对比不同环境中的执行计划
  c、统计信息可以在重新analyze schema之前进行备份,防止analyze后性能下降
  d、系统级别的统计信息可以被移植到小型服务器来模拟Oracle在大型服务器的运行环境
  e、系统级别的统计信息也可以用于迁移到新服务器以保证一致的执行计划直到真正开始使用新服务器
  f、由于不同的工作负载需要使用不同的统计信息,可以在这些负载运行前给予合适的统计信息(如白天的OLTP,晚上为批量job模式)

 

2、schema级别统计信息导出导入的主要步骤
  a、收集统计信息(源schema或者含系统级别)
  b、创建用于存储统计信息的表(如stats_table)
  c、使用dbms_stats.export_schema_stats导出schema统计信息到表stats_table
  d、使用datapump expdp导出stats_table表。(可考虑SQL*Plus copy方式实现来避免导入导出)
  e、ftp或scp/cp dump文件到目的schema所在的服务器
  f、使用datapump impdp导入dmp文件到目的schema,如果需要备份,应在导入之前备份原统计信息
  g、使用dbms_stats.import_system_stats导入统计信息到所需的schema

 

3、创建统计信息的示例
--下面是一个基于schema scott级别进行收集统计信息的例子

BEGIN
   DBMS_STATS.gather_schema_stats (ownname            => 'SCOTT',
                                   options            => 'GATHER AUTO',
                                   estimate_percent   => DBMS_STATS.auto_sample_size,
                                   method_opt         => 'for all columns size repeat',
                                   degree             => 8);
END;
/

 

4、演示导出导入统计信息导不同的DB

--下面将数据库mmbo5上scott的统计信息导入到另外一个数据库mmbo4下的scott中
a、收集统计信息
scott@MMBO5> delete from emp where deptno=20;

scott@MMBO5> commit;

scott@MMBO5> exec dbms_stats.gather_schema_stats('SCOTT',cascade=>true);

scott@MMBO5> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
DEPT                                    4 20130513 22:19:10
EMP                                     9 20130513 22:19:10      --->emp表被删除了5条记录还剩9条
BONUS                                   0 20130513 22:19:10
SALGRADE                                5 20130513 22:19:10
TT                                      4 20130513 22:19:10

b、创建用于存储统计信息的表
--可以指定表存放于哪个表空间,如果缺省则存放到用户的缺省表空间
scott@MMBO5> exec dbms_stats.create_stat_table('SCOTT', 'STATS_TABLE');

PL/SQL procedure successfully completed.

c、导出scott的统计信息到stats_table
scott@MMBO5> exec dbms_stats.export_schema_stats('SCOTT','STATS_TABLE','SCOTT');

PL/SQL procedure successfully completed.

scott@MMBO5> exit

d、导出统计信息到dump文件
oracle@Dev-DB-04:~> expdp scott/tiger directory=db_dump_dir dumpfile=st.dmp logfile=st.log tables=STATS_TABLE

Export: Release 10.2.0.4.0 - 64bit Production on Monday, 13 May, 2013 22:20:53

Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 64 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
. . exported "SCOTT"."STATS_TABLE"                       17.82 KB      74 rows
Master table "SCOTT"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SCOTT.SYS_EXPORT_TABLE_01 is:
  /u02/database/MMBO5/BNR/dump/st.dmp
Job "SCOTT"."SYS_EXPORT_TABLE_01" successfully completed at 22:21:11

e、ftp统计信息到目的服务器并导入dump文件
--由于下面是在同一台服务器,所以直接用cp命令复制dump文件到特定目录
oracle@Dev-DB-04:~> cp /u02/database/MMBO5/BNR/dump/st.dmp /u02/database/MMBO4/BNR/dump

f、使用datapump impdp导入dmp文件到目的schema
oracle@Dev-DB-04:~> export ORACLE_SID=MMBO4
oracle@Dev-DB-04:~> impdp scott/tiger directory=db_dump_dir dumpfile=st.dmp logfile=imp_st.log tables=STATS_TABLE

Import: Release 10.2.0.4.0 - 64bit Production on Monday, 13 May, 2013 22:22:57
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SCOTT"."STATS_TABLE"                       17.82 KB      74 rows
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Job "SCOTT"."SYS_IMPORT_TABLE_01" successfully completed at 22:23:03

g、导入统计信息到目标数据库的schema
--导入前先查看一下本数据库scott的统计信息
scott@MMBO4> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
STATS_TABLE
DEPT                                    4 20130513 22:16:05
EMP                                    14 20130513 22:16:05
BONUS                                   0 20130513 22:16:05
SALGRADE                                5 20130513 22:16:05
T                                   49991 20130513 22:16:20

6 rows selected.

--导入统计信息
scott@MMBO4> exec dbms_stats.import_schema_stats('SCOTT','STATS_TABLE','SCOTT');

PL/SQL procedure successfully completed.

--可以通过查询视图dba_optstat_operations获得目标数据库上统计信息日志
ALTER SESSION SET nls_timestamp_tz_format='yyyy-mm-dd hh24:mi:ss';
COL start_time FORMAT a14
COL end_time FORMAT a14
COL operation FORMAT a30
COL target FORMAT a30
SET LINESIZE 120

SELECT operation,
       target,
       start_time,
       end_time
  FROM dba_optstat_operations
 WHERE operation LIKE 'import%';

OPERATION                      TARGET                         START_TIME     END_TIME
------------------------------ ------------------------------ -------------- --------------
import_schema_stats            SCOTT                          2013-05-13 22: 2013-05-13 22:
                                                              24:23          24:23

--Author: Robinson
--Blog  : http://blog.csdn.net/robinson_0612
                                                               
--下面的查询也可以看到此时scott下LAST_ANALYZED已经被更新为与源服务器上的统计信息相同
scott@MMBO4> select table_name,num_rows,last_analyzed from user_tables;

TABLE_NAME                       NUM_ROWS LAST_ANALYZED
------------------------------ ---------- -----------------
STATS_TABLE
DEPT                                    4 20130513 22:19:10
EMP                                     9 20130513 22:19:10
BONUS                                   0 20130513 22:19:10
SALGRADE                                5 20130513 22:19:10
T                                   49991 20130513 22:16:20

6 rows selected.

scott@MMBO4> select count(*) from emp;

  COUNT(*)
----------
        14
--实际上在mmbo4上表emp的数据依旧为14条,但统计信息为9条,是来自源数据库的统计信息
--对于源数据库schema上存在,但目标数据库schema不存在的对象,如mmbo5上的表tt,在mmbo4上不会被导入
--对于源数据库schema上不存在,但目标数据库schema存在的对象,如mmbo4上的表t,其统计信息没有被更新

h、根据需要可以考虑是否清除存储统计信息的表
scott@MMBO4> exec dbms_stats.drop_stat_table('SCOTT','STATS_TABLE');

PL/SQL procedure successfully completed.

--对于系统级别的统计信息的导入导出,此处不做演示,需要注意的是应使用dbms_stats中相应的导入导出procedure.
--dbms_stats.gather_system_stats
--dbms_stats.import_system_stats
--dbms_stats.export_system_stats

 

更多参考

有关Oracle RAC请参考
     使用crs_setperm修改RAC资源的所有者及权限
     使用crs_profile管理RAC资源配置文件
     RAC 数据库的启动与关闭
     再说 Oracle RAC services
     Services in Oracle Database 10g
     Migrate datbase from single instance to Oracle RAC
     Oracle RAC 连接到指定实例
     Oracle RAC 负载均衡测试(结合服务器端与客户端)
     Oracle RAC 服务器端连接负载均衡(Load Balance)
     Oracle RAC 客户端连接负载均衡(Load Balance)
     ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)
     ORACLE RAC 监听配置 (listener.ora tnsnames.ora)
     配置 RAC 负载均衡与故障转移
     CRS-1006 , CRS-0215 故障一例 
     基于Linux (RHEL 5.5) 安装Oracle 10g RAC
     使用 runcluvfy 校验Oracle RAC安装环境

有关Oracle 网络配置相关基础以及概念性的问题请参考:
     配置非默认端口的动态服务注册
     配置sqlnet.ora限制IP访问Oracle
     Oracle 监听器日志配置与管理
     设置 Oracle 监听器密码(LISTENER)
     配置ORACLE 客户端连接到数据库

有关基于用户管理的备份和备份恢复的概念请参考
     Oracle 冷备份
     Oracle 热备份
     Oracle 备份恢复概念
     Oracle 实例恢复
     Oracle 基于用户管理恢复的处理
     SYSTEM 表空间管理及备份恢复
     SYSAUX表空间管理及恢复
     Oracle 基于备份控制文件的恢复(unsing backup controlfile)

有关RMAN的备份恢复与管理请参考
     RMAN 概述及其体系结构
     RMAN 配置、监控与管理
     RMAN 备份详解
     RMAN 还原与恢复
     RMAN catalog 的创建和使用
     基于catalog 创建RMAN存储脚本
     基于catalog 的RMAN 备份与恢复
     RMAN 备份路径困惑
     使用RMAN实现异机备份恢复(WIN平台)
     使用RMAN迁移文件系统数据库到ASM
     linux 下RMAN备份shell脚本
     使用RMAN迁移数据库到异机

有关ORACLE体系结构请参考
     Oracle 表空间与数据文件
     Oracle 密码文件
     Oracle 参数文件
     Oracle 联机重做日志文件(ONLINE LOG FILE)
     Oracle 控制文件(CONTROLFILE)
     Oracle 归档日志
     Oracle 回滚(ROLLBACK)和撤销(UNDO)
     Oracle 数据库实例启动关闭过程
     Oracle 10g SGA 的自动化管理
     Oracle 实例和Oracle数据库(Oracle体系结构) 

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
目录
相关文章
|
2月前
|
SQL 监控 关系型数据库
SQL语句当前及历史信息查询-performance schema的使用
本文介绍了如何使用MySQL的Performance Schema来获取SQL语句的当前和历史执行信息。Performance Schema默认在MySQL 8.0中启用,可以通过查询相关表来获取详细的SQL执行信息,包括当前执行的SQL、历史执行记录和统计汇总信息,从而快速定位和解决性能瓶颈。
|
SQL 监控 关系型数据库
Trace分析优化器执行计划与Sys schema视图的使用详解
Trace分析优化器执行计划与Sys schema视图的使用详解
98 0
|
SQL 存储 JSON
没有索引也能用SQL ?深度解析 SLS Schema-on-Read 分析原理与应用
为了能够更灵活的挖掘日志数据背后的价值,SLS提出了一种不需要事先建立索引就能对数据进行分析的模式。本文对SLS Schema-on-Read分析的提出背景、设计思路、实现过程、使用方式、适用场景进行了全面的介绍。
15242 0
没有索引也能用SQL ?深度解析 SLS  Schema-on-Read 分析原理与应用
|
Web App开发 存储 关系型数据库
InnoDB 层系统字典表 | 全方位认识 information_schema
在《Server 层混杂信息字典表 | 全方位认识 information_schema》中,我们详细介绍了information_schema下的状态变量、系统变量、进程状态、字符集和校对规则等字典表,本期我们将为大家带来系列第五篇《InnoDB 层系统字典表 | 全方位认识 information_schema》,下面请跟随我们一起开始information_schema 系统库的系统学习之旅吧。
3158 0
|
SQL 监控 测试技术
SQL Server 更改跟踪(Chang Tracking)监控表数据
原文:SQL Server 更改跟踪(Chang Tracking)监控表数据 一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 主要区别与对比(Compare) 实现监控表数据步骤(Process) 参考文献(References) 二.
1848 0