11g新特性-Oracle-SQL-Performance-Analyzer (11g新特性spm)

教程大全 2025-07-17 06:08:13 浏览

数据库重放是一款很棒的工具,可用于捕获数据库中的实际负载并随意重放。它是 Oracle 真正应用测试选件的一部分,它的重点是“实际”一词,即重放的负载就是数据库中实际发生的负载。

在数据库重放中,捕获的全部负载都针对数据库进行重放。但是,如果您不想那样做那该怎么办?例如,您可能很想了解 SQL 执行计划以及 SQL 性能是如何受更改影响的,因为它们会严重影响应用程序的性能和可用性。此外,数据库重放只重放捕获的负载。在生产版本中执行之前,您可能很想知道参数更改对某些 SQL 的影响。

这一领域正是真正应用测试系列的另一个重要组件 SQL Performance Analyzer (SPA) 的用武之地。通过 SPA,您可以根据各种更改类型(如初始化参数更改、优化程序统计刷新和数据库升级)播放特定的 SQL 或整个的 SQL 负载,然后生成比较报告,帮助您评估它们的影响。在本文中,您将学习如何使用 SQL Performance Analyzer 工具解决这个重要的问题。

示例问题

我们来进行一个测试。首先,我们定义要解决的问题。

这是一个典型的问题:Oracle 不使用索引,而您想了解其中的原因。为了回答这个问题,我拜读了 Oracle 精英 Tim Gorman 的经典论文“Searching for Intelligent Life in Oracle’s CBO”。(在 Web 上随处都能找到这篇论文多种形式的各个版本。)

Tim 的一个建议是,将 optimizer_index_cost_adj 参数的值由默认的 100 更改为一个较小的值。这篇论文还给出了计算这个值的公式。根据公式,在我的案例中,我计算得出这个值为 10.但是,这带来一个比较棘手的问题:这样的更改会对每条 SQL 语句都有裨益吗?

在 Oracle 数据库 11g 之前的版本中,我需要捕获所有 SQL 语句,通过跟踪运行这些语句,然后得到执行计划 — 这是一项极其耗时又极易出错的任务。有了新版本之后,我不需要再那样做了,我改用非常简单而有效的 SQL Performance Analyzer.

首先,为了举例说明,我们在数据库中运行以下查询:

select /* CONTROL_QUERY11 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 33;select /* CONTROL_QUERY12 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 350;select /* CONTROL_QUERY13 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 351;select /* CONTROL_QUERY14 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 534;select /* CONTROL_QUERY15 */ sum(QUANTITY_SOLD) from sales where PROMO_ID = 999;select /* CONTROL_QUERY21 */ sum(QUANTITY_SOLD) from sales where channel_id = 2;select /* CONTROL_QUERY22 */ sum(QUANTITY_SOLD) from sales where channel_id = 3;select /* CONTROL_QUERY23 */ sum(QUANTITY_SOLD) from sales where channel_id = 4;select /* CONTROL_QUERY24 */ sum(QUANTITY_SOLD) from sales where channel_id = 5;select /* CONTROL_QUERY25 */ sum(QUANTITY_SOLD) from sales where channel_id = 9;

假设这些查询由您的应用程序发出。通过调整 SQL 中的注释,您可以在以后对它们进行搜索。语句执行完成后,您可以对其使用SPA.

用法

通常,最好通过 Oracle 企业管理器使用 SPA 功能。(当然,您也可以通过系统提供的程序包 dbms_sqlpa 使用命令行选项,但是不能超过企业管理器添加的可管理性值。)

执行以下步骤:

1、打开 Enterprise Manager cellpadding="2" border="1">

SQL> select promo_id, count(1) cnt from sales group by promo_id;
 PROMO_ID CNT---------- ---------- 534 1 999 887837 350 18022 33 2074 351 10910 ----------sum 918844

promo_id 999 在表中出现了 887,837 次,将近 97%.当将计划改为包含索引扫描时,这个查询就比较困难了。如果对全表进行扫描,情况应该会好一些。因此,即使整体影响是积极的,也会有个别组件拖后腿。当您决定是否要更改参数时,您应该考虑到这些 SQL 语句的重要性,这些语句既可能改进也可能退化。

Oracle

正如您所见,您希望评估对数据库参数进行重要更改而带来的影响。使用 SPA,您不必估计潜在的性能影响,连“猜测估计”也不必。您可以使用应用程序针对数据库执行的 SQL 语句客观地衡量。

现在看另一个案例:更改参数后,性能退化了,而不是改进了。下面是一个屏幕截图:

这里,SQL 语句的运行情况都比更改之前要差。您可以利用(本文中讨论的)SQL 计划管理解决这个问题。SPM 允许您选择优良的执行计划作为您的基准,从而保证执行计划的稳定性。随后,优化程序会将这个基准用于相应 SQL 的所有执行过程。这个基准计划会一直使用,直到被禁用或者您创建了新的基准计划。另一个解决 SQL 退化问题的方法是使用 SQL Tuning Advisor,它能提出 SQL 调整建议或建议进行外部修改,如通过创建索引提高性能。

