使用 AWR 进行 Exadata 性能诊断 - 2018版

news2024/12/26 18:23:14

本文和之前的使用 AWR 进行 Exadata 性能诊断是非常类似的,理论部分几乎一样,但案例部分是不同的,其价值也在于此。前文是基于Exadata X10,本文是基于Exadata X5。当然,型号并不重要,重要的是分析过程。

本文基于2018年的一份白皮书:Using AWR Report on Exadata - Exadata Performance Diagnostics with AWR,文档可以从这里下载。

在Exadata System Overview中,是这么描述的:
Exadata 存储服务器配置和性能统计信息收集在自动工作负载存储库 (AWR) 中,数据可在 AWR 报告中获取。AWR 报告的 Oracle Exadata 部分以 HTML 或活动报告格式提供。

以下部分是 AWR 报告中的三个主要部分:

  • Exadata Server Configuration:硬件型号信息、软件版本和存储配置
  • Exadata Server Health Report:脱机磁盘和打开的警报
  • Exadata Performance Statistics:操作系统统计信息、存储服务器软件统计信息、智能扫描统计信息和按数据库统计信息

AWR 报告提供存储级别性能统计信息,不限于特定实例或数据库。这对于分析一个数据库可能影响另一个数据库性能的情况很有用。

配置差异使用特定颜色突出显示,以便于分析。例如,突出显示与其他单元具有不同软件版本的单元,或与其他单元具有不同内存配置的单元。

自动分析和呈现异常值,以便于性能分析。异常值被适当着色并链接到详细统计信息。

简介

Oracle Exadata 旨在为 Oracle 数据库提供显著更好的性能、成本效益和可用性。Exadata 采用现代云架构,具有横向扩展高性能数据库服务器、具有最先进 PCI 闪存的横向扩展智能存储服务器以及超快 InfiniBand 内部结构。Exadata 中独特的软件算法在存储、计算和 InfiniBand 网络中实现数据库智能,以比其他平台更低的成本提供更高的性能和容量。

Exadata 运行所有类型的数据库工作负载,包括在线事务处理 (OLTP)、数据仓库 (DW)、内存分析和混合工作负载整合。Exadata 可以作为私有数据库云的基础在本地部署,也可以使用订阅模式获取并部署在 Oracle 公共云或客户云中,所有基础设施均由 Oracle 管理。

随着世界各地的客户将 Exadata 作为企业数据库部署的首选平台,并将越来越多的数据库整合到 Exadata 系统上,从 Exadata 系统的角度监控这些数据库的性能变得比以往任何时候都更加重要。本文概述了如何将 Oracle 数据库自动工作负载存储库 (AWR) 功能与 Exadata 结合使用,以从 Exadata 的角度监控和分析数据库性能特征。

本文的内容适用于所有 Exadata 部署 - 无论是本地部署、公共云还是客户云。具体来说,对于 Exadata 云,由于客户对其数据库拥有完全的管理控制权,因此特定于 Exadata 的 AWR 功能的应用方式与这些数据库部署在本地时相同。

AWR 概述

Oracle Database 10g 中引入的自动工作负载存储库 (AWR) 功能是 Oracle 数据库使用最广泛的性能诊断工具。AWR 功能收集、处理和维护数据库性能统计数据,用于问题检测和自我调整。此数据收集过程会定期重复,结果会捕获在 AWR 快照中。根据 AWR 快照捕获的值计算出的增量值表示每个统计数据在一段时间内的变化,可以通过 AWR 报告查看以进行进一步分析。默认情况下,AWR 快照以每小时为间隔拍摄一次,快照会保留八天。AWR 报告也可以按需生成特定时间间隔的 AWR 报告。有关 AWR 的更多详细信息,请参阅 Oracle 数据库性能调整指南中的“收集数据库统计信息”。

性能和范围

在分析性能问题时,了解性能问题的范围并确保使用的数据和工具与问题范围相匹配非常重要。

