我的编程空间,编程开发者的网络收藏夹
学习永远不晚

ORACLE数据表分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

ORACLE数据表分析

一、性能数据的存储过程:

性能数据的收集包含这样几个存储过程:

GATHER_INDEX_STATS:分析索引信息 
GATHER_TABLE_STATS:分析表信息,当cascade为true时,分析表、列(索引)信息 
GATHER_SCHEMA_STATS:分析方案信息 
GATHER_DATABASE_STATS:分析数据库信息 
GATHER_SYSTEM_STATS:分析系统信息

二、GATHER_TABLE_STATS: 分析表、字段和索引:

我们分析时最常用到的就是GATHER_TABLE_STATS,dbms_stats能良好地估计统计数据(尤其是针对较大的分区表),并能获得更好的统计结果,最终制定出速度更快的SQL执行计划。

procedure gather_table_stats
    (ownname varchar2, tabname varchar2, partname varchar2 default null,
     estimate_percent number default DEFAULT_ESTIMATE_PERCENT,
     block_sample boolean default FALSE,
     method_opt varchar2 default DEFAULT_METHOD_OPT,
     degree number default to_degree_type(get_param('DEGREE')),
     granularity varchar2 default  DEFAULT_GRANULARITY,
     cascade boolean default DEFAULT_CASCADE,
     stattab varchar2 default null, statid varchar2 default null,
     statown varchar2 default null,
     no_invalidate boolean default
       to_no_invalidate_type(get_param('NO_INVALIDATE')),
     stattype varchar2 default 'DATA',
     force boolean default FALSE,
     -- the context is intended for internal use only.
     context dbms_stats.CContext default null);

method_opt:决定histograms直方图信息是怎样被统计的。method_opt的取值如下(默认值为FOR ALL COLUMNS SIZE AUTO):

  • FOR ALL COLUMNS:统计所有列的HISTOGRAMS.
  • FOR ALL INDEXED COLUMNS:统计所有INDEXED列的HISTOGRAMS.
  • FOR ALL HIDDEN COLUMNS:统计你看不到列的HISTOGRAMS
  • FOR COLUMNS <LIST> SIZE <INTEGER> | REPEAT | AUTO |
  • INTEGER指的直方图的BUCKETS数量,取值范围为[1,254]。
  • REPEAT上次统计过的HISTOGRAMS。
  • AUTO:ORACLE根据列数据的分布及相关列的访问量来决定收集直方图的列。
  • SKEWONLY:ORACLE 根据列的数据分布来决定哪些列收集直方图

在 gather_table_stats 存储过程的所有参数中,除了 ownname 和 tabname,其他的参数都有默认值。

dbms_stats.gather_table_stats(ownname=>'TEST',tabname=>'T1');

三、DBMS_STATS 包管理功能

1、查找表最后执行分析的日期

select table_name,num_rows,blocks,last_analyzed from all_tables where table_name='WORK_LIST';

2、其他存储过程

  • CREATE_STAT_TABLE :创建分析数据表
  • DROP_STAT_TABLE: 删除分析数据表
  • GATHER_TABLE_STATS:执行分析表
  • GET_TABLE_STATS :获取分析数据
  • SET_TABLE_STATS : 设置分析数据
  • EXPORT_TABLE_STATS: 导出分析数据
  • IMPORT_TABLE_STATS: 导入分析数据
  • LOCK_TABLE_STATS :锁定分析数据
  • UNLOCK_TABLE_STATS :解锁分析数据
  • RESTORE_TABLE_STATS: 恢复分析数据
  • delete_table_stats :删除表统计信息

四、自动收集CBO的统计信息

从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。

这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。 
该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。

可以通过以下查询这个JOB的运行情况:

select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'

其实同在10点运行的Job还有一个AUTO_SPACE_ADVISOR_JOB,然而这个自动化功能已经影响了很多系统的正常运行,晚上10点对于大部分生产系统也并非空闲时段。 
而自动分析可能导致极为严重的闩锁竞争,进而可能导致数据库Hang或者Crash。

所以建议最好关闭这个自动统计信息收集功能

方法之一:

exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');
--恢复自动分析:
exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');

方法二:

alter system set "_optimizer_autostats_job"=false scope=spfile;
alter system set "_optimizer_autostats_job"=true scope=spfile;

Pfile可以直接修改初始化参数文件,重新启动数据库。

到此这篇关于ORACLE数据表分析的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

ORACLE数据表分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Oracle数据库出现锁表情况分析

Oracle数据库出现锁表情况分析:-- 查询所有会话的状态、等待类型及当前正在执行的SQL脚本select se.SID, se.SERIAL#, se.Status, se.Event, se.BLOCKING_SESSION, se.BLOCKING_S
Oracle数据库出现锁表情况分析
2014-12-21

Oracle表分区实例分析

这篇文章主要介绍了Oracle表分区实例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Oracle表分区实例分析文章都会有所收获,下面我们一起来看看吧。一、 表空间及分区表的概念表空间:是一个或多个数据文件
2023-06-30

ECharts数据图表实例分析

这篇文章主要介绍“ECharts数据图表实例分析”,在日常操作中,相信很多人在ECharts数据图表实例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”ECharts数据图表实例分析”的疑惑有所帮助!接下来
2023-06-27

oracle怎么导出部分表数据

Oracle数据库可以使用expdp命令来导出部分表数据。以下是导出部分表数据的步骤:1. 打开命令行或终端窗口,登录到Oracle数据库。2. 运行以下命令来导出部分表数据:```expdp username/password@servi
2023-08-11

数据分析处理库Pandas——数据透视表

数据 按指定的行列值显示 求和 按行求和 按列求和 数据 求平均 备注:按性别计算每个等级船票的平均价格。 备注:每个等级船舱中每种性别获救的平均值,也就是获救的比例。 备注:每种性别未成年人获救的平均值,也就是获救的比例。 求最大值 备注
2023-01-31

oracle怎么根据分区表更新数据

要根据分区表更新数据,可以使用以下步骤:1. 首先,确定要更新的分区表和更新的条件。2. 使用UPDATE语句来更新数据,语法如下:```sqlUPDATE 表名SET 列名1 = 值1, 列名2 = 值2, ...WHERE 条件```3
2023-08-30

Oracle Index函数与实时数据分析

Oracle Index函数是用来创建和管理索引的函数。索引是一种数据结构,用于加快对表中数据的访问速度。当在表上创建索引时,Oracle会为表中的一列或多列创建一个索引,这样在查询时就可以通过索引来快速查找数据,而不必全表扫描。实时数据
Oracle Index函数与实时数据分析
2024-08-16

oracle怎么向分区表写入数据

要向分区表写入数据,可以使用INSERT语句并指定分区键的值。例如:INSERT INTO table_name (column1, column2, ...)VALUES (value1, value2, ...)PARTITION
oracle怎么向分区表写入数据
2024-04-09

oracle如何向分区表写入数据

要向分区表写入数据,您可以使用INSERT语句来执行。以下是一个示例:```sqlINSERT INTO partitioned_table (col1, col2, col3)VALUES (value1, value2, value3)
2023-08-23

SQL Server数据库分区分表的示例分析

这篇文章主要介绍SQL Server数据库分区分表的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1、 需求说明将数据库Demo中的表按照日期字段进行水平分区分表。要求数据文件按一年一个文件存储,且分区的分割
2023-06-14

Oracle expdp导出多表或表中的部分数据

环境:Oracle database 11gR2, RHEL 5.4
2023-06-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录