应用案例

SPA 在很多情形中都是极有用的,包括数据库版本升级、部署数据库补丁集、数据库参数更改和优化程序参数更改等等。

例如,当您决定是否要提高优化程序参数时,比如从 10.2 更改为 11.1,您肯定想了解这个更改会对您的 SQL 语句产生怎样的影响。执行该任务最好的工具就是 SPA.唯一不同的是,在上面的步骤 5 中,不是选择>


勇士的信仰宠物领袖性格能刷新到吗

能,不过要人品

什么是OOP系统?

OOP =Object Oriented Programming,=面向对象的程序设计对象(Object):包含一定的数据结构和状态的实体。 操作(Operation):作用于对象的行为,如访问和处理对象的状态。 封装(Encapsulation):定义对象和操作,只提供抽象的接口,并隐藏它们的具体实现。 Ada 83 已经支持上述3个特性,因此被称为基于对象(oriented-based)的语言;但面向对象程序设计经过十年的发展, Ada95 基于上述要素又增添了以下两个 Ada83 不支持的要素:继承(Inheritance):通过继承现有类型的性质,创建新的数据类型,而不影响原有数据类型。 多态性(Polymorphism):判定数据类型集合中各类型的区别,使程序可以按照它们的共同特性来书写。 对新特性的需求是由三份报告[Dod 1990]指出的,具体见 Ada Rantinale 的 Part Two- 4 Object Oriented Programming-- 4.1 Background and Concepts,可以更好的理解继承和多态性。 OOP 的继承从理论上讲是模仿人的思考方法,将对象分类,如:car,bus 这两个数据类型是从数据类型vehicle 继承而来的,它们作为 vehicle 的一类,自然继承了 vehicle 的特性,同时具有自身独有的特性;而 wheel 却不是 vehicle 的一类,只是 vehicle 的一个组成部份,因此不是从 vehicle 继承而来。 同样,vehicle 有一些操作,如 start,reverse, car和bus也继承下来,如果必要,也可加上自己独有的操作,如 drive_at_200mph。 但在实际程序中,人们往往忽视了面向对象的内涵,甚止于 C++ 这些语言玩了好几年,也只是用上了面向对象的语法,而没有形成面向对象的思考方法。

如何使用mysql的API在c/c++的代码中,创建一个存储过程?

