首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用dbms_stats.gather_schema_stats [oracle]

使用dbms_stats.gather_schema_stats是Oracle数据库中的一个过程,用于收集数据库中指定模式(schema)的统计信息。统计信息包括表、索引和列的数据分布、数据密度、数据分散度等,这些信息对于优化查询性能和执行计划的选择非常重要。

该过程的语法如下:

dbms_stats.gather_schema_stats(

ownname IN VARCHAR2,

estimate_percent IN NUMBER DEFAULT DBMS_STATS.AUTO_SAMPLE_SIZE,

block_sample IN BOOLEAN DEFAULT FALSE,

method_opt IN VARCHAR2 DEFAULT 'FOR ALL COLUMNS SIZE AUTO',

degree IN NUMBER DEFAULT DBMS_STATS.DEFAULT_DEGREE,

granularity IN VARCHAR2 DEFAULT 'DEFAULT',

cascade IN BOOLEAN DEFAULT TRUE,

stattab IN VARCHAR2 DEFAULT NULL,

statid IN VARCHAR2 DEFAULT NULL,

statown IN VARCHAR2 DEFAULT NULL,

no_invalidate IN BOOLEAN DEFAULT FALSE);

参数说明:

  • ownname:指定要收集统计信息的模式(schema)名称。
  • estimate_percent:指定收集统计信息时的采样百分比,默认为DBMS_STATS.AUTO_SAMPLE_SIZE,表示自动选择采样比例。
  • block_sample:指定是否使用块采样方法进行统计信息收集,默认为FALSE,表示不使用块采样。
  • method_opt:指定统计信息收集的方法和选项,默认为'FOR ALL COLUMNS SIZE AUTO',表示自动选择统计信息收集的方法和选项。
  • degree:指定并行度级别,默认为DBMS_STATS.DEFAULT_DEGREE,表示使用数据库的默认并行度级别。
  • granularity:指定统计信息的粒度,默认为'DEFAULT',表示使用数据库的默认粒度。
  • cascade:指定是否级联收集统计信息,默认为TRUE,表示级联收集统计信息。
  • stattab、statid、statown:用于指定统计信息的存储表、统计信息标识和统计信息所有者。
  • no_invalidate:指定是否在收集统计信息时使相关的SQL执行计划失效,默认为FALSE,表示使执行计划失效。

使用dbms_stats.gather_schema_stats可以帮助优化数据库的性能,提高查询效率。在以下情况下可以考虑使用该过程:

  • 当数据库中的数据分布发生较大变化时,可以使用该过程更新统计信息,以便优化查询执行计划。
  • 当数据库中的索引或表结构发生变化时,可以使用该过程重新收集统计信息,以确保查询优化器能够根据最新的数据分布做出正确的选择。
  • 当数据库中的查询性能下降或执行计划选择不合理时,可以使用该过程重新收集统计信息,以尝试改善查询性能。

腾讯云提供了一系列与数据库相关的产品,可以帮助用户管理和优化数据库性能,例如:

  • 云数据库 TencentDB:提供了多种数据库引擎(如MySQL、SQL Server、PostgreSQL等)的托管服务,可以自动进行统计信息收集和优化。
  • 数据库性能优化工具 DBbrain:提供了全面的数据库性能监控和优化功能,可以自动收集统计信息并提供性能优化建议。

更多关于腾讯云数据库产品的信息,请参考以下链接:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Oracle并发(CONCURREMT)收集统计信息