例如,如果问题局限于一小部分用户或 SQL 语句,则 SQL 监控报告或 SQL 详细信息报告(使用 AWR 需要 Oracle Diagnostics Pack。SQL Monitor 报告和 SQL Details 报告需要 Oracle Diagnostics 和 Tuning Pack。)将包含与问题范围相关的数据。SQL 监控报告提供有关 SQL 语句或 DB 操作的单次执行的详细统计信息,而 SQL 详细信息则提供有关指定时间范围内 SQL 语句的多次执行的详细统计信息。

如果性能问题是实例范围或数据库范围的,则 AWR 报告将包含实例或整个数据库的数据和统计信息。活动会话历史记录或 ASH 可对活动会话进行采样,可用于解决实例范围和数据库范围的问题以及局部问题,因为它可跨多个维度收集数据,可用于过滤数据。

AWR 中的 Exadata 支持

Oracle Database 12.1.0.2.0 和 Exadata System Software
12.1.2.1.0 添加了 AWR 中的 Exadata 支持。通过在 AWR 报告中包含 Exadata 统计信息,客户现在可以通过统一报告查看存储层,而无需从存储服务器收集更多数据。对于拥有公共云和客户云环境的 Exadata 客户来说,这一点尤其重要,因为客户无法访问这些环境中的存储服务器。

Exadata 统计信息仅以 AWR 实例报告和 AWR 全局报告的 HTML 和 Active-HTML 格式提供;统计信息不以报告的文本格式提供。随着新版本的 Exadata 软件中包含新功能,报告中的 Exadata 部分也在不断增强。此外,Exadata 统计信息也可在 Enterprise Manager 中的 AWR 报告中使用。本白皮书中的参考资料部分提供了一系列文档,描述了如何使用 Enterprise Manager 管理 Exadata。

还要注意的是,在 AWR 报告中添加 Exadata 存储级别统计数据后,性能调优方法不会改变。用户应首先查看数据库时间,并找到数据库时间的最大消耗者,以解决性能问题。只有确定可能存在 IO 问题时,才应开始查看 Exadata 部分。Exadata 部分并非旨在替代现有工具和方法,而是旨在补充现有工具和方法。

挑战和 AWR Exadata 解决方案

Oracle DBA 面临的一个相当普遍的挑战是更好地分析和理解与底层基础架构(如服务器、网络和存储)直接相关的数据库性能特征。最佳数据库性能取决于此基础架构的最佳配置;但是,如果此基础架构配置错误或某些组件出现故障,准确诊断由此产生的数据库性能问题并将其与特定组件关联起来并非易事。

Exadata 等工程化系统的价值主张是 Oracle DBA 现在能够将 Exadata 存储服务器上收集和维护的统计数据直接自动集成到 AWR 中。正如本文后面将看到的那样,与将这些数据库部署在通用基础架构上所花费的时间和资源相比,此诊断过程非常高效。随着核心 Exadata 平台通过额外的软件和硬件功能得到增强,特定于 Exadata 的 AWR 内容也不断得到增强,Oracle DBA 也从中受益。

以下各节概述了可以利用 Exadata 特定的 AWR 功能的具体场景。

嘈杂邻居

Exadata 存储在分析性能问题时增加了新的范围。存储子系统可能由多个数据库共享,因此,来自存储层的统计数据适用于整个系统 - 即它不限于单个数据库或单个数据库实例。

在整合了多个数据库的 Exadata 系统中,重要的是要识别可能消耗系统上大量 IO 带宽的数据库,从而影响系统上的其他数据库。这在云部署中通常称为嘈杂邻居问题。但请注意,强烈建议利用 Exadata 的内置 IO 资源管理 (IORM) 功能,以便可以根据配置的资源计划对 Exadata 存储服务器中的 IO 请求进行优先级排序和调度。有关 IORM 的更多详细信息,请参阅 Exadata 系统软件用户指南中的“了解 IO 资源管理”。