MySQL的概述MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。 在2008年1月16号被Sun公司收购。 目前MySQL被广泛地应用在Internet上的中小型网站中。 由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 MySQL的官方网站的网址是:[编辑本段]MySQL的特性1.使用C和C++编写,并使用了多种编译器进行测试,保证源代码的可移植性 2.支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2 Wrap、Solaris、Windows等多种操作系统 3.为多种编程语言提供了API。 这些编程语言包括C、C++、Eiffel、JavaPerl、PHP、Python、Ruby和Tcl等。 4.支持多线程,充分利用CPU资源 5.优化的SQL查询算法,有效地提高查询速度 6.既能够作为一个单独的应用程序应用在客户端服务器网络环境中,也能够作为一个库而嵌入到其他的软件中提供多语言支持,常见的编码如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作数据表名和数据列名7.提供TCP/IP、ODBC和JDBC等多种数据库连接途径 8.提供用于管理、检查、优化数据库操作的管理工具 9.可以处理拥有上千万条记录的大型数据库[编辑本段]MySQL的应用与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限(MySQL Cluster的功能和效率都相对比较差)等,但是这丝毫也没有减少它受欢迎的程度。 对于一般的个人使用者和中小型企业来说,MySQL提供的功能已经绰绰有余,而且由于MySQL是开放源码软件,因此可以大大降低总体拥有成本。 目前Internet上流行的网站构架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作为操作系统,Apache作为Web服务器,MySQL作为数据库,PHP作为服务器端脚本解释器。 由于这四个软件都是遵循GPL的开放源码软件,因此使用这种方式不用花一分钱就可以建立起一个稳定、免费的网站系统。 [编辑本段]MySQL管理可以使用命令行工具管理MySQL数据库(命令mysql 和 mysqladmin),也可以从MySQL的网站下载图形管理工具MySQL Administrator和MySQL Query Browser。 phpMyAdmin是由php写成的MySQL资料库系统管理程式,让管理者可用Web介面管理MySQL资料库。 phpMyBackupPro也是由PHP写成的,可以透过Web介面创建和管理数据库。 它可以创建伪cronjobs,可以用来自动在某个时间或周期备份MySQL 数据库。 另外,还有其他的GUI管理工具,例如早先的mysql-front 以及 ems mysql manager,navicat 等等。 [编辑本段]Mysql存储引擎MyISAM Mysql的默认数据库,最为常用。 拥有较高的插入,查询速度,但不支持事务InnoDB 事务型数据库的首选引擎,支持ACID事务,支持行级锁定BDB 源自Berkeley DB,事务型数据库的另一种选择,支持COMMIT和ROLLBACK等其他事务特性Memory 所有数据置于内存的存储引擎,拥有极高的插入,更新和查询效率。 但是会占用和数据量成正比的内存空间。 并且其内容会在Mysql重新启动时丢失Merge 将一定数量的MyISAM表联合而成一个整体,在超大规模数据存储时很有用Archive 非常适合存储大量的独立的,作为历史记录的数据。 因为它们不经常被读取。 Archive拥有高效的插入速度,但其对查询的支持相对较差Federated 将不同的Mysql服务器联合起来,逻辑上组成一个完整的数据库。 非常适合分布式应用Cluster/NDB 高冗余的存储引擎,用多台数据机器联合提供服务以提高整体性能和安全性。 适合数据量大,安全和性能要求高的应用CSV 逻辑上由逗号分割数据的存储引擎BlackHole 黑洞引擎,写入的任何数据都会消失,一般用于记录binlog做复制的中继另外,Mysql的存储引擎接口定义良好。 有兴趣的开发者通过阅读文档编写自己的存储引擎。 [编辑本段]Mysql最常见的应用架构单点(Single),适合小规模应用复制(Replication),适合中小规模应用集群(Cluster),适合大规模应用[编辑本段]mysql历史版本MySQL公司目前在同时开发两个版本的软件,4.1版以及5.0版。 4.1版本的代码已经发布并有望在8个月后公布最终代码。 而5.0版本的最后产品将在6个月后发布。 MySQL4.1版本中增加了不少新的性能,包括对主键的更高速度的缓存,对子查询的更好的支持,以及应网络约会网站所要求的,基于地理信息的查询。 而其同步开发的5.0版本则把目标对准了企业用户,对于4.1版本中的所有新特性,5.0版本悉数收入囊中,并且独具以下特点:对外键的良好支持;系统自动报错机制以及对存储过程的充分支持。 SQL全称是“结构化查询语言(Structured Query Language)”SQL(STructured Query Language)是一种数据库查询和程序设计语言,用于存取数据以及查询、更新和管理关系数据库系统。 SQL同时也是数据库脚本文件的扩展名。 SQL是高级的非过程化编程语言,允许用户在高层数据结构上工作。 他不要求用户指定对数据的存放方法,也不需要用户了解具体的数据存放方式,所以具有完全不同底层结构的不同数据库系统可以使用相同的SQL语言作为数据输入与管理的接口。 它以记录集合作为操作对象,所有SQL语句接受集合作为输入,返回集合作为输出,这种集合特性允许一条SQL语句的输出作为另一条SQL语句的输入,所以SQL语句可以嵌套,这使他具有极大的灵活性和强大的功能,在多数情况下,在其他语言中需要一大段程序实现的功能只需要一个SQL语句就可以达到目的,这也意味着用SQL语言可以写出非常复杂的语句。 结构化查询语言(Structured Query Language)最早是IBM的圣约瑟研究实验室为其关系数据库管理系统SYSTEM R开发的一种查询语言,它的前身是SQUARE语言。 SQL语言结构简洁,功能强大,简单易学,所以自从IBM公司1981年推出以来,SQL语言得到了广泛的应用。 如今无论是像Oracle、Sybase、Informix、SQL Server这些大型的数据库管理系统,还是像Visual Foxporo、PowerBuilder这些PC上常用的数据库开发系统,都支持SQL语言作为查询语言。 美国国家标准局(ANSI)与国际标准化组织(ISO)已经制定了SQL标准。 ANSI是一个美国工业和商业集团组织,负责开发美国的商务和通讯标准。 ANSI同时也是ISO和International Electrotechnical Commission(IEC)的成员之一。 ANSI 发布与国际标准组织相应的美国标准。 1992年,ISO和IEC发布了SQL国际标准,称为SQL-92。 ANSI随之发布的相应标准是ANSI SQL-92。 ANSI SQL-92有时被称为ANSI SQL。 尽管不同的关系数据库使用的SQL版本有一些差异,但大多数都遵循 ANSI SQL 标准。 SQL Server使用ANSI SQL-92的扩展集,称为T-SQL,其遵循ANSI制定的 SQL-92标准。 SQL语言包含4个部分: ※ 数据定义语言(DDL),例如:CREATE、DROP、ALTER等语句。 ※ 数据操作语言(DML),例如:INSERT、UPDATE、DELETE语句。 ※ 数据查询语言(DQL),例如:SELECT语句。 ※ 数据控制语言(DCL),例如:GRANT、REVOKE、COMMIT、ROLLBACK等语句。 SQL语言包括三种主要程序设计语言类别的陈述式:数据定义语言(DDL),数据操作语言(DML)及数据控制语言(DCL)。

本文版权声明本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请联系本站客服,一经查实,本站将立刻删除。

发表评论

热门推荐