当前位置: 首页 > news >正文

Oracle的学习心得和知识总结(二十八)|Oracle数据库数据库回放功能之论文二翻译及学习

注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下:

1、参考书籍:《Oracle Database SQL Language Reference》
2、参考书籍:《PostgreSQL中文手册》
3、EDB Postgres Advanced Server User Guides,点击前往
4、PostgreSQL数据库仓库链接,点击前往
5、PostgreSQL中文社区,点击前往
6、Oracle Real Application Testing 官网首页,点击前往
7、Oracle 21C RAT Testing Guide,点击前往
8、Oracle Database 19c:Real Application Testing Overview,点击前往
9、数据库回放白皮书 11g,点击前往
10、论文二 原文地址,点击前往


1、本文内容全部来源于开源社区 GitHub和以上博主的贡献,本文也免费开源(可能会存在问题,评论区等待大佬们的指正)
2、本文目的:开源共享 抛砖引玉 一起学习
3、本文不提供任何资源 不存在任何交易 与任何组织和机构无关
4、大家可以根据需要自行 复制粘贴以及作为其他个人用途,但是不允许转载 不允许商用 (写作不易,还请见谅 💖)


Oracle数据库数据库回放功能之论文二翻译及学习

  • 文章快速说明索引
  • 摘要
  • 类别和主题描述符
  • 一般条款
  • 关键词
  • 介绍
    • 数据库重放
    • 相关工作
  • 数据库重放
    • 捕获
    • 重放
  • 使用数据库重放进行测试
    • 重放设计原则
      • 同一用户调用
      • 相同的连接模式
      • 相同的事务语义
    • 重放分析程序
    • 比较 重放与重放
    • 比较期间报告
  • 案例分析
    • 背景
    • 工作负载捕获
    • 通过重放调试 SQL 回归
    • 其他重放
    • 概括
  • 结论
  • 参考



文章快速说明索引

学习目标:

目的:接下来这段时间我想做一些兼容Oracle数据库Real Application Testing (即:RAT)上的一些功能开发,本专栏这里主要是学习以及介绍Oracle数据库功能的使用场景、原理说明和注意事项等,基于PostgreSQL数据库的功能开发等之后 由新博客进行介绍和分享!


学习内容:(详见目录)

1、Oracle数据库数据库回放功能之论文二翻译及学习


学习时间:

2023年08月20日 14:35:35


学习产出:

1、Oracle数据库数据库回放功能之论文二翻译及学习
2、CSDN 技术博客 1篇


注:下面我们所有的学习环境是Centos7+PostgreSQL15.0+Oracle19c+MySQL5.7

postgres=# select version();version                                   
-----------------------------------------------------------------------------PostgreSQL 15.0 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 7.1.0, 64-bit
(1 row)postgres=##-----------------------------------------------------------------------------#SQL> select * from v$version; BANNER									    BANNER_FULL 								BANNER_LEGACY									CON_ID
--------------------------------------------------------------------------- --------------------------------------------------------------------------- --------------------------------------------------------------------------- ----------
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production	    Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production	Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production		     0Version 19.3.0.0.0SQL>
#-----------------------------------------------------------------------------#mysql> select version();
+-----------+
| version() |
+-----------+
| 5.7.19    |
+-----------+
1 row in set (0.06 sec)mysql>

摘要

Oracle Database Replay 提供了一种通过在测试环境中重现真实用户工作负载来测试数据库系统更改的新方法。它有助于识别软件或硬件升级、补丁或数据库参数、模式或数据更改后的潜在问题。可以以最小的开销捕获生产数据库系统的任何有趣的工作负载周期。捕获的工作负载可用于驱动测试系统,同时保持实际生产工作负载的并发性和负载特性。重放不依赖于任何其他软件,包括应用程序本身。它可靠地重现捕获的工作负载,以支持早期诊断和故障排除。在本文中,我们讨论了重放结果的分析,并引入了新的比较周期报告,该报告有助于对捕获及其重放的变化进行详细的性能比较。我们在涉及 Siebel 金融应用程序升级的案例研究中展示了它的有用性,其中数据库重放可识别升级后的性能问题并帮助纠正这些问题。

类别和主题描述符

H.2.m [数据库管理]:杂项

一般条款

管理、测量、绩效、验证。

关键词

数据库、捕获、重放、测试

介绍

在大多数企业中,任务关键型业务功能严重依赖于数据库系统。不断变化的技术环境使得数据库系统的用户有必要部署最新的技术以保持竞争力。

维护现代技术基础设施的工作可能会发生变化,从将数据库升级到新版本,到更改底层硬件或操作系统。当这些变化应用于关键任务环境时,即使经过最严格的测试,也常常会导致非常破坏性的问题。

测试的最大挑战之一是能够无问题地实施对生产数据库系统的任何更改。数据库重放通过允许生产质量工作负载驱动测试系统并重复测试更改直到所有问题得到解决来解决这一挑战。

数据库重放

数据库重放[3]首次使使用真实生产工作负载进行数据库测试成为可能。首先,它允许捕获(记录)应用程序工作负载,同时对性能影响最小。捕获的工作负载包含捕获期间向数据库发出的所有请求以及所有并发和事务信息。然后,可以使用捕获的工作负载来测试测试系统中的更改,然后再将其实施到生产中。Database Replay的主要贡献在于它可以准确地重现测试系统上生产工作负载的并发和负载特征。因此,在使用实际工作负载进行测试后,数据库管理员可以确信在生产数据库中实施更改时不会出现意外的回归。

