(一)OLAP(联机分析处理)
OLAP 是数据仓库系统的主要应用类型,它专注于支持复杂的分析操作。这种类型的数据库使用场景通常涉及对大量历史数据进行多维度的分析,以帮助企业做出决策。例如,企业可能需要分析销售数据在不同地区、不同时间段、不同产品类别下的表现,OLAP 数据库能够高效地处理此类复杂的查询需求,为数据分析人员提供深入洞察数据的能力。
(二)OLTP(联机事务处理)
OLTP 主要用于处理基本的、日常的事务,像银行交易就是典型的 OLTP 应用场景。在这种环境下,数据库需要快速且准确地处理大量的短事务,如账户的存款、取款、转账等操作。OLTP 数据库强调事务的处理速度、数据的完整性和并发性,以确保系统能够在高负载的日常操作中稳定运行。
(一)OLTP
- SGA 分配
对于 OLTP 系统,SGA(系统全局区)的分配建议为系统内存的 0.56 倍。SGA 是 Oracle 数据库在内存中的重要存储区域,包含了多个关键的内存结构,用于缓存数据、SQL 语句等信息,合理的 SGA 大小对于 OLTP 系统的性能至关重要。这种分配比例是基于 OLTP 系统频繁的事务处理特点,需要足够的内存来缓存经常访问的数据和常用的 SQL 语句,以减少磁盘 I/O,提高事务处理速度。 - PGA 分配
PGA(程序全局区)在 OLTP 环境下建议为 SGA 的 0.1 - 0.2 倍。PGA 主要用于存储单个服务器进程的数据和控制信息,在 OLTP 中,由于事务处理相对简单且短小,每个进程所需的 PGA 空间相对较小。适当的 PGA 大小可以确保每个事务都有足够的内存来执行,同时避免内存的过度分配。 
(二)OLAP
- SGA 分配
在 OLAP 系统中,SGA 建议为系统内存的 0.48 倍。OLAP 系统虽然也需要 SGA 来缓存数据和元数据,但由于其查询操作通常涉及大量数据的读取和复杂分析,对数据缓冲区的依赖相对较小,更多的内存可能会分配给 PGA 以支持复杂查询的执行。 - PGA 分配
PGA 在 OLAP 环境下建议为 SGA 的 0.45 - 0.65 倍。OLAP 查询往往需要大量的内存来处理复杂的计算和数据排序等操作,较大比例的 PGA 分配可以满足这些复杂查询的内存需求,提高查询性能。 
(一)修改 SGA 大小
- 查询当前 SGA 大小
可以使用命令来查询当前 SGA 的大小。这一步骤是为了了解当前数据库的内存配置情况,以便确定是否需要调整以及调整的幅度。 

- 修改 SGA 大小的命令
使用以下命令修改 SGA 大小: 

这里将 SGA 的最大大小和目标大小都设置为 4096m,表示修改是在服务器参数文件(spfile)中进行,这样修改后需要重启数据库才能生效。
 3. 重启数据库
先关闭数据库,然后再启动数据库使新的 SGA 大小设置生效。
(一)查询当前 PGA 大小
使用命令可以查看当前 PGA 的参数设置情况。

(二)修改 PGA 大小
使用以下命令修改 PGA 大小,且不需要重启数据库:
设置 PGA 的目标大小为 512m,表示参数修改在内存和服务器参数文件中同时生效。
 
(一)SGA 主要构成部分
- 查看 SGA 情况
可以使用或者命令来查看 SGA 的详细信息。SGA 主要由三部分构成:共享池、数据缓冲区、日志缓冲区,此外还可能包括 Java 池和大型池等其他区域。 - 固定大小区域(Fixed Size)
固定大小区域用于存储 SGA 各个组件的信息,其大小不能修改。这个区域包含了一些数据库运行必需的基本结构信息,为整个 SGA 的正常运作提供基础支持。 - 可变大小区域(Variable Size)
可变大小区域包括共享池、Java 池、大池等。这些部分的大小可以根据数据库的配置和运行需求进行调整。其中,共享池是一个重要的组成部分,它在数据库性能优化中起着关键作用。 
(二)共享池(shared pool)
- 共享池功能与构成
共享池用于存储最近执行的 SQL 语句和最近使用的数据字典数据。它主要由 Library cache 和 Data dictionary cache 两个内存结构构成。Library cache 缓存被执行的 SQL 和 PL/SQL 的相关信息,包括 SQL 语句的文本、分析后的代码及执行计划,通过 LRU(最近最少使用)算法进行管理,由 Shared SQL area 和 Shared PL/SQL area 两个结构组成。这种设计实现了常用语句的共享,提高了 SQL 语句的执行效率。Data dictionary cache 则缓存被使用的数据库定义,包含有关表、列、用户、权限以及其他数据库对象的信息。在语法分析阶段,服务器进程访问数据字典中的信息以解析对象名和对存取操作进行验证,缓存数据字典信息有助于缩短响应时间。 - 修改共享池大小
可以使用命令来修改共享池的大小。根据数据库的实际负载和性能情况,合理调整共享池大小可以优化 SQL 语句的执行性能,避免因共享池过小导致频繁的 SQL 解析,或者因共享池过大而浪费内存资源。 
(三)数据缓冲区(database buffer cache)
- 数据缓冲区功能
数据缓冲区用于存储最近从数据文件中读写过的数据。在数据高速缓冲区中存放着 Oracle 系统使用过的数据块,数据库以数据块为单位进行读写操作。当向数据库写入数据时,数据先写入缓冲区,当缓冲区填满时,系统会自动淘汰一些不常被访问的数据。如果用户查询的数据不在缓冲区中,Oracle 会自动从磁盘中读取。 - 数据缓冲区类型
数据高速缓冲区包括三个类型的区:- 脏数据区(Dirty Buffers):包含已经改变过并需要写回数据文件的数据块。这些数据块在内存中已经被修改,但尚未同步到磁盘,数据库的后台进程会定期将脏数据写回磁盘,以保证数据的一致性。
 - 自由区(Free Buffers):没有包含任何数据并可以再写入的区,Oracle 可以从数据文件读取数据块到该区。自由区为新的数据读取提供了空间,确保缓冲区有足够的可用空间来容纳新的数据块。
 - 保留区(Pinned Buffers):此区包含正在处理的或者明确保留用作将来用的区。这些数据块在处理过程中被固定在缓冲区中,不会被轻易替换,以保证相关操作的连续性。
 
 
