Search results for: “cost”

  • 解决Oracle中Split Partition缓慢的问题

    有这样一个case , 用户的10g产品数据库中有一张按照月份划分的RANGE分区表 , 其范围为Less than (maxvalue)的最后一个Partition分区总是为空Empty的, 用户每隔半年会对这个MaxValue Partition 执行Split Partition 操作, 以便存放后续月份的数据, 同时这个表上还有一个非分区索引Nonpartitioned indexes。   满以为Split 这样一个Empry Partition会是一个回车就结束的任务, 但是Performance issue就在这平淡无奇的分区维护工作中出现了, 实际在执行”Alter Table Split partition Pn at (value) into …” 的DDL语句时,发现需要花费超过十多分钟才能完成一次Split。问题就在于,如果是有大量数据的Partition分区 , Split 操作慢一些也是正常的(expected预期内的) , 但是实际这里的Max Partition总是为空的,没有任何一条数据, 为什么Split 一个空的分区也会是这种蜗牛的速度呢?   我们来模拟这个现象, 首先创建一张分区表,Maxvalue的Partition是Empty的,且有一个普通索引:     SQL> select * from v$version; BANNER —————————————————————- Oracle Database 10g Enterprise…

  • oracle 11g 与分区和存储相关的增强功能

    本文永久链接地址: https://www.askmac.cn/archives/oracle-11g-par…on-enhancement.html ‎ Oracle 分区 注:REF 分区支持对子表进行修剪和智能化分区联接。虽然性能方面的改善似乎是最明显的,但也不要忽略其它方面的改进。分区必须考虑性能、可管理性和可用性等所有业务相关领域。   分区增强功能   间隔分区 系统分区 组合分区增强功能 基于虚拟列的分区 引用分区 分区是一种管理大型数据库的重要工具。分区使 DBA 可以采用“分而治之”的方法管理数据库表(尤其是那些不断增长的表)。经过分区的表允许数据库在保持性能一致的同时,进行扩展以适应超大型的数据集,而不会对管理或硬件资源产生不当的影响。 分区可以加快对 Oracle DB 中数据的访问速度。不管数据库有 10 GB 还是 10 TB 的数据,分区都可以使数据的访问速度提高几个数量级。 随着 Oracle Database 11g 的推出,DBA 将会发现一系列有用的分区增强功能。这些增强功能包括: 增加了间隔分区 增加了系统分区 增强了组合分区 增加了基于虚拟列的分区 增加了引用分区   间隔分区 间隔分区是范围分区的一种扩展 当插入的数据超过了所有范围分区时,将创建指定间隔的分区。 必须至少创建一个范围分区。 间隔分区可以自动创建范围分区。 在引入间隔分区之前,DBA 需要显式定义每个分区的值范围。问题在于,为每个分区显式定义的界限不会随着分区数量的增长而扩展。 间隔分区是范围分区的一种扩展,它会在插入表中的数据超过了所有范围分区时,指示数据库自动创建特定间隔的分区。必须至少指定一个范围分区。范围分区的键值可以确定范围分区的上限值(称为转换点),数据库将为超过该转换点的数据创建间隔分区。 间隔分区可以完全自动地创建范围分区。管理新分区的创建可能是一项重复性很高的繁重任务。对于可预测性地增加涵盖小范围的分区,如添加新的每日分区,这种情况尤其突出。间隔分区可以通过按需创建分区来自动完成此类操作。 使用间隔分区时,需要考虑以下限制条件: 只能指定一个分区键列,并且该键列必须是 NUMBER 或 DATE 类型。…

  • Oracle SQL解释执行计划 execution plan

    本文永久链接地址:https://www.askmac.cn/archives/sql-execution-plan-1.html   收集执行计划 显示执行计划 解释执行计划 什么是执行计划 SQL 语句的执行计划由多个小构建块组成,这些小构建块称为串行执行计划的行源。 语句的行源组合称为执行计划。 可以使用父 – 子关系,以树状结构(文本或图形方式) 显示执行计划。 执行计划是优化程序的输出,供执行引擎实施。它指出了执行引擎必须执行的操作,从而使其能以最有效的方式检索查询所需的数据。 EXPLAIN PLAN 语句收集 Oracle 优化程序为 SELECT、UPDATE、INSERT 和 DELETE 语句选择的执行计划。执行计划的步骤并不按编号顺序执行。步骤之间存在父 – 子关系。行源树是执行计划的核心,它显示下列信息: 语句所引用的表的顺序 语句中提到的每个表的访问方法 受语句中的联接操作影响的表的联接方法 数据操作,如过滤、排序或聚集 除行源树(或并行操作的数据流树)外,计划表还包含有关以下事项的信息: 优化,如每项操作的成本和基数 分区,如一组访问分区 并行执行,如联接输入的分布方法 借助 EXPLAIN PLAN 的结果,您可以确定优化程序是否选择了特定执行计划,如嵌套循环联接。   在哪里可以找到执行计划   PLAN_TABLE(EXPLAIN PLAN 或 SQL*Plus 自动跟踪) V$SQL_PLAN(库高速缓存) V$SQL_PLAN_MONITOR (11g) DBA_HIST_SQL_PLAN (AWR) STATS$SQL_PLAN (Statspack) SQL 管理库(SQL 计划管理基线)…

  • Oracle实现高可用性的设计 (2)

    使用 SQL 应用的滚动版本升级 从 Oracle Database 10.1.0.3 开始以及在其后的更高版本中,在使用 SQL 应用来执行滚动数据库升级时,逻辑备用数据库可以在比主数据库更高的 Oracle 发行版中运行。例如,使用 SQL 应用和逻辑备用数据库,可以将 Oracle DB 软件从补丁程序集版本 10.2.0 n 升级到下一个数据库补丁程序集版本 10.2.0 (n+1)。本幻灯片中的第一个步骤显示了开始升级前的 Data Guard 配置,此时主数据库和逻辑备用数据库都运行相同的 Oracle 软件版本。在第二步中,您停止了 SQL 应用并在逻辑备用数据库上将 Oracle DB 软件升级为版本 n+1。在升级过程中,重做数据将在主系统上进行累积。在第三步中,您重新启动了 SQL 应用,在主系统上累积的重做数据会自动进行传送,并应用到新升级的逻辑备用数据库。Data Guard 配置可以在任意期间运行混合版本。在第四步骤中,您执行了切换。接下来在新的主数据库上激活用户应用程序和服务。在再次启用 SQL 应用之前,需要升级新的备用站点。这是因为新的备用站点不能理解新的重做信息。最后,提高每个数据库的兼容性级别。 注:SQL 应用并不支持所有数据类型。可能会禁止您使用此方法。在此情况下,使用 Oracle Streams 是一种可能的替代方法。   数据库高可用性:最佳方法 使用 SPFILE。 创建两个或多个控制文件。 设置足够长的 CONTROL_FILE_ RECORD_KEEP_TIME。 多路复用生产和备用重做日志 将检查点记录到预警日志中。 使用自动优化…

  • ORA-26786造成逻辑备库无法应用SQL一例

    一套Linux x86-64 上的11.2.0.2逻辑备库因为出现ORA-26786: A row with key exists but has conflicting column(s) “导致APPLIER  进程无法继续工作,详细信息如下:   1) ### Primary OS Details ### Hostname – vrh6 OS details – [oracle@vrh6 ~]$ uname -a Linux vrh6 2.6.18-194.8.1.el5 #1 SMP Wed Jun 23 10:52:51 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux 2) ### Standby OS Details ### Hostname – vrh7…

  • CBO为什么不走索引?

    原帖是Itpub上的网友提出一个CBO为什么不走索引的问题, 该问题的演示如下:   SQL> create table maclean1 as select * from dba_objects; Table created. SQL> update maclean1 set status=’INVALID’ where owner=’MACLEAN’; 2 rows updated. SQL> commit; Commit complete. SQL> create index ind_maclean1 on maclean1(status); Index created. SQL> exec dbms_stats.gather_table_stats(‘SYS’,’MACLEAN1′,cascade=>true); PL/SQL procedure successfully completed. SQL> explain plan for select * from maclean1 where status=’INVALID’; Explained. SQL>…

  • 快速升级Oracle 11.2.0.2 RAC到11.2.0.3

    11.2.0.3 补丁集在美国时间9月23日发布了,关于11.2.0.3 发布的更多信息可以参考<Oracle 11gR2发布11.2.0.3 Patchset补丁集-又一重量级更新>一文。 这里我们来快速浏览由11.2.0.2 RAC升级到11.2.0.3的过程: 在正式升级GI/CRS之前需要先打上”Patch 12539000: 11203:ASM UPGRADE FAILED ON FIRST NODE WITH ORA-03113″ 我们仅需要针对GI/CRS打上补丁,无需在RDBMS/DB上实施。该Patch可以滚动升级Rolling upgrade, 简易的实施流程如下:   1. 在所有节点上安装最新的opatch工具,该步骤不需要停止任何服务 [root@vrh1 ~]# su – grid [grid@vrh1 ~]$ cd $CRS_HOME [grid@vrh1 grid]$ mv OPatch OPatch_old [grid@vrh1 grid]$ unzip /tmp/p6880880_112000_Linux-x86-64.zip -d $CRS_HOME [grid@vrh1 grid]$ opatch Invoking OPatch 11.2.0.1.3 Oracle Interim Patch Installer version 11.2.0.1.3…

  • Oracle内部错误:ORA-00600[13013][5001]故障诊断一例

    周五被叫到客户现场解决一套10.2.0.4 RAC数据库上的ORA-00600[13013]内部错误问题,这个问题同事已经在上午通过远程拨号了解过情况, 初步判断是索引存在讹误corruption引起的600。 前期诊断 同事在我抵达现场之前已经做了初步的诊断,该10.2.0.4上的RAC系统主用节点的告警日志中多次出现ORA-00600:[13013], [5001]、ORA-00600:[qertbFetchByRowID]及ORA-00600: [25027] 等内部错误,具体的日志如下: Fri Sep 16 01:16:54 2011 Errors in file /oravl01/oracle/admin/CRMDB2/udump/crmdb22_ora_2138788.trc: ORA-00600: internal error code, arguments: [13013], [5001], [66209], [50730514], [23], [50730514], [3], [] Fri Sep 16 01:16:55 2011 Trace dumping is performing id=[cdmp_20110916011655] Fri Sep 16 01:17:06 2011 Errors in file /oravl01/oracle/admin/CRMDB2/udump/crmdb22_ora_2138788.trc: ORA-00600: internal error code, arguments: [13013],…

  • 手工模拟Oracle数据块逻辑讹误引发,ORA-00600:[13013] [5001]一例

    上周在客户那里遇到了一例由Oracle Bug引发的表数据块逻辑讹误触发ORA-00600:[13013], [5001]的问题,这里为了更好地说明该问题,于是萌发了手工模拟该数据块逻辑讹误的想法。 基础知识 Oracle中表的数据块由块头、事务槽、行字典、行数据等多种结构组成。 行数据(rowdata)实际是由许多row piece 行片组成的,每一条row piece的头部都有flag、locks、cols(cc)三个标志位。 其中flag标记了该row piece的类型,该flag位占用一个字节,其不同的bit位代表不同的含义,见下表: ROW_CLUSTER_KEY = 0x80; KDRHFK ROW_CTABLE_NUMBER = 0x40; KDRHFC ROW_HEAD_PIECE = 0x20; KDRHFH ROW_DELETED_ROW = 0x10; KDRHFD ROW_FIRST_PIECE = 0x08; KDRHFF ROW_LAST_PIECE = 0x04; KDRHFL ROW_FROM_PREVIOUS = 0x02; KDRHFP ROW_CONTINUE_NEXT = 0x01; KDRHFN 一般来说最普通的一条row piece是普通堆表(heap table)的未被删除的且无行迁移/链接的,其flag位应为 普通row的flag一般为 Single Row = ROW_HEAD_PIECE + ROW_FIRST_PIECE + ROW_LAST_PIECE=…

  • Important parameters For Oracle BRM Application in 11gR2

    什么是Oracle BRM? BRM 指的是Billing and Revenue Management (BRM) ,是一套专门针对通信行业设计的集成的终端到终端的企业软件套件。 Oracle 公司在2006年收购了Portal Software软件公司后,成为了Portal BRM产品的拥有者。 BRM最早被叫做Infranet(版本6.5, 6.7和更早),之后被称作Portal(在版本7.0, 7.2, 7.3, 7.4时代), 官方第一次使用BRM这一代号是从版本7.3.1开始。 客户有一套BRM系统运行在4节点的Exadata X2-8 Half Rack上,数据库版本是11.2.0.1 。 但是这套系统使用了Exadata默认的配置参数,而没有使用BRM系统专用的初始化参数。 这里我有必要提一下,一般来说大型的应用程序(Application)特别是Oracle自身的产品都会有经过Oracle公司自身验证过的一套推荐参数,譬如说Oracle Ebs Suite 11i 最早是在Oracle database 8i/9i 上设计的,一般来说在安装介质上就会附带有11i 在databse 8i/9i上的推荐配置参数,而如果你要将11i 迁移到10g上那么就需要到MOS上找出是否这一软件组合已经经过Oracle公司的认证,如果认证了那么一般都会有推荐参数。 假设计划在Oracle Database 11gR2上部署Oracle EBS R12的应用,那么可以从MOS上找到<Interoperability Notes EBS R12 with Database 11gR2 [ID 1058763.1]> 这个指南。 其他一些非Oracle的应用程序产品,如Sap这类流行的大型应用,Oracle也会进行一系列的认证,但是未必就有非常完整的Recommended Parameter列表了,当然如果您是SAP的用户的话,也可以从Sap哪里获得必要的支持。 <Questions About BRM…