Database Replay 是 Oracle 数据库系统的一部分,不需要任何其他软件。这极大地简化了测试环境的设置。更重要的是,它消除了对任何其他软件(包括应用程序本身)的依赖。因此,数据库重放可以针对新的 Oracle 数据库版本测试应用程序业务功能的数据库部分。

在本文中,我们概述了分析重放结果的四步程序,并引入了有助于分析的新比较周期报告。该报告比较两个时段(捕获到任意重放或同一捕获的任意两次重放)。它报告主要配置更改、重放分歧、资源使用情况、最重要的更改 SQL 语句以及许多其他重要的性能指标。

我们在真实的数据库升级测试中演示了数据库重放的用法,其中我们捕获 Oracle/Siebel 在线应用程序大约 90 分钟,并在升级后的数据库上重放它。初始重放速度要慢得多,报告显示原因是 SQL 语句由于某种原因在数据库升级后选择了不同的执行计划,并且运行速度非常慢。调整性能不佳的 SQL 语句后,重放的性能变得与捕获的性能相似。更值得注意的是,现有的负载测试工具无法发现问题。

相关工作

现有的测试工具和方法都没有利用真正的生产级工作负载。Microsoft SQL Server [5]和 Quest Benchmark Factory 都具有基于 SQL 跟踪基础结构的捕获和不协调重放功能。然而,它们重放孤立的会话,而没有数据库范围的结果一致性机制。 也就是说,重放期间的事务以与捕获时间不同的数据库状态开始,并以不同的顺序执行更新。 另一个主要问题是,在实践中,由于开销较高,在整个数据库上启用 SQL 跟踪是不可行的。

LoadRunner 性能测试工具[4]通过记录用户与应用程序前端的交互来针对测试系统生成人工负载。生成的跟踪被参数化并用于模拟任意数量用户的负载。大多数时候,捕获的工作负载仅包含生产工作流程的一小部分,因为捕获不是来自真实用户。因此,生成的请求是随机的,并且可能并不总是在数据库中做有用的工作。此外,它使得仅 RDBMS 的测试变得麻烦,因为它需要中间层和应用程序。

[2] 中描述了另一种用于测试数据库应用程序的工作负载生成方法,该方法使用应用程序代码和数据库模式作为输入来生成应用程序的用户输入以及用于彻底测试应用程序和数据库的数据。生成的工作负载用于驱动应用程序,以尝试实现广泛的代码覆盖率。[1] 中的工作提出了一种查询感知方法来生成测试数据库。它强调了测试查询在测试数据库上执行时产生所需的间歇性和最终结果的重要性。然而,生成的工作负载是合成的,只能模拟部分生产工作负载。

数据库重放是对 Oracle SQL 性能分析器 (SPA)[6](另一个 Oracle 测试功能)的补充。SPA 将正在运行的 RDBMS 的应用程序 SQL 语句以及性能和计划信息捕获到 SQL 调优集中。然后,它使用捕获的 SQL 调优集在测试环境中执行各个语句,以发现潜在的性能回归。SPA 的目标是对特定 SQL 语句进行单元测试,并且不会重现整个工作负载。本文的结构如下:

  • 首先介绍数据库重放的概念
  • 然后详细介绍了如何分析重放结果
  • 然后再介绍了案例研究
  • 最后是结论

数据库重放

在本节中,我们简要回顾一下数据库重放。[3]更详细地讨论了数据库重放架构和操作。

捕获

信息系统通常包含两个不同的环境:生产系统和测试系统。生产系统是企业的生命线,肩负着服务于企业信息技术需求的重任。没有在测试系统上进行广泛测试,任何更改都不应应用于任何实时生产系统。

对于Oracle客户来说,测试产品变更的理想工作负载是他们将要运行的实际生产工作负载。使用Database Replay,用户需要选择一个感兴趣的常规业务操作时间段,找到足够的磁盘空间来存储捕获并开始捕获工作负载。捕获的工作负载作为操作系统文件存储在用户指定的目录下。已采取措施尽量减少对生产系统的影响。我们的测试显示,在TPC-C基准测试上,事务吞吐量仅降低了4.5%。从应用程序的角度来看,数据库继续正常运行。即使在捕获错误或耗尽磁盘空间的情况下,生产系统也不会受到影响。

在工作负载捕获期间,RDBMS服务器进程生成一个文件(捕获文件),其中包含来自一个或多个数据库会话的工作负载。数据库会话是用户在登录和注销之间的一组交互每个会话由连续的服务请求或数据库调用组成,例如SQL查询、对表的更新、提交、从大对象(LOB)读取的OCI命令等。捕获文件是遵循自描述可扩展格式的二进制文件。捕获文件中的数据也是与平台无关的,因此可以在64位Linux操作系统上运行的Oracle数据库上捕获工作负载,然后在32位Windows系统上重放。此外,该格式允许向后兼容性,确保任何捕获都可以在Oracle数据库的任何未来版本上重放。