作者简介:何剑敏 Oracle ACS华南区售后团队,首席技术工程师。多年从事第一线的数据库运维工作,有丰富项目经验、维护经验和调优经验,专注于数据库的整体运维。...(ownname => 'XXX_SCHEMA'); --263秒 开启8个并发: exec dbms_stats.gather_schema_stats(ownname => 'XXX_SCHEMA...所以开启concurrent的另外一个建议,就是使用resource manager。 3....当启用concurrent的时候,同时再使用并行,建议将PARALLEL_ADAPTIVE_MULTI_USER设置成false,关闭并发度的自适应调整。...默认值是true,当使用默认值时,使自适应算法,在查询开始时基于系统负载来自动减少被要求的并行度。实际的并行度基于默认、来自表或hints的并行度,然后除以一个缩减因数。

1.8K50
  • Oracle使用小记

    windows下Oracle必须要启动的服务 Oracle ORCL VSS Writer Service:Oracle卷映射拷贝写入服务,VSS(Volume Shadow Copy Service)...(非必须启动) OracleDBConsoleorcl:Oracle数据库控制台服务,orcl是Oracle的实例标识,默认的实例为orcl。...(非必须启动) OracleJobSchedulerORCL:Oracle作业调度(定时器)服务,ORCL是Oracle实例标识。...OracleServiceORCL:数据库服务(数据库实例),是Oracle核心服务该服务,是数据库启动的基础, 只有该服务启动,Oracle数据库才能正常启动。...(必须启动) Oralce表空间 表空间是oracle的逻辑区域,可以对应一个或者多个数据库文件。表空间是Oracle数据恢复的最小单位,容纳了很多实体——表、视图、索引、....(来自百度)。

    81950

    9i下优化器模式的选择

    我认为Oracle最重要、最核心、智能化程度最高的技术之一,就是优化器。他决定了一条SQL,在现有条件下,用什么执行计划,是最优的。...有高人说过“Oracle中80%的性能问题都是来自SQL语句”,因此,优化器的好坏,一定程度上就决定了SQL语句的执行效率,进而影响整个数据库的性能。...,而在新库,就用了全表扫描,已经对新库手工采集了统计信息,按照owner收集, begin dbms_stats.gather_schema_stats( ownname => 'USER', cascade...首先,9i下优化器模式默认的是CHOOSE,这个值是表示,Oracle既可以采用基于规则的优化器(RBO),也可以采用基于成本代价的优化器(CBO),到底使用那个值,取决于当前SQL的被访问的表中是不是有可以使用的统计信息...如果所有被访问的表都没有统计信息,Oracle就会采用基于规则的优化器RBO,优先级别如下, ?

    54230

    使用cx_Oracle连接Oracle(高级篇)

    这部分会和Oracle awr 报告穿插着写 ---- 上节讲了如何利用Python连接Oracle数据库并执行SQL语句 这节的内容较多,分别是: 1.使用sys用户连接Oracle数据库 2.通过函数执行...SQL语句 3.通过读取文件内的内容来执行SQL语句 4.使用Python 捕获程序异常 ---- 使用cx_Oracle获取oracle表空间的使用率 我们新建一个文件,命名为tablespace.sql...,该文件的内容是获取表空间的使用率: 文件路径为:/home/oracle/script/tablespace.sql select a.tablespace_name,a.bytes/1024/ 1024...可以看出已经捕获成功 我们是利用fetchall方法来获取数据的,返回的是一个列表(list),我们可以使用i[0]的方式只取感兴趣的列,如下图我们只获取表空间的名称 只需将代码最后一行改成:print...---- 至此cx_Oracle模块连接oracle(高级篇)已经讲完,下期介绍一些实用的日常运维方面的命令。 后续会讲述如何将得到的数据存入MySQL数据库供日后分析

    1K30

    【DB笔试面试630】在Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?

    ♣ 题目部分 在Oracle中,怎样收集表的统计信息?怎样收集分区表的统计信息?...针对分区表的单个分区进行收集统计信息 除此之外,还有一些其它的用法,如下所示: l EXEC DBMS_STATS.GATHER_DATABASE_STATS();--收集当前数据库下所有用户的统计信息 l EXEC DBMS_STATS.GATHER_SCHEMA_STATS...(USER);--收集用户下所有对象的统计信息 当系统的分区表数据量很大时,如果每次都收集全部的分区必然会导致统计信息的收集非常慢,在Oracle 11g之后可以通过设置INCREMENTAL来只针对数据有变动的分区做收集...只收集数据变动的分区 SELECT DBMS_STATS.GET_PREFS('INCREMENTAL',NULL,'TABLE_NAME') FROM DUAL;--查看分区表INCREMENTAL的值 本文选自《Oracle

    99130

    oracle游标的使用详解_oracle游标失效

    3、游标的类型 显式游标(Explicit Cursor):显式游标需要定义声明,在使用前要打开和获取,使用完毕后要关闭。...多用于只返回一行的SQL语句 4、隐式游标 (ORACLE在创建隐式游标时,默认的游标名为SQL) 1)游标的主要属性(显示游标、隐式游标) %FOUND 布尔型属性,当SQL语句至少影响一行时为TRUE...游标的属性只能在PL/SQL块中使用,而不能在SQL语句中使用 例1 将PRODUCTS表中类型为1的所有产品的单价打9折,并显示该更新所影响的行数....select_statement; 说明: 参数parameter形式如下:para_name [IN] data_type [:=|DEFAULT value] (2)打开游标 当打开游标时,ORACLE...FOR循环时,不能使用OPEN、FETCH、CLOSE语句。

    1.8K40

    Oracle---使用日常

    如果合并没有刻意要删除重复行,那么就使用Union All 两个要联合的SQL语句 字段个数必须一样,而且字段类型要“相容”(一致); 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到...如果希望即使重复的结果显示出来可以使用union all,例如: 2.在oracle的scott用户中有表emp select * from emp where deptno >= 20 union...使用union和union all必须保证各个select 集合的结果有相同个数的列,并且每个列的类型是一样的。但列名则不一定需要相同,oracle会将第一个结果的列名作为结果集的列名。...例如下面是一个例子: select empno,ename from emp union select deptno,dname from dept 我们没有必要在每一个select结果集中使用...order by子句来进行排序,我们可以在最后使用一条order by来对整个结果进行排序。

    87320

    oracle怎么使用触发器,Oracle触发器的使用

    Oracle触发器的使用 触发器是指存放在数据库中,并被隐藏执行的存储过程。...一、触发器简介 触发器是指隐含执行的存储过程,它可以使用PL/SQL,java和C进行开发,当发生特定事件(例如:修改表、建立对象、登录数据库)时,Oracle会自动执行触发器的相应代码。...启动和关闭例程 Oracle错误信息 用户登陆和关闭会话 特定表和视图的DML操作 DDL语句 2、触发条件(可选) 触发条件是指使用when子句指定一个boolean表达式,当表达式返回true时,则执行触发器相应代码...3、触发操作 触发操作是指包含SQL语句和其他执行代码的PL/SQL块,不仅可以使用PL/SQL开发,也可以使用java或c语言开发,当触发条件为true时,会自动执行触发操作的相应代码。...但是在编写触发器执行代码时,需要注意一下限制: 触发代码大小不能超过32k,如果确实需要使用大量代码建立触发器,应该首先建立存储过程,然后在触发器中使用call语句调用存储过程。

    2.4K30
    领券