为了解决这个嘈杂邻居问题,AWR 报告包含一个按 IO 请求和吞吐量分类的顶级数据库部分。在 AWR 快照时间,数据库的一个子集被捕获到 AWR 中 - 捕获哪些数据库是基于内部指标来确定每个存储服务器中的前 N ​​个。
如图 1 所示,在报告时,数据被汇总,以便按 IO 请求和 IO 吞吐量报告捕获的顶级数据库。此外,数据按闪存设备上的 IO 和硬盘上的 IO 细分。
在这里插入图片描述
图 1. 按 IO 请求排名的顶级数据库示例。
请注意,报告显示的是 %Captured 而不是 %Total,因为并非所有数据库的所有统计数据都由 AWR 捕获。此数据可针对整个系统(如上所示)和每个单元进行汇总。

单元或磁盘上的工作负载不均衡

Exadata 是一个并行系统,工作负载预计会均匀分布在所有存储
服务器和磁盘上。如果存储服务器或磁盘执行的工作量超过其同类服务器,则有可能导致性能问题。与并行系统通常的情况一样,系统的速度仅与其最慢的组件一样快。

Exadata 报告使用多个指标执行简单的异常值分析,以将设备与其同类设备进行比较。设备按设备类型和大小分组和比较,因为不同类型的设备不具有相同的性能特征。例如,闪存设备的性能预计与硬盘非常不同。同样,1.6TB 闪存设备可能无法维持与 6.4TB 闪存设备相同的 IO 量。

用于异常值分析的统计数据包括 OS 统计数据,类似于 iostat,其中包括 IOP、吞吐量、利用率百分比、服务时间和排队时间。它还包括单元服务器统计信息,这些统计信息按 IO 类型(读取或写入)和 IO 大小(小或大)细分 IOP、吞吐量和延迟。

除了异常值分析之外,Exadata AWR 报告还确定系统是否已达到最大容量。报告中使用的最大值是从单元查询的,与 Exadata 数据表中发布的内容一致。由于客户工作负载会有所不同,因此报告的这些最大数字旨在用作指导原则,而不是硬性规定
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图 2a。简单异常值分析示例。
此示例中没有异常值,但报告已确定硬盘可能已达到最大 IOPs 容量,如 (*) 和深红色背景所示。系统的最大容量为硬盘 6,408 IOPs,报告当前显示为 9,355.83 IOPs。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
图 2b。简单异常值分析示例。
在此示例中,报告已确定硬盘已达到最大容量。它还确定了两个磁盘的 IOPS 高于同类磁盘。

配置差异

与存储服务器或磁盘上的不均匀工作负载类似,存储服务器之间的配置差异可能会导致性能问题。配置问题可能是闪存缓存或闪存日志大小的差异,或使用的单元磁盘或网格磁盘数量的差异。如图 3 和图 3a 所示,AWR 报告包括 Exadata 配置信息,并识别配置不同的存储服务器。
在这里插入图片描述
图 3. 捕获的配置信息示例。
存储服务器模型将包括单元名称。'All’表示存储服务器的配置相同。

在这里插入图片描述
图 3a。从异构系统捕获的配置信息示例。
存储服务器模型包括每个模型的单元名称。“All”表示存储服务器的配置相同,当配置存在差异时,会显示单元名称,如 Exadata Storage Server Version部分所示。

高负载

性能变化可能是由于系统负载增加引起的。这可能是IO 负载增加或存储服务器上 CPU 增加。IO 负载增加可能是由于维护活动(例如备份)或由于用户工作负载增加或执行计划可能发生变化而导致的用户 IO 变化引起的。

在 Exadata 系统上,每个 IO 都会发送附加信息,其中包括数据库执行 IO 的原因。通过 IO 原因,我们可以轻松确定额外的 IO 负载是由维护活动还是由数据库工作负载增加引起的。在这里插入图片描述

报告还可以查看 Exadata 智能功能,包括智能扫描、智能闪存日志和智能闪存缓存。