可以使用工作负载过滤器的定义对捕获进行微调。用户可以通过在会话属性、用户id和其他特定于工作负载的属性上设置过滤器,指定他们希望在捕获的工作负载中排除或包含工作负载的哪一部分。用户可以指定捕获工作负载的时间,也可以手动停止捕获。捕获完成后,用户可以将捕获的工作负载移动到测试系统,在那里可以开始真正的测试。

重放

生产工作负载的重放旨在对测试系统上的 RDBMS 进行压力,以确定其配置是否适合生产环境。一般来说,任何类型的测试都包含 4 个不同的阶段:

  1. 设置测试系统
  2. 定义和生成测试工作负载
  3. 运行工作负载
  4. 分析结果

使用数据库重放时,可以消除耗时的步骤 2,因为所选的工作负载(生产工作负载)是用于测试的最佳工作负载,并且已明确定义:从生产系统捕获的实际应用程序工作负载。

在重放之前,测试数据库需要恢复到逻辑上与捕获开始时相同的状态。Oracle 提供了 RMAN、Data Guard 和闪回技术等工具来完成此任务。重放之前要完成的最后一步是工作负载捕获的处理(指的是:预处理)。这将创建重放同步和运行时重新映射所需的必要元数据,并且只需完成一次。然后,可以根据需要多次重放已处理的工作负载。

通过将捕获的工作负载发送到测试系统来执行重放。为此,我们使用一个特殊的可执行文件(工作负载重放客户端)来读取捕获的工作负载,将其转换为适当的请求并将其提交到数据库。如图 1 所示,工作负载重放客户端本质上是捕获期间出现的原始数据库客户端的替代。所需的重放客户端和主机的数量由捕获的工作负载的最大并发数决定,并且可以使用提供的实用程序进行估计。重放开始后,每个客户端都会被分配一部分工作负载,所有重放客户端生成的聚合工作负载将准确模拟生产工作负载,从而实现高度真实的测试。

在这里插入图片描述

当重放正在进行时,数据库仍然可以正常访问。所有可用的性能监视工具都可用于在重放期间监视数据库,并且可以与 重放 并行执行额外的工作负载以进一步加载服务器。重放可以随时停止,也可以运行直至完成,直到消耗掉捕获的工作负载。重放完成后,RDBMS 会生成报告,帮助确定重放的质量并比较捕获和重放的关键点。当数据库状态在每次重放之前适当恢复时,还可以使用相同的捕获工作负载重复执行重放。

使用数据库重放进行测试

在本节中,我们首先回顾允许数据库重放准确再现记录的工作负载的设计原则。然后我们介绍一个四步过程来分析重放结果。最后,我们讨论如何使用比较期间报告来评估重放并衡量变更的影响。

重放设计原则

为了确保重放期间生成相同的工作负载,数据库重放的设计遵循以下关键原则:相同的用户调用、相同的连接模式和相同的事务语义

同一用户调用

对于来自工作负载捕获的每个记录的数据库调用,重放都会构造一个新的调用,其行为就像记录的调用一样。也就是说,它在影响数据库状态、最终结果和服务器组件使用方面应该在功能上等效。

工作负载重放客户端主要完成对记录的数据库调用进行逆向工程并将其发送到服务器的工作。由于客户端在捕获过程中使用的每个功能(无论协议如何)都可以通过等效的 Oracle 调用接口 (OCI) 命令来提供,而服务器中没有任何差异,因此重放客户端只需要支持 OCI 协议即可驱动工作负载。重放客户端还进行系统数据重新映射以提供相同的功能。记录的调用可能包含与机器相关的系统数据,例如 ROWID、光标编号、LOB 定位器和序列号,这些数据需要在重放期间正确修改。

每个工作负载重放客户端都是一个多线程应用程序,它为每个工作负载捕获文件生成一个线程(重放线程)。重放线程读取捕获的工作负载文件并将数据转换为对数据库的服务调用。重放线程通过在两个连续调用之间适当地休眠来维护捕获的计时特性。因此,每个重放线程都可以以记录的请求速率从捕获文件再现工作负载。请注意,出于测试目的,提供重放选项来更改请求速率。

相同的连接模式

对于来自工作负载捕获的每个记录的数据库连接,重放通过执行记录的登录和注销操作来维护类似的数据库连接。在重放期间应观察到相同的连接模式。

在重放期间,可以使用一台或多台主机来驱动工作负载捕获。每台主机可以启动一个或多个重放客户端。每个重放客户端可以生成多个重放线程。该架构提供了高可扩展性,能够再现繁重的工作负载,而不受操作系统限制、客户端机器容量或网络带宽的影响。数据库重放还提供了工具来估计给定工作负载捕获所需的重放客户端和主机的数量。通过这样做,可以在重放期间观察到相同的连接模式。同样,提供重放选项来更改登录率以进行测试。

相同的事务语义

由于没有人可以假设数据库将按顺序服务并发请求,因此仅通过发出具有相同时序特征的相同工作负载来维护正确的数据依赖性是不够的。服务器中处理顺序的微小差异可能会导致整个工作负载出现分歧,从而无法产生准确的测试。

为了实现真实的测试,数据库重放会维护捕获期间观察到的事务语义。重放期间的 RDBMS 以这样的方式安排重放调用,以便每个重放调用都像捕获期间一样对相同的数据快照进行操作。这是通过强制执行捕获期间观察到的提交顺序来完成的:每个请求仅在重放适当的提交后才允许执行。

