PGA

PGA(Process Global Area),是server process一段私有内存区,它包含有全局变量,数据结构和一些控制信息。


PGA中对性能影响最大的就是SQL工作区了。通常说来,SQL工作区越大则对于SQL语句的执行的效率就高,从而对于用户的响应时间就越少。理想情况下,SQL工作区应该可以容纳SQL执行过程中所涉及到的所有输入数据和控制信息。当然,这只是理想情况,现实往往总是不能尽如人意,很多情况下 SQL工作区是不能容纳执行SQL所需要的内存空间的,从而不得不交换到临时表空间里。为了衡量执行SQL所需要的内存与实际分配给该SQL的SQL工作区之间的契合程度,oracle将所分配的SQL工作区大小分成三种类型:

optimal尺寸:SQL语句能够完全在所分配的SQL工作区内完成所有的操作。这时的性能最佳。

onepass尺寸:SQL语句需要与磁盘上的临时表空间交互一次才能够在所分配的SQL工作区中完成所有的操作。 multipass尺寸:由于SQL工作区过小,从而导致SQL语句需要与磁盘上的临时表空间交互多次才能完成所有的操作。这个时候的性能将急剧下降。

当系统整体负载不大时,oracle倾向于为每个session的PGA分配optimal尺寸大小的SQL工作区。

而随着负载上升,比如连接的session逐渐增多导致同时执行的SQL语句越来越多时,oracle就会倾向于为每个session的PGA分配onepass尺寸大小的SQL工作区,甚至是multipass尺寸的SQL工作区了。

PGA性能调整

在Oracle8i 中,PGA调整非常复杂,要调整SORT_AREA_SIZE、HASH_AREA_SIZE、BITMAP_MERGE_AREA_SIZE、 CREATE_BITMAP_AREA_SIZE等参数。在ORACLE9I中,只需要调整 PGA_AGGREGATE_TARGET。

--PGA_AGGREGATE_TARGET初始化设置

PGA_AGGREGATE_TARGET的值应该基于Oracle实例可利用内存的总量来设置,这个参数可以被动态的修改。假设Oracle实例可分配4GB的物理内存,剩下的内存分配给操作系统和其它应用程序。你也许会分配80%的可用内存给Oracle实例,即3.2G。现在必须在内存中划分 SGA和PGA区域。

在OLTP系统中,典型PGA内存设置应该是总内存的较小部分(例如20%),剩下80%分配给SGA。
OLTP:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 20%

在DSS系统中,由于会运行一些很大的查询,典型的PGA内存最多分配70%的内存。
DSS:PGA_AGGREGATE_TARGET = (total_mem * 80%) * 50%

在这个例子中,总内存4GB,DSS系统,你可以设置PGA_AGGREGATE_TARGET为1600MB,OLTP则为655MB。

--配置PGA自动管理

不用重启DB,直接在线修改。

SQL> alter system set workarea_size_policy=auto scope=both;

System altered.

SQL> alter system set pga_aggregate_target=512m scope=both;

System altered.

SQL> show parameter workarea

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
workarea_size_policy                 string      AUTO --这个设置成AUTO
SQL> show parameter pga

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
pga_aggregate_target                 big integer 536870912

SQL>

--监控自动PGA内存管理的性能

V$PGASTAT:这个视图给出了一个实例级别的PGA内存使用和自动分配的统计。

SQL> set lines 256
SQL> set pages 42
SQL> SELECT * FROM V$PGASTAT;

NAME                                                                  VALUE UNIT
---------------------------------------------------------------- ---------- ------------
aggregate PGA target parameter                                    536870912 bytes    --当前PGA_AGGREGATE_TARGET的值
aggregate PGA auto target                                         477379584 bytes    --当前可用于自动分配了的PGA大小,不应该比PGA_AGGREGATE_TARGET 小
global memory bound                                                26843136 bytes    --自动模式下工作区域的最大大小,Oracle根据工作负载自动调整。
total PGA inuse                                                     6448128 bytes
total PGA allocated                                                11598848 bytes    --PGA的最大分配
maximum PGA allocated                                             166175744 bytes
total freeable PGA memory                                            393216 bytes    --PGA的最大空闲大小
PGA memory freed back to OS                                        69074944 bytes
total PGA used for auto workareas                                         0 bytes    --PGA分配给auto workareas的大小
maximum PGA used for auto workareas                                 1049600 bytes
total PGA used for manual workareas                                       0 bytes
maximum PGA used for manual workareas                                530432 bytes
over allocation count                                                  1118    --实例启动后,发生的分配次数,如果这个值大于0,就要考虑增加pga的值
bytes processed                                                   114895872 bytes
extra bytes read/written                                            4608000 bytes
cache hit percentage                                                  96.14 percent    --命中率

16 rows selected.

--V$PGA_TARGET_ADVICE