在这里插入图片描述
图 4. 每个存储单元的 IO 请求的 IO 原因示例。
这表明 IO 请求是由典型的数据库工作负载(重做日志写入和缓冲区缓存读取)引起的。

分析特定于 EXADATA 的 AWR 数据

为了熟悉 AWR 部分,我们将介绍一个可以反映真实客户用例的示例。

场景是,该客户刚刚在 Exadata X5-2 全机架的四个计算节点上部署了一个数据库,并立即开始遇到性能问题。以下部分概述了通过分析报告中特定于 Exadata 的部分可以轻松执行诊断。

查看数据库统计信息

执行的第一个检查是验证系统的 IO 特性。图 5 显示了单个实例的 Top Timed Events,但在这种情况下,所有 4 个实例看起来相当相似。等待事件显示,几乎 75% 的 DB 时间都花在了cell single block physical read上,平均等待时间为 8.32 毫秒。此读取延迟可能意味着数据是从硬盘而不是闪存缓存读取的(从闪存读平均等待时间应为微秒)。
在这里插入图片描述
图 5. AWR 报告中按总等待时间排列的前 10 个前台事件。

进一步查看数据库统计数据后,发现此实例发出的 IO 数量相对较少,为 154.6 IOPs(图 6)。在 4 个实例中,总共只有大约 600 IOPs。

但是,图 6 还显示optimized requests几乎为 0。Exadata 上的优化 IO 包括:

  • 智能闪存缓存上的 IO
  • 来自智能扫描的 IO,包括存储索引保存的 IO 和列式缓存保存的 IO
    此数据库似乎没有执行智能扫描工作负载,因此缺乏优化 IO 进一步支持了 IO 未使用闪存缓存的理论。
    在这里插入图片描述
    图 6.AWR 报告中的 IO 配置文件显示此实例的 IO 最少。

图 7 显示了数据库实例发出的 IO 类型,在这个列表中,阻止数据库使用闪存缓存的 IO 类型没有什么特别之处。大多数读取都是Buffer Cache Reads,即数据库为了填充缓冲区缓存而执行的磁盘读取。这些读取通常应该由闪存缓存满足。
在这里插入图片描述
图 7. AWR 报告中按功能汇总的 IOStat 显示了应缓存在闪存缓存中的正常数据库 IO

一旦验证了 IO 性能问题,下一组分析就可以转向 Exadata配置和统计数据。

Exadata 配置

查看 Exadata 配置部分可发现,它是一台 X5-2 全机架,配有 14 台存储服务器(图 8)。其余配置和运行状况部分未发现任何异常 -
所有存储服务器均按照预期配置以相同方式配置。没有警报,
也没有任何磁盘处于离线状态。为简洁起见,本文未包含这些部分。
在这里插入图片描述
图 8.AWR 报告中的 Exadata 存储服务器模型显示了一个 X5-2 全机架。

IO 分布

对存储服务器上的 IO 进行检查后发现,存储服务器上发生的 IO 并不多(图 9)。但是,硬盘上的 IO 为每单元 564.28/s,比闪存设备上的 IO 为每单元 119.80/s 要多。这种分布在 Exadata 环境中并不常见,因为大多数 IO 通常发生在闪存上。异常值部分报告每个设备类型的 IO,因为不同类型的设备预计具有不同的性能特征。用于识别设备类型的格式为 <F|H>/,其中 F 代表闪存设备,H 代表硬盘。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

图 9.来自 AWR 报告的单元服务器 IOPs

Smart Scans

接下来,我们查看了图 10 所示的智能扫描部分,以确定磁盘读取是否由智能扫描引起。但情况不太可能如此,因为图 9 显示大多数 IO 都是小读取(图 9 显示每秒 133.86 次小读取),而智能扫描通常会被视为大读取(图 9 显示每秒 0.15 次大读取)。快速浏览图 10 中的智能扫描部分,可以确认 IO 不是来自智能扫描,因为每个数据单元只有 1.5MB/s (per Sec列)符合智能扫描的条件。