同步机制在重放期间协调传入调用以重现相同的并发性,同时确保数据库状态不会偏离原始状态。与在数据库系统外部实施的解决方案相比,开销最小化。

通过提供相同的事务语义,数据库重放将自己与其他测试工具区分开来。据我们所知,没有其他数据库系统支持此类测试。设计原则解释了为什么数据库重放能够更可靠地重现问题。同一捕获的两次重放将生成相同的工作负载,并且与原始工作负载具有相同的时序、并发性和事务特征。

重放分析程序

虽然数据库重放使重现工作负载捕获变得更加容易,但分析重放结果变得更具挑战性。重放可能会遇到新的错误、数据分歧、性能回归和其他问题。其中一些是显而易见的,并且是由重放系统的更改直接引起的。但仍有一些分歧是由这些变化间接引起的。它们可能看起来不可预测,需要详细分析才能了解这是否是一个新问题。在这里,我们建议采用四步程序来评估重放实验。它遵循自上而下的策略,从高层分析开始,进一步深入到具体的分歧。

第 1 步:评估重放了多少工作负载

重放可能不会完成,并且仅完成工作负载捕获的子集。显然,用户可以在重放期间随时停止重放。如果未正确规划或配置,重放也可能会失败。例如,如果重放客户端驱动过多的工作负载并达到底层操作系统的限制(例如每个进程的最大线程数或文件句柄数),则重放客户端将退出并导致重放被取消。为了避免此类问题,数据库重放提供了校准功能来指导重放客户端的部署。

接下来我们检查工作负载是否已在连接connection级别重放。如前所述,我们的重放尝试保持相同的连接模式。连接重放可能会遇到严重问题,例如捕获的用户帐户在重放系统中不可用并异常退出。它不会取消重放,但重放将丢失连接中的其余工作负载。如果记录的连接的重放未到达终点,则会将其报告为重放会话失败并包含在重放报告中。

第 2 步:评估已重放的次数是否符合预期

在步骤 1 中,检查重放期间已向数据库发送了多少工作负载。重放记录调用并不意味着它完成了与捕获相同的工作。第 2 步的重点是在功能方面对重放质量进行高级概述。也就是说,有多少工作负载已按预期重放。

重放跟踪每个数据库调用的结果并报告两种类型的分歧:错误分歧和数据分歧。错误分歧是在重放期间观察到的错误,而在捕获期间未观察到的错误,或者是与捕获期间不同的错误。当重放的调用影响的行数与捕获期间影响的行数不同时,就会出现数据分歧。

重放后,分歧调用的百分比是重放质量的良好指标。良好的重放通常具有最小的差异或没有差异。另一方面,大量的分歧调用可能意味着部分工作负载未正确重放。

有时,由于环境变化,重放会出现偏差。例如,如果链接不再有效,则使用数据库链接database links重放调用将失败。对于重放质量的判断可能会因这种重放差异而产生偏差。此时,客户还可以使用自己的脚本来查看重放结果。例如,在线购物系统可能会在捕获和重放后检查已处理订单的数量,以验证重放期间有多少用户工作负载成功。

第3步:分析性能回归

如果重放通过了前两个步骤,我们可以确信重放的工作负载代表了良好的测试。下一步是比较性能并发现潜在问题。性能分析主要基于自动工作负载存储库(AWR)。它是性能数据的持久存储。数据库每小时从内存视图中读取系统和性能数据,并将其存储为 AWR 快照。数据库重放还会在工作负载捕获或重放的开始和结束时自动拍摄 AWR 快照。因此每次捕获和重放都包含一组 AWR 快照。然后可以使用 Oracle 性能工具(例如 AWR 报告、活动会话历史记录报告和自动数据库诊断监视器 (ADDM) 报告)完成性能分析。

第4步:分析调用分歧
我们可以进一步分析调用分歧是否存在潜在问题。重放分歧可能表明部分工作负载在重放期间失败。由于应用更改后生产系统中可能会发生同样的故障,因此我们应该进一步缩小范围并分析重放报告中发现的差异数据。

比较 重放与重放

在上一节中,我们讨论了如何将重放与其捕获进行比较。但是,我们应该注意,即使重放是在与捕获相同的数据库中完成的,重放性能也可能与捕获性能不完全相同。重放的最高优先级是重现工作负载捕获的功能。性能可能会略有变化。例如,当重放gate某些数据库调用时,活动会话的数量可能会减少,以便可以维护相同的事务语义。由于重放环境与生产系统不同,一些重放差异是不可避免的。

测试更改的最可靠方法是比较两次重放。第一次重放将尝试尽可能地模仿捕获的系统,而不对系统进行任何更改。第二次重放将与第一次重放类似,同时应用单个更改作为测试变量。然后通过比较两个重放来精确测量变化的影响。正如我们之前讨论的,重放非常容易设置,并且可以可靠地重现更改的影响。

比较期间报告

生产工作负载的捕获和重放会产生大量 AWR 性能数据。对于没有经验的用户来说,比较数据并发现回归问题需要花费大量的时间和精力。我们引入了比较期间报告compare period report来帮助进行重放结果分析。它会比较并生成捕获到重放比较报告,或重放到重放的比较报告。