(四)重作日志缓冲区(redo log buffer)
重作日志缓冲区用于记录服务或后台进程对数据库的操作,每一项修改记录都被称为 redo 条目。利用 Redo 条目的信息可以在数据库恢复时重做修改,确保数据库在出现故障后能够恢复到一致状态。它在数据库的事务处理和故障恢复机制中起着关键作用,通过记录对数据库的更改,保证数据的持久性和完整性。
(五)Java 池(Java Pool)和大型池(Large Pool)
- Java 池
Java 池用于存储 Java 代码。在 Oracle 数据库中,如果使用了 Java 相关的功能,如存储过程、函数等,Java 池为这些 Java 代码的执行提供内存空间。 - 大型池
大型池用于存储不与 SQL 直接相关的大型内存结构,主要用于备份、恢复等操作。例如,在进行大规模的数据备份或恢复操作时,大型池可以为这些操作提供足够的内存,避免因内存不足而影响操作的效率。 
(一)查询 Oracle 数据字典缓存命中率
使用命令可以查询数据字典缓存命中率。数据字典缓存命中率反映了数据字典信息在内存中被命中的情况,较高的命中率意味着服务器进程在访问数据字典时更多地从内存中获取信息,减少了磁盘 I/O,提高了数据库的性能。

(二)查询 Oracle 的 latch 命中率
通过命令查询 latch 命中率。latch 是一种轻量级的锁机制,用于保护 Oracle 内存结构中的关键数据结构。latch 命中率反映了获取 latch 的效率,高命中率表示系统在并发访问这些关键结构时的性能较好。

(三)查看 Oracle 的 buffer pool 命中率
使用以下命令查看 buffer pool 命中率:

buffer pool 命中率显示了数据缓冲区中数据的命中情况,它是衡量数据库性能的重要指标之一。高命中率意味着更多的数据请求可以从内存缓冲区中得到满足,减少了磁盘读取操作,从而提高数据库的整体性能。
(四)查看共享池的命中率
使用命令查看共享池命中率。共享池命中率反映了共享池中 SQL 和 PL/SQL 相关信息的重用情况,较高的命中率表示数据库能够更有效地复用已经解析和编译过的 SQL 语句,减少了重复解析和编译的开销。

(五)查看 buffer cache 命中率及建议
- 查看 buffer cache 命中率
可以使用以下两个查询语句查看 buffer cache 命中率: 

这些查询从不同角度展示了 buffer cache 的命中情况,帮助数据库管理员了解数据缓冲区的性能,以便根据命中率情况对数据库进行优化。
 2. 查看 buffer cache 建议(适用于指定 SGA 的目的)

这些查询语句可以根据数据库的当前状态和历史数据,为 buffer cache 的大小调整提供建议,帮助管理员优化数据缓冲区的配置,提高数据库性能。同时,可以通过命令查看 cache 的相关参数设置情况,结合各种读取的统计信息,如、和等,全面评估数据库的性能状态,并根据需要进行相应的优化调整。例如,可以通过以下查询语句获取这些读取统计信息:

通过对这些命中率和统计信息的持续监控和分析,数据库管理员可以及时发现潜在的性能问题,并采取有效的优化措施,确保 Oracle 数据库在不同类型的应用场景(如 OLAP 和 OLTP)下都能保持良好的性能。
(六)启动报错“out of memory”的解决方法
- 查询虚拟内存页面大小
在 Linux 系统下,使用命令查询虚拟内存一个页面的大小,结果通常为 4096 字节(即 4K)。这一步是为了后续计算共享内存相关参数。 - 查看共享内存最大数及计算可用共享内存总量
通过查看共享内存最大数,假设结果为 。根据公式,可计算出当前系统的共享内存总量。如果设置的 SGA + PGA 大于这个值,数据库启动时就会报错“out of memory”。 - 修改共享内存大小
假设要将共享内存修改为 nG,首先计算,然后使用命令修改共享内存最大数,以满足 SGA 和 PGA 的内存需求。 
欢迎关注公众号《小周的数据库进阶之路》,更多精彩知识和干货尽在其中。
到此这篇tidb数据库与oracle比较(tidb和oracle比较)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!版权声明:
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权、违法违规、事实不符,请将相关资料发送至xkadmin@xkablog.com进行投诉反馈,一经查实,立即处理!
转载请注明出处,原文链接:https://www.xkablog.com/sjkxydsj/14035.html