Smart IO部分还显示了系统上智能 IO 活动的总体情况,并给出了智能扫描执行情况以及存储服务器是否可能受 CPU 限制的提示。但请注意,当查看一小组 SQL 语句的特定智能扫描问题时,SQL Monitor 报告将是一个更好的性能诊断工具。
在这里插入图片描述
图 10.显示智能扫描信息的 AWR 报告中的智能 IO。

Flash Cache

从查看数据库等待事件开始,我们最初怀疑数据是从硬盘读取的,而不是从闪存缓存读取的。如果是这样,预期闪存缓存命中率会很低。请参阅表 1 了解闪存缓存命中率的定义和计算。

在图 11 中,单元 OLTP 命中率(以及单元扫描命中率)非常高,几乎达到 100%。然而,数据库闪存缓存命中率几乎为 0。那么为什么会出现这种差异呢?
在这里插入图片描述
图 11.来自 AWR 报告的闪存缓存节省情况。

统计项描述
Database Flash Cache Hit%从闪存缓存中获取的数据库读取请求的百分比
Cell OLTP Hit%存储服务器上由闪存缓存满足的 OLTP 读取请求的百分比。计算方法如下 100 ∗ ( 闪存缓存读取请求命中 闪存缓存读取请求命中 + 闪存缓存未命中 ) 100*(\dfrac{闪存缓存读取请求命中}{闪存缓存读取请求命中+闪存缓存未命中}) 100(闪存缓存读取请求命中+闪存缓存未命中闪存缓存读取请求命中)
Cell Scan Hit%存储服务器上由闪存缓存满足的扫描请求百分比。计算方法如下 100 ∗ ( 闪存缓存扫描读取字节 尝试闪存缓存扫描字节数 ) 100*(\dfrac{闪存缓存扫描读取字节}{尝试闪存缓存扫描字节数}) 100(尝试闪存缓存扫描字节数闪存缓存扫描读取字节)

表 1. Flash Cache Hit% 定义

Cell Hit%是根据适合**在闪存缓存中缓存的读取次数计算得出的。Exadata 具有智能闪存缓存,可以区分来自数据库的 IO 请求类型,以及将数据缓存在闪存缓存中是否有好处。**Cell Hit%**不包括检索不会从闪存缓存中受益的数据的读取次数。

但是,Database Flash Cache Hit%会考虑来自数据库的所有 IO 请求。

两者之间的差异表明来自数据库的读取次数不适合闪存缓存。

查看来自单元的小读取次数分布(如图 12 所示),发现小读取次数几乎均匀分布在闪存和硬盘之间,其中 53.58% 的小读取次数在硬盘上。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图 12. AWR 报告中的单块读取指示 OLTP 工作负载

图 13 中的“每秒闪存缓存用户读取次数”显示闪存缓存的读取量非常小。这进一步支持了以下理论:读取未发生在闪存缓存上,因为 IO 请求不符合闪存缓存的条件。

在这里插入图片描述
图 13.来自 AWR 报告的闪存缓存用户读取量。

图 14 显示了各个单元的命中率,并且所有单元的闪存缓存行为都相似。存储单元几乎没有从闪存缓存读取数据,但命中率很高。这意味着磁盘 IO 不是由闪存缓存未命中引起的,而是故意绕过闪存缓存的 IO。
在这里插入图片描述
图 14. AWR 报告中的闪存缓存用户读取效率

图 15 显示了Flash Cache User Writes的回顾,其中还显示了存储单元上的写入量极少。这似乎表明数据库发出的读取和写入都不符合闪存缓存的条件。
在这里插入图片描述
图 15. AWR 报告中的闪存缓存用户写入

在对闪存缓存部分进行最终检查时,还会检查Flash Cache Internal Writes
这些将是填充写入(population write)请求。闪存缓存未命中通常会导致填充写入,因此对相同数据的后续请求将命中闪存缓存。在这种情况下,闪存缓存中也会有非常少量的填充写入。
在这里插入图片描述