捕获-重放Capture-Replay报告将工作负载重放的性能与原始捕获系统的性能进行比较。主要包含以下六个部分:

  • 一般信息部分描述了实验设置。它包含有关数据库、AWR 和时间段的信息,以及重要参数、优化器相关参数和下划线underscore参数。它可以帮助用户验证重放是否是预期的实验

  • 重放差异部分描述了重放与捕获的差异。它包含分歧的调用百分比并报告总体分歧级别。有四种可能的分歧水平:

  • NONE 表示没有分歧
  • LOW表示检测到的最小差异,仍然可以进行有效的性能比较
  • 如果检测到一些不平凡的分歧,并且性能比较不可靠并且仅在特定情况下有效,则报告 MEDIUM
  • HIGH 表示检测到严重差异,并且性能比较不能用于指示任何内容
  • 主要性能统计部分通过比较数据库时间 [3]、CPU 时间和用户 I/O 等待时间对两个时期进行高级性能比较

  • 按数据库时间变化排名靠前的 SQL 部分比较了单个 SQL 语句从一个时期到另一个时期的性能变化

  • 硬件使用情况比较部分描述了系统上的一般 CPU 使用情况,并帮助评估它们是否受 CPU 限制

  • ADDM 比较部分提供了两个时间段的 ADDM 分析的比较,按影响的绝对差异排序。通过比较两个时期的 ADDM 结果,有助于发现一个时期存在但另一个时期不存在的问题,以及个体发现影响的变化。

而 Replay-Replay 报告比较了同一原始工作负载捕获的两次工作负载重放的性能。它与捕获重放报告具有相同的部分。主要区别在于重放分歧部分。如果在两次重放中发现相同的分歧记录,则在Replay-Replay报告中它不再是分歧。比较期间报告将用于调试我们以下案例研究中的问题。

案例分析

在本节中,我们通过案例研究演示数据库重放如何帮助数据库测试。

背景

该案例是 Oracle 内部性能和测试小组的一次数据库升级活动。目标应用程序是运行金融呼叫中心服务的 Siebel 应用程序。它在金融呼叫中心创建了新的账户、机会和订单。它还在合作伙伴经理应用程序中创建和分配服务请求。升级测试测量了 Siebel 工作负载相对于新 Oracle 数据库的性能。目标是发现问题并及时修复以发布最终版本。

在Database Replay推出之前,升级测试是通过以下方式完成的:测试人员首先安装较新的数据库版本。然后,他们通过从旧版本的数据库备份(Oracle Database 10gR2)升级数据库来设置数据库。该应用程序采用典型的三层架构。下一步是在单独的计算机上设置 Siebel 中间层和 Apache Web 服务器。环境搭建完毕后,使用LoadRunner[4]进行驱动测试。

工作负载捕获

当数据库重放可用时,测试小组开始使用数据库重放来减少测试工作。他们的测试计划是从应用程序经过充分测试的 Oracle 数据库企业版 11.1.0.7 数据库捕获工作负载,并对升级到 Oracle 数据库企业版 11.2beta 的数据库进行重放。今后我们将 Oracle 数据库的两个版本称为 11.1.0.7 数据库和 11.2beta 数据库。重放用于确定 11.2beta 数据库相对于 Siebel 数据库工作负载是否存在任何性能下降。

捕获是在运行 Red Hat Enterprise Linux 4 的四 CPU 计算机上完成的。部署了四个中间层来运行 Siebel 应用程序服务器和 Apache Web 服务器。在捕获过程中,工作负载运行了 700 个金融呼叫中心用户和 600 个合作伙伴经理用户 90 分钟。

通过重放调试 SQL 回归

工作负载捕获于 2008 年底完成。我们于 2009 年 3 月开始使用 11.2beta 数据库测试升级。为了使性能比较更加准确,所有重放都使用工作负载捕获中的相同主机。

由于我们需要运行多次重放以进行调试,因此我们决定打开存档日志记录并在数据库成功升级后立即创建一个还原点。目的是使重放数据库的设置变得容易。所需要做的就是在每次重放之前将数据库闪回到恢复点。

Oracle 11.2beta 数据库上的第一次重放花了近四个小时才完成了两小时的捕获。比较期间报告表明重放期间出现 SQL 回归。从 DB 时间变化的 Top SQL 来看,ID 为 44u0kwtwmd7h5 的 SQL 的 DB 时间从 90 秒增加到 10409 秒。在重放期间,产生了不同的执行计划,导致 SQL 执行速度明显变慢。由于每次重放时都会重现该问题,因此开发人员能够快速查明优化器中的问题。对于 LoadRunner,问题是间歇性的,并且很难重现,因为负载测试工具生成的工作负载在执行之间通常不一致。

为了解决这个问题,我们调整了回归 SQL 并导出了相应的 SQL 配置文件。然后我们将数据库闪回到还原点,导入 SQL 配置文件,并开始新的重放。如表 1 所示,回放 II 时回归消失,并且回放所花费的时间与捕获的时间几乎相同。

其他重放

我们重放了 11.1.0.7 数据库的工作负载,以验证它是否也具有相同的 SQL 回归。结果可以在表 1 的 Replay III 中找到。比较期报告显示,重放与捕获非常相似。因此我们知道 Oracle 11.1.0.7 数据库中不存在该问题。