SQL> SELECT round(PGA_TARGET_FOR_ESTIMATE/1024/1024) target_mb,
   ESTD_PGA_CACHE_HIT_PERCENTAGE cache_hit_perc,
   ESTD_OVERALLOC_COUNT
   FROM v$pga_target_advice;

The output of this query might look like the following:

TARGET_MB   CACHE_HIT_PERC ESTD_OVERALLOC_COUNT
---------- -------------- --------------------
63       23          367
125        24          30
250        30          3
375        39          0
500        58          0
600        59          0
700        59          0
800        60          0
900        60          0
1000    61          0
1500    67          0
2000    76          0
3000    83          0
4000    85          0

可以看出当TARGET_MB 为375M是ESTD_OVERALLOC_COUNT=0,所以我们可以将PGA_AGGREGATE_TARGET设置成375M。

<think>好的,我现在需要回答用户关于PGA(可编程门阵列)的问题。首先,用户提到可能与PGA相关,但缺乏上下文,所以我要先确认PGA的定义和基本概念。 首先,PGA的全称是Programmable Gate Array,即可编程门阵列。根据我的知识,PGA属于FPGA(现场可编程门阵列)的一种类型,或者可能用户将两者混淆了。需要明确两者的区别和联系。可能PGA和FPGA在某些文献中被交替使用,但严格来说,FPGA是更常见的术语。我需要确认这一点,避免给出错误信息。 接下来,我应该解释PGA的基本结构和工作原理。例如,PGA由可编程逻辑块、互连资源和I/O单元组成,用户可以通过编程配置这些资源来实现特定的电路功能。这里需要确保技术术语的准确性,比如逻辑块、查找表(LUT)、触发器、可编程互连等。 然后,需要提到PGA的应用领域,比如数字电路设计、原型验证、嵌入式系统等。同时,可能需要比较PGA与ASIC(专用集成电路)的优势和劣势,比如灵活性、开发周期、成本等方面。 用户的问题可能还涉及到PGA的编程方式,比如使用硬件描述语言(HDL)如Verilog或VHDL,以及综合工具将代码转换为配置位流。此外,可能需要提到常见的PGA厂商,如Xilinx和Intel(原Altera),但要注意这些厂商主要生产FPGA,所以需要澄清术语是否一致。 在回答过程中,需要遵循用户给出的系统级指令:使用中文,数学公式用$...$和$$...$$格式,正确使用LaTeX语法,生成相关问题。同时,确保回答结构清晰,分点说明,帮助用户逐步理解。 可能还需要检查是否有引用需求。用户提供的引用标识示例中,引用了快速排序的相关内容,但当前问题涉及PGA,可能需要引用相关文献或资料。不过由于用户没有提供具体的引用来源,这里可能需要省略引用,或者假设某些常识内容不需要引用。 最后,生成的相关问题需要围绕PGA展开,比如工作原理、与FPGA的区别、应用场景、设计流程等。确保问题具有针对性,能够帮助用户进一步探索该主题。 现在需要组织这些思路,形成结构化的回答,并确保符合所有格式要求。同时,要避免使用Markdown,保持自然的中文表达,分步骤解释,并在末尾添加相关问题。</think>### 关于PGA(可编程门阵列)的解析 PGA(Programmable Gate Array,可编程门阵列)是一种可通过编程配置实现定制数字电路功能的半导体器件。它由可编程逻辑单元、互连资源和输入输出模块组成,允许用户根据需求设计专用电路,兼具灵活性和高性能[^1]。 #### 核心特点 1. **可重构性** PGA的逻辑功能可通过硬件描述语言(如Verilog/VHDL)定义,经综合工具生成配置位流(bitstream)后加载到器件中。例如,一个加法器电路可表示为: ```verilog module adder(input [3:0] a, b, output [4:0] sum); assign sum = a + b; endmodule ``` 2. **并行计算能力** 与CPU顺序执行不同,PGA的电路可并行运行。例如,两个独立乘法运算$z_1 = x_1 \times y_1$和$z_2 = x_2 \times y_2$可在同一时钟周期内完成。 3. **低延迟处理** 信号传输路径通过硬件直接实现,避免了软件栈开销。例如,图像滤波算法的延迟可降低至微秒级。 #### 与FPGA的关系 - **术语差异**:FPGA(Field-Programmable Gate Array,现场可编程门阵列)是更通用的名称,强调“现场可编程”(即用户可自行配置),而PGA有时指早期或特定类型的可编程器件。 - **技术演进**:现代FPGA集成更多资源(如DSP模块、高速串行接口),而传统PGA可能功能较基础。 #### 典型应用场景 - **通信系统**:实现5G基带信号处理中的FFT运算 - **嵌入式加速**:在自动驾驶中实时处理传感器数据 - **原型验证**:ASIC设计前的功能仿真
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值