图 16. AWR 报告中的闪存缓存内部写入。
来自闪存缓存部分的所有数据都表明闪存缓存活动非常少,并且
IO 被认为不适合缓存。

IO Reasons

IO 原因部分告诉我们为什么在存储服务器上发出 IO。IO 原因中的 IO 包括读取和写入,以及硬盘和闪存。

在图 17 中,大多数 IO 原因通常缓存在闪存缓存中:

  • Limit dirty buffer writes – DBWR 发出的写入以限制缓冲区缓存中的脏缓冲区数量
  • Data file reads to private memory – 这些可能并不总是缓存在闪存缓存中,因为这些是大型读取。但是,这仅占请求的 17%。3
  • Buffer cache reads – 读入数据库缓冲区缓存。这些是常规用户读取,通常应缓存在闪存缓存中
  • Redo log writes – 写入重做日志。使用智能闪存日志,这些写入同时对智能闪存日志和重做日志进行。

其余请求仅占约 4%,要么是数据库控制文件读取,要么是内部 IO。内部 IO 是由存储服务器完成的 IO。
在这里插入图片描述
图 17.AWR 报告中按请求列出的 IO 原因。

Top Databases

查看图 18 中的热门数据库,可以验证数据库 DB0003 的大部分 IO 都在磁盘上。
在这里插入图片描述

图 18.AWR 报告中按 IO 请求排名的顶级数据库。

分析摘要

到目前为止,这已经证明了:

  • 数据库的 IO 性能很差。75% 的 DB 时间用于“单元单块物理读取”,平均等待时间超过 8 毫秒。
  • 闪存缓存部分表明闪存缓存上的活动很少,并且 IO 很可能被认为不符合闪存缓存的条件。
  • IO 原因表明相当典型的 IO 通常应该符合闪存缓存的条件(可能除了读取 PGA)。
  • 顶级数据库确认该数据库正在硬盘上执行其大部分 IO 请求,而不是在闪存上。

审查所有这些数据表明,可能存在配置问题,这是导致 IO 绕过闪存缓存的最可能原因。与客户一起审查配置数据发现,IORM 计划无意中禁用了数据库的闪存缓存。一旦修复了 IORM 计划,性能问题就会自动解决。

Exadata 性能数据

除了 AWR 报告外,Exadata 上还有大量性能数据,包括单元指标和 ExaWatcher。表 2 总结了可用数据以及相关特征:

在这里插入图片描述

表 2. Exadata 上可用的性能数据。

有关单元指标的更多信息,请参阅 Exadata 系统软件用户指南《监控和调整 Oracle Exadata 系统软件》。

结论

AWR 是 Oracle 数据库上使用最广泛的性能诊断工具,现在包含 Exadata 统计数据。与将数据库部署在通用基础架构上相比,将 Exadata 统计数据集成到 AWR 报告中可以更好地、更轻松地分析数据库性能问题。

参考

  1. Exadata Health and Resource Usage Monitoring
  2. Exadata Health and Resource Utilization Monitoring - Exadata Database Machine KPIs
  3. Exadata Health and Resource Utilization Monitoring - Adaptive Thresholds
  4. Exadata Health and Resource Utilization Monitoring - System Baselining for Faster Problem Resolution
  5. Oracle Enterprise Manager for Exadata Cloud - Implementation, Management, and Monitoring Best Practices
  6. Enterprise Manager Oracle Exadata Database Machine Getting Started Guide

参考

  • How to determine if you are getting all the benefits of Exadata via AWR
  • Youtube: Speed up transparent performance with Exadata: What, when, how, and why I Oracle Database World
  • Performance Diagnostics With AWR Reports - Trivadis

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2252953.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【AI系统】计算与调度

计算与调度 上一篇文章我们了解了什么是算子&#xff0c;神经网络模型中由大量的算子来组成&#xff0c;但是算子之间是如何执行的&#xff1f;组成算子的算法逻辑跟具体的硬件指令代码之间的调度是如何配合&#xff1f;这些内容将会在本文进行深入介绍。 计算与调度 计算与…