我们还使用重放测试来检查其他更改的行为。存档注销重放用于测量存档日志记录的开销。如表 1 中的 Replay II 和 Replay IV 所示,两次运行的数据非常相似。归档所有联机重做日志时,预计用户 I/O 等待时间会增加。

概括

我们通过案例研究演示了数据库重放如何帮助数据库测试。数据库重放为 Siebel 等工作负载提供了更好的测试。在调试时可以轻松设置、重放、重现问题,并通过微小的更改来测量性能。

该案例研究可以轻松扩展以测试客户的关键业务工作负载。该测试可帮助客户检测测试环境中潜在的 SQL 回归或其他问题。如有必要,测试可以完全自动化。

结论

在当今快速发展的 IT 环境中,变化是不可避免的,但对于数据中心经理和管理员来说,这并不一定很困难。数据库重放使测试系统能够承受生产质量工作负载。变化的确切结果是可以肯定地预测的。可以高度自信地快速评估变化,并在生产系统受到负面影响之前采取纠正措施。据我们所知,没有其他数据库供应商提供接近真实测试的工具。

参考

[1] C. Binnig, D. Kossman, E. Lo, M.T. Özsu. QAGen: generating query-aware test databases. ACM SIGMOD international conference on Management of data 2007
[2] M. Emmi, R. Majumdar, K. Sen. Dynamic test input generation for database applications. International symposium on Software testing and analysis 2007.
[3] L. Galanis and etc. Oracle Database Replay. ACM SIGMOD international conference on Management of data 2008. 1159-1170.
[4] HP LoadRunner. http://www.hp.com.
[5] SQL Server Profiler, RDBMS Documentation, http://msdn.microsoft.com.
[6] K. Yagoub, P. Belknap, B. Dageville, K. Dias, S. Joshi, and H. Yu. Oracle’s SQL Performance Analyzer. IEEE Data Engineering Bulletin. March 2008 Vol. 31 No. 1

在这里插入图片描述

相关文章:

Oracle的学习心得和知识总结(二十八)|Oracle数据库数据库回放功能之论文二翻译及学习

目录结构 注:提前言明 本文借鉴了以下博主、书籍或网站的内容,其列表如下: 1、参考书籍:《Oracle Database SQL Language Reference》 2、参考书籍:《PostgreSQL中文手册》 3、EDB Postgres Advanced Server User Gui…...

排序算法:归并排序

约翰冯诺伊曼在 1945 年提出了归并排序。在讲解归并排序之前,我们先一起思考一个问题:如何将两个有序的列表合并成一个有序的列表? 将两个有序的列表合并成一个有序的列表 这太简单了,笔者首先想到的思路就是,将两个列…...

Hbase-技术文档-spring-boot整合使用hbase--简单操作增删改查--提供封装高可用的模版类

使用spring-boot项目来整合使用hbase。 引入依赖 <dependency><groupId>org.apache.hbase</groupId><artifactId>hbase-client</artifactId><version>2.4.3</version> </dependency> 依赖声明表示将把Apache HBase客户端库…...

基于Pytorch的神经网络部分自定义设计

一、基础概念&#xff08;学习笔记&#xff09; &#xff08;1&#xff09;训练误差和泛化误差[1] 本质上&#xff0c;优化和深度学习的目标是根本不同的。前者主要关注的是最小化目标&#xff0c;后者则关注在给定有限数据量的情况下寻找合适的模型。训练误差和泛化误差通常不…...

持续更新串联记忆English words

&#xff08;一&#xff09;这是一组关于“服装搭配”的单词。通过在记忆中检索&#xff0c;回忆起隐藏的信息吧~ >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>今日单词>>&…...

postgresql 内核源码分析 btree索引的增删查代码基本原理流程分析,索引膨胀的原因在这里

B-Tree索引代码流程分析 ​专栏内容&#xff1a; postgresql内核源码分析手写数据库toadb并发编程 ​开源贡献&#xff1a; toadb开源库 个人主页&#xff1a;我的主页 管理社区&#xff1a;开源数据库 座右铭&#xff1a;天行健&#xff0c;君子以自强不息&#xff1b;地势坤&…...

详细了解G1、了解G1、G1垃圾收集器详解、G1垃圾回收器简单调优

4.详细了解G1&#xff1a; 4.1.一&#xff1a;什么是垃圾回收 4.2.了解G1 4.3.G1 Yong GC 4.4.G1 Mix GC 4.5.三色标记算法 4.6.调优实践 5.G1垃圾收集器详解 5.1.G1垃圾收集器 5.2.G1的堆内存划分 5.3.G1的运行过程 5.4.三色标记 5.4.1.漏标问题 5.5.记忆集与卡表 5.6.安全点与…...

vue项目中 package.json 详解

在 Vue 项目中&#xff0c;package.json 是一个重要的配置文件&#xff0c;它包含了项目的名称、版本、作者、依赖等信息。下面是一份详细的 Vue 项目 package.json 配置说明&#xff1a; 1.name&#xff1a;项目的名称&#xff0c;用于标识项目&#xff0c;例如&#xff1a;&q…...

为什么要进行管网水位监测,管网水位监测的作用是什么

管网水位监测是城市排水系统管理的重要手段&#xff0c;对于保障城市排水设施安全运行和提升城市管理水平具有重要意义。通过对排水管网的水位进行实时监测和分析&#xff0c;能够及时发现问题并采取措施&#xff0c;提高排水系统的运行效率和管理水平。本文将详细介绍为什么要…...

webpack学习笔记

1. webpack基本概念 webpack&#xff1a; JavaScript 应用程序的静态模块打包器&#xff0c;是目前最为流行的JavaScript打包工具之一。webpack会以一个或多个js文件为入口&#xff0c;递归检查每个js模块的依赖&#xff0c;从而构建一个依赖关系图&#xff0c;然后依据该关系…...

解析代理IP在跨境电商和社媒营销中的关键作用

跨境电商和社媒营销领域的从业者深知&#xff0c;代理IP的价值愈发凸显。在推广营销的过程中&#xff0c;频繁遇到因IP关联而封禁账号的情况&#xff0c;或因使用不安全IP而导致异常问题。 这些问题促使人们开始高度重视代理IP的作用。但实际上&#xff0c;代理IP究竟是何物&a…...

Unity 之 Start 与Update 方法的区别

文章目录 当谈论Unity中的 Start和 Update方法时&#xff0c;我们实际上是在讨论MonoBehaviour类中的两个常用方法&#xff0c;用于编写游戏逻辑。这两个方法在不同的时机被调用&#xff0c;因此您可以根据需要选择在哪个方法中编写特定的代码。 Start 方法&#xff1a; Start…...

Spring Boot中如何编写优雅的单元测试

单元测试是指对软件中的最小可测试单元进行检查和验证。在Java中&#xff0c;单元测试的最小单元是类。通过编写针对类或方法的小段代码&#xff0c;来检验被测代码是否符合预期结果或行为。执行单元测试可以帮助开发者验证代码是否正确实现了功能需求&#xff0c;以及是否能够…...

三星Galaxy S23与iPhone 15的对比分析:谁会胜出?

三星Galaxy S23与iPhone 15的对决将于下个月进入高潮,这将是今年智能手机中最大的一场较量。毕竟,这是两家领先的移动设备制造商的旗舰手机。他们的手机的比较将在很大程度上决定谁能获得最佳手机的称号。 我们已经知道有利于三星Galaxy S23的情况,该产品自春季以来一直在推…...

MySQL索引 事物 存储引擎

一 索引 索引的概念 索引就是一种帮助系统能够更快速的查找信息的结构 索引的作用 索引的副作用 创建索引的规则 MySQL的优化 哪些字段/场景适合创建索引 哪些不适合 小字段唯一性强的字段更新不频繁&#xff0c;但查询率比较高的字段表记录超过 300行主键&#xff0c;外键…...

【谷粒学院】报错记录

无法从Nacos获取动态配置 原先gulimall-common中SpringCloud Alibaba的版本是2.1.0.RELEASE&#xff0c;无法从Nacos中获取配置文件信息 <dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId&…...

微积分基本概念

微分 函数的微分是指对函数的局部变化的一种线性描述。微分可以近似地描述当函数自变量的取值作足够小的改变时&#xff0c;函数的值是怎样改变的。。对于函数 y f ( x ) y f(x) yf(x) 的微分记作&#xff1a; d y f ′ ( x ) d x d_y f^{}(x)d_x dy​f′(x)dx​ 微分和…...

【业务功能篇78】微服务-前端后端校验- 统一异常处理-JSR-303-validation注解

5. 前端校验 我们在前端提交的表单数据&#xff0c;我们也是需要对提交的数据做相关的校验的 Form 组件提供了表单验证的功能&#xff0c;只需要通过 rules 属性传入约定的验证规则&#xff0c;并将 Form-Item 的 prop 属性设置为需校验的字段名即可 校验的页面效果 前端数据…...

pytorch的用法

...

Qt 设置窗口背景

窗口背景无非两种&#xff1a;背景色、背景图片。Qt中窗口背景如何设置&#xff1f; 一、QPalette设置背景 二、实现paintEvent&#xff0c;使用QPainter来绘制背景 三、使用QSS来设置背景 关于QSS的使用不想多说&#xff0c;一般我不用QSS设置窗口背景&#xff0c;也不建议…...

大模型是什么?泰迪大模型能够解决企业哪些痛点?

什么是大模型&#xff1f; 大模型是指模型具有庞大的参数规模和复杂程度的机器学习模型。在深度学习领域&#xff0c;大模型通常是指具有数百万到数十亿参数的神经网络模型。这些模型需要大量的计算资源和存储空间来训练和存储&#xff0c;并且往往需要进行分布式计算和特殊…...

YOLOv7-tracker 目标追踪 输入视频帧

目录 1 项目安装1.1 环境搭建1.2 项目下载1.3 权重下载1.4 环境安装1.5 上传待检测的视频帧 2 视频帧检测与追踪2.1 检测与追踪2.3 结果 参考项目&#xff1a;https://github.com/JackWoo0831/Yolov7-tracker/tree/master github链接&#xff1a;https://github.com/Whiffe/Yo…...

C语言二——C语言编写一段代码,求一元二次方程的根