JavaSE学习心得(APL与算法篇)

常用APL和常见算法 前言 常用APL Math System Runtime Object ​编辑浅克隆 深克隆 Objects Biginteger 构造方法 成员方法 底层存储方式 Bigdecimal 构造方法 Bigdecimal的使用 底层存储方式 ​编辑正则表达式 两个判断练习 两个爬取练习 贪婪爬取和非贪…

C++ ——— 引用的概念以及特性

目录 引用的概念 引用在实际代码中的作用 引用的特性 1. 引用在定义时必须初始化 2. 一个变量可以有多个引用 3. 可以给别名再次取别名&#xff0c;或者多次取别名 4. 引用一旦引用了实体&#xff0c;就不能再引用其他实体了 引用的概念 引用不是新定义一个变量&#x…

Linux-异步IO和存储映射IO

异步IO 在 I/O 多路复用中&#xff0c;进程通过系统调用 select()或 poll()来主动查询文件描述符上是否可以执行 I/O 操作。而在异步 I/O 中&#xff0c;当文件描述符上可以执行 I/O 操作时&#xff0c;进程可以请求内核为自己发送一个信号。之后进程就可以执行任何其它的任务…

嵌入式入门Day23

数据结构Day4 操作受限的线性表栈基本概念顺序栈顺序栈结构创建顺序栈判空和判满栈扩容入栈出栈遍历销毁栈 链式栈队列基本概念顺序队列循环顺序队列定义循环队列的创建循环顺序队列的判空和判满循环顺序队列的入队循环顺序队列的遍历循环顺序队列的出队循环顺序队列的销毁 链式…

C语言实验 一维数组

时间:2024.12.3 一、实验 7-1 交换最小值和最大值 #include<stdio.h> int main() {int n, a[10], i, min = 0, max = 0;scanf("%d", &n);for (i = 0; i < n; i++){scanf("%d",&a[i]);}for (i = 0; i < n; i++){if (a[min] > a[i…

聚合支付系统官方个人免签系统三方支付系统稳定安全高并发

系统采用fastadmin框架独立全新开发&#xff0c;安全稳定,系统支持代理、商户、码商等业务逻辑。 针对最近一-些JD&#xff0c;TB等业务定制&#xff0c;子账号业务逻辑API 非常详细&#xff0c;方便内置对接! 注意&#xff1a;系统没有配置文档很使用教程&#xff0c;不清楚…

HTMLCSS 奇幻森林:小熊的甜蜜蛋糕派对大冒险

这个 HTML 页面包含了一个背景、多个下落的蛋糕图片和一个左右移动的loopy图片,实现了一个小熊吃蛋糕的效果 演示效果 HTML&CSS <!DOCTYPE html> <html><head><meta charset"utf-8" /><title>ideal life</title><style…

电脑关机的趣味小游戏——system函数、strcmp函数、goto语句的使用

文章目录 前言一. system函数1.1 system函数清理屏幕1.2 system函数暂停运行1.3 system函数电脑关机、重启 二、strcmp函数三、goto语句四、电脑关机小游戏4.1. 程序要求4.2. 游戏代码 总结 前言 今天我们写一点稍微有趣的代码&#xff0c;比如写一个小程序使电脑关机&#xf…

OpenSSL 自建CA 以及颁发证书(网站部署https双向认证)

前言 1、前面写过一篇 阿里云免费ssl证书申请与部署&#xff0c;大家可以去看下 一、openssl 安装说明 1、这部分就不再说了&#xff0c;我使用centos7.9&#xff0c;是自带 openssl的&#xff0c;window的话&#xff0c;要去下载安装 二、CA机构 CA机构&#xff0c;全称为…

在M3上面搭建一套lnmp环境

下载docker-desktop 官网下载docker-desktop 切换镜像源 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docke…

WebSocket 通信说明与基于 ESP-IDF 的 WebSocket 使用

一、 WebSocket 出现的背景 最开始 客户端&#xff08;Client&#xff09; 和 服务器&#xff08;Server&#xff09; 通信使用的是 HTTP 协议&#xff0c;HTTP 协议有一个的缺陷为&#xff1a;通信只能由客户端&#xff08;Client&#xff09;发起。 在一些场景下&#xff0…

linux(centos) 环境部署,安装JDK,docker(mysql, redis,nginx,minio,nacos)

目录 1.安装JDK (非docker)1.1 将文件放在目录下&#xff1a; /usr/local/jdk1.2 解压至当前目录1.3 配置环境变量 2.安装docker2.1 验证centos内核2.2 安装软件工具包2.3 设置yum源2.4 查看仓库中所有docker版本&#xff0c;按需选择安装2.5 安装docker2.6 启动docker 并 开机…

CODESYS可视化秒表分批计时详细制作案例(一)

#制作一个在可视化界面可用于秒表计时的详细案例# 前言: 在电脑和手机的时钟上,都有一个秒表计时的功能。除此之外,在赛事上,也有更为专业的秒表计时器设备。举一反三,那么对于工控设备,为了衡量生产效率和节拍,引入了"Cycle Time(CT)"的概念,我们可以通…

openGauss开源数据库实战十八

文章目录 任务十八 openGauss逻辑结构:构:用户和权眼管理任务目标实施步骤一、准备工作二、用户和角色管理1.使用CREATE USER语句创建用户2.使用CREATE ROLE语句创建用户3.删除用户和角色 三、权限管理1.系统权限清理工作 任务十八 openGauss逻辑结构:构:用户和权眼管理 任务目…

Scratch游戏推荐 | 我的世界:平台冒险——像素世界的全新挑战! ⛏️

&#x1f3ae; Scratch游戏推荐 | 我的世界&#xff1a;平台冒险——像素世界的全新挑战&#xff01; ⛏️&#x1f30d; 今天给大家推荐一款精彩绝伦的Scratch平台冒险游戏——《我的世界&#xff1a;平台冒险 – 第二章》&#xff01;由atomicmagicnumber制作&#xff0c;这…

【java-数据结构篇】揭秘 Java LinkedList:链表数据结构的 Java 实现原理与核心概念

我的个人主页 我的专栏&#xff1a;Java-数据结构&#xff0c;希望能帮助到大家&#xff01;&#xff01;&#xff01;点赞❤ 收藏❤ 目录 1. Java LinkedList 基础 1.1 LinkedList 简介 1.2 LinkedList 的实现原理 1.3 LinkedList 与 ArrayList 的区别 2. 链表基础 2.1 链…

北斗道路运输车辆管理应用:违规驾驶行为监测、车辆编队管理、安全跟踪(车辆历史轨迹查询)、车辆动态位置数据的实时查看和管理

文章目录 场景概述解决方案应用案例合作构想场景概述 面向旅游大巴车、危险品运输车及重型载货运输车等车辆,利用北斗定位导航服务,结合互联网通信技术,实现车辆安全驾驶管理与调度,有效降低道路事故发生风险,提升道路运输管理水平及车辆调度能力。 解决方案 在车辆上安…

【ABAP——DAILOG_2】

文章目录 使用Tabstrip控件实现分页签效果标签页的修改使用Table Control控件实现表单输出表格控件使用向导创建Table ControlTable Control列的修改 用户通过界面输入数据&#xff0c;数据通过屏幕控件传递到ABAP/4程序中的变量&#xff0c;程序在PBO中准备数据并显示界面&…

资料文件夹转移工具5.2.3 |快速转移到D盘,释放C盘空间

这是一款支持将C盘的常用文件夹转移到其他磁盘分区的工具&#xff0c;提供仅变目录、复制资料和转移资料三种转移方式。该工具完全免费&#xff0c;单文件免安装&#xff0c;大小仅为546KB&#xff0c;非常适合需要释放C盘空间的用户。 大小&#xff1a;546KB 下载地址&#…