这段代码实现了解一元二次方程的根的计算。用户需要输入方程的系数a、b、c&#xff0c;然后根据判别式的值确定方程的根的情况&#xff0c;并进行相应的输出。 如果判别式大于0&#xff0c;说明方程有两个实根&#xff0c;分别计算并输出。如果判别式等于0&#xff0c;说明方程…...

用Idea把SpringBoot项目打包镜像上传至docker

1、设置docker把2375端口开起来 命令查看docker装在哪里 vim docker.service 新增 -H tcp://0.0.0.0:2375 -H unix://var/run/docker.sock 2、配置Dockerfile 我在跟pom同一层 3、配置docker-maven-plugin <plugin><groupId>com.spotify</groupId><arti…...

基于 SVG 的图形交互方案实践

不知道从什么时候起&#xff0c;人们开始喜欢上数字大屏这种“花里胡哨”的东西&#xff0c;仿佛只要用上“科技蓝”这样神奇的色调&#xff0c;就可以让一家公司焕然一新&#xff0c;瞬间变得科技感满满。不管数字大屏的实际意义&#xff0c;是用来帮助企业监控和决策&#xf…...

微服务(rpc)

微服务&#xff08;rpc&#xff09; 微服务必备的模块生产者消费者管理平台流量控制集群情况下如何做到流量监控 负载均衡服务发现和治理序列化传输序列化和反序列化 微服务是一种架构风格&#xff0c;将一个应用程序拆分为一组小型、独立的服务&#xff0c;每个服务都可以独立…...

ThinkPHP 多应用配置,及不同域名访问不同应用的配置【详解】

ThinkPHP 多应用配置&#xff0c;及不同域名访问不同应用的配置【详解】 一、安装多应用扩展二、删除项目的中默认的controller文件夹三、创建多应用四、修改config/app.php文件五、测试并且访问多应用六、配置小皮&#xff0c;不同域名访问不同的应用七、小结 一、安装多应用扩…...

Springboot+Mybatis框架是否会取代SSM框架?

个人认真思考的观点&#xff1a;从市场使用来说&#xff0c;会有这个趋势。从技术上来说&#xff0c;不存在被替代这一说。 Spring BootMybatis框架是指使用Spring Boot作为基础框架&#xff0c;并集成Mybatis作为持久层框架的组合&#xff0c;它是一个基于Spring框架的快速开发…...

使用windeployqt和InstallShield打包发布Qt软件的流程

前言 Qt编译之后需要打包发布&#xff0c;并且发布给用户后需要增加一个安装软件&#xff0c;通过安装软件可以实现Qt软件的安装&#xff1b;用于安装软件的软件有很多&#xff0c;这里主要介绍InstallShield使用的流程&#xff1b; 使用windeployqt打包Qt编译后的程序 Qt程序…...

解决selenium的getdrive()方法阻塞问题

selenium里面的Webdriver的get()方法默认是阻塞的&#xff0c;也就是说要等整个页面全都加载完它才会相应。但我们大部分时候不需要用到页面里的所有东西&#xff0c;也许只需要用到里面的一个元素就行了 所以下面是我的解决方法&#xff1a; 初始化代码&#xff1a; # 设置…...

wordpress 渗透框架/cpa广告联盟平台

本章介绍Java Native Interface &#xff08;JNI&#xff09;。 JNI是本机编程接口。 它允许在Java虚拟机&#xff08;VM&#xff09;内运行的Java代码与使用其他编程语言&#xff08;如C&#xff0c;C 和汇编语言&#xff09;编写的应用程序和库进行互操作。 JNI最重要的好处…...

石家庄专业网站设计电话/百度电话号码查询平台

box-shadow 以逗号分割列表来描述一个或多个阴影效果&#xff0c;可以用到几乎任何元素上。 如果元素同时设置了 border-radius &#xff0c;阴影也会有圆角效果。多个阴影时和多个 text shadows 规则相同(第一个阴影在最上面)。默认值: none 不可继承值&#xff1a; inset 默…...

专业的seo网站优化公司/江苏seo网络

【单选题】以下程序的输出结果是:‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬ def hub(ss, x 2.0,y 4.0): ss x * y ss 10 print(ss, hub(ss, 3…...

sae wordpress 上传图片/百度网站登录

4.3.3 route 命令 路由表管理命令 路由表主要构成: Destination: 目标网络ID,表示可以到达的目标网络ID,0.0.0.0/0 表示所有未知网络,又称为默认路由,优先级最低Genmask:目标网络对应的netmaskIface: 到达对应网络,应该从当前主机哪个网卡发送出来Gateway: 到达非直连的网络,…...

动态网站制作教程/站长工具seo综合查询关键词

Java是一个安全的开发工具&#xff0c;它阻止开发人员犯很多低级的错误&#xff0c;而大部份的错误都是基于内存管理方面的。如果你想搞破坏&#xff0c;可以使用Unsafe这个类。这个类是属于sun.*API中的类&#xff0c;并且它不是J2SE中真正的一部份&#xff0c;因此你可能找不…...

公司手机版网站模板免费下载/万网域名查询

上一章&#xff1a;深入了解浮点精度&#xff08;三。浮点不准确&#xff09; 如果你不严谨要求的话&#xff0c;浮点类型自身的运算可以满足一些基本的需要&#xff0c; 但对于财务问题恐怕就不行了。为什么呢&#xff1f; 比如说double 100 99.999999999998 那么在购买的…...