- 浏览: 80830 次
- 性别:
- 来自: 北京
-
最新评论
-
streamsong:
王雨尘 写道
的确是说索引是排序的,我漏掉啦
我们为什么要用索引,用索引为什么比不用索引快 -
heerwa:
...
我们为什么要用索引,用索引为什么比不用索引快 -
liulanghan110:
那么用索引为什么会提高性能呢?因为索引(以B树索引为例)是树状 ...
我们为什么要用索引,用索引为什么比不用索引快 -
王雨尘:
我们为什么要用索引,用索引为什么比不用索引快 -
pangpang514:
居然和强哥合影过。。。。佩服!
我们为什么要用索引,用索引为什么比不用索引快
今天在给库户数据库健康检查的时候,发现个很奇怪的问题,SGA_TARGET参数的值竟然大于SGA_MAX_SIZE参数的值。
NAME TYPE VALUE
------------------------------------ ----------- -----
sga_max_size big integer 1984M
sga_target big integer 2000M
大家应该都知道SGA_MAX_SIZE是ORACLE可用的最大SGA,SGA_TARGET是ORACLE自动管理的SGA,SGA_TARGET可以小于等于SGA_MAX_TARGET,但不能大于SGA_MAX_SIZE,即使可以大于SGA_MAX_SIZE,也是没有意义的,所以这个现象应该是不会出现的才对,我做了些实验,也没有模拟出来。
SQL> show parameter sga_
NAME TYPE VALUE
---------------------- -------------------- ----------
sga_max_size big integer 300M
sga_target big integer 300M
我的数据库现在SGA_MAX_SIZE和SGA_TARGET参数的值都是300M,现在将SGA_TARGET的值改为350M,如果直接修改肯定会报错。
SQL> alter system set sga_target=350M;
alter system set sga_target=350M
*
第 1 行出现错误:
ORA-02097: 无法修改参数, 因为指定的值无效
ORA-00823: 指定的 sga_target 的值大于 sga_max_size
如果指定SCOPE=SPFILE,重启数据库后,如果是10g的数据库,SGA_MAX_TARGET参数的值也会被更改为350M,如果是11g的数据库,会报ORA-00823错误,下面是10g的数据库修改SGA_TARGET参数情况。
SQL> show parameter sga_
NAME TYPE VALUE
------------------------------------ ----------- --------
sga_max_size big integer 300M
sga_target big integer 300M
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 – Production
SQL> alter system set sga_target=350M scope=spfile;
System altered.
SQL> startup force
ORACLE instance started.
Total System Global Area 368263168 bytes
Fixed Size 1374668 bytes
Variable Size 239076916 bytes
Database Buffers 121634816 bytes
Redo Buffers 6176768 bytes
Database mounted.
Database opened.
SQL> show parameter sga_
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
sga_max_size big integer 350M
sga_target big integer 350M
下面是11g数据库修改SGA_TARGET参数情况。
SQL> select * from v$version;
BANNER
-----------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for 32-bit Windows: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production
SQL> alter system set sga_target=350M scope=spfile;
系统已更改。
SQL> startup force;
ORA-00823: Specified value of sga_target greater than sga_max_size
可是客户的数据库为什么SGA_TARGET的值会大于SGA_MAX_SIZE呢?这应该是和ORACLE的granule(粒度)有关系,granule是ORACLE内存中的一片连续区域,是连续虚拟内存分配的单位,粒度是9i新引入的参数,其大小取决于SGA_MAX_SIZE参数所定义的SGA总的大小,9i的数据库,linux环境下,SGA_MAX_SIZE<128MB的时候,一个granule是4M,SGA_MAX_SIZE>128MB的时候,一个granule是16M,32位的Windows环境下,SGA_MAX_SIZE<128MB的时候,一个granule是4M,SGA_MAX_SIZE>128MB的时候,一个granule是8M。10g的数据库,linux环境下,SGA_MAX_SIZE<1g的时候,一个granule是4M,SGA_MAX_SIZE>1g的时候,一个granule是16M,32位的Windows环境,SGA_MAX_SIZE<1g的时候,一个granule是4M,SGA_MAX_SIZE>1g的时候,一个granule是16M,granule受隐含参数“_ksmg_granule_size控制,建议不要修改,ORACLE在分配内存的时候,是以granule为单位比如,即使手工设置的shared pool大小不是granule的整数倍,ORACLE会自动设置为granule的整数倍,例如:
SQL> select name,bytes from v$sgainfo where name in('Shared Pool Size','Granule
Size');
NAME BYTES
-------------------------------- ----------
Shared Pool Size 192937984
Granule Size 4194304
我的数据库granule大小为4M,shared pool为184M,设置shared pool 为185M,ORACLE将自动将shared pool 设置为188M。
SQL> alter system set shared_pool_size=185M;
系统已更改。
SQL> show parameter shared_pool_size
NAME TYPE VALUE
------------------------ -------------------- ----------
shared_pool_size big integer 188M
我们的这个客户是64位的linux,ORACLE10gR2数据库,SGA大于1984M,granule是16M。
SQL> show parameter sga_
NAME TYPE VALUE
------------------------------------ ----------- -----
sga_max_size big integer 1984M
sga_target big integer 2000M
SQL> select name,bytes/1024/1024 from v$sgainfo where name=’ Granule Size';
NAME BYTES
-------------------------------- ----------
Granule Size 16
SGA_MAX_SIZE也是16M的整数倍,为什么SGA_TARGET会比SGA_MAX_SIZE大一个granule呢? 查看客户的参数文件,里面只有SGA_TARGET=2097152000,并没有SGA_MAX_SIZE参数的设置,按理说SGA_MAX_SIZE参数的值应该会自动设置和SGA_TARGET一样才对。而且AWR显示虽然SGA_TARGET比SGA_MAX_SIZE大了一个granule,但这是没有意义的,数据库真实用到的SGA并你没有超过SGA_MAX_SIZE的限制。
至于为什么客户的这个数据库SGA_TARGET回比SGA_MAX_SIZE的值大,我想可能是和ORACLE的内部算法有关系,或者,ORACLE算错数了!!!!
发表评论
-
将博客搬至CSDN
2013-12-06 15:49 56将博客搬至CSDN -
博客地址更换通知
2012-09-29 09:23 618自2011年8月,博客使用新地址www.dbdream.org ... -
如何追踪其他SESSION会话信息
2012-02-21 20:35 1312今天测试说在加载条目数据、校验数据和质检数据的时候很慢, ... -
SHM不足导致导致数据库宕机
2012-02-21 20:17 1264今天早上到办公室,开发说测试环境应用程序挂掉,看日志说是连接不 ... -
PCTFREE和PCTUSED及将LOB存到行外
2012-02-17 11:14 1459今天的ADDM报告建议重建存放图片的表并增大PCTFREE,这 ... -
利用闪回、logmnr找回误删除的数据
2011-10-25 23:54 1269朋友遇到了非常经典的ORACLE事故——误删除,开发人员告诉他 ... -
ORACLE随机取数据
2011-10-25 23:53 935目前负责的这个数字化项目,需要开发个质检工具,实现每次随机取2 ... -
oracle将一行拆分为多行
2011-10-12 00:51 2163客户的业务涉及大量的图片信息,之前这些图片信息只在数据库里存着 ... -
ORA-01034、ORA-27101和ORA-28056错误解决方法
2011-10-11 00:40 2256今天登录数据库的时候遇到了ORA-01034和ORA-2710 ... -
查看某个用户下的所有空表
2011-10-09 15:01 1068今天在群里有人问如何 ... -
SQL*LOADER加载图片、TXT
2011-10-09 15:02 1109朋友打电话问我如何利 ... -
oracle10gR2新特性--透明加密(TDE)
2011-10-09 15:02 1969从10gR2开始,oracle推出了透明数据加密技术(Tran ... -
NAMES.DIRECTORY_PATH客户端连接参数
2011-10-08 22:38 3873今天在做oracle10gR2新特性透明加密(TDE)的时候, ... -
tnsping通却连接不上数据库
2011-10-08 22:26 2451今天在Windows XP上装可个11gR2数据库,却出现个很 ... -
ORACLE字符集检查工具CSSCAN
2011-10-08 22:22 1826我们在创建数据库的时候,通常会把字符集设置为ZHS16GBK, ... -
SQL*LOADER和外部表加载
2011-10-08 22:17 1346最近一直在用SQL*LOADER加载数据,用外部表也可以实现, ... -
创建本地Duplicate数据库
2011-10-08 22:14 1044Duplicate是RMAN的一个组成部分,利用Duplica ... -
由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN China Tour 2011)“活动已经正式拉开帷幕。
2011-09-01 12:00 803由ACOUG、云和恩墨主办的”Oracle技术嘉年华(OTN ... -
enq: TX - row lock contention
2011-07-19 17:52 1142今天,收到客户的邮件说上周每天早上10点多,数据库都会有很多锁 ... -
ORA-600汇总(上)
2011-07-04 15:28 1285此文转载 http://space.itpub.net/135 ...
相关推荐
7. 如果 SGA_MAX_SIZE 的值太小,需要调整该值,确保其大于等于 SGA_TARGET 的值。 8. 同时,需要注意 MEMORY_TARGET 和 MEMORY_MAX_TARGET 的值是否高于 SGA_MAX_SIZE 的值。 9. 如果报错信息仍然存在,检查数据库...
"Oracle 11g调整物理内存提示...我们还讨论了 Oracle 11g 中的内存管理机制,包括 MEMORY_TARGET、MEMORY_MAX_TARGET 和 SGA_TARGET 三个参数的作用。通过正确地设置这些参数,可以提高 Oracle 数据库的性能和稳定性。
但需要注意,如果未设置SGA_MAX_SIZE或设置值小于SGA_TARGET,SGA_MAX_SIZE将默认等于SGA_TARGET。同时,SGA_TARGET的值不能超过SGA_MAX_SIZE,以防止内存过度分配。 PGA是每个服务进程的私有内存区域,包含了服务...
SGA_MAX_SIZE和SGA_TARGET是两个重要的参数,SGA_MAX_SIZE指定了SGA可以使用的最大内存大小,而SGA_TARGET指定了SGA可以使用的最大内存大小,并可以自动调节各个区域的大小,使之达到系统性能最佳状态的最合理大小。...
- `SGA_MAX_SIZE`:限制SGA的最大使用量,确保所有组件总和不超过这个值。 - `SHARED_POOL_SIZE`、`JAVA_POOL_SIZE`、`LARGE_POOL_SIZE`、`STREAMS_POOL_SIZE`、`DB_CACHE_SIZE`和`LOG_BUFFER`:分别控制相应内存池...
sga_max_size=500M job_queue_processes=10 undo_management=auto undo_tablespace=undotbs audit_file_dest=$ORACLE_BASE/admin/orcl/adump background_dump_dest=$ORACLE_BASE/admin/orcl/bdump core_dump_dest=$...
4.21 SGA_MAX_SIZE 8 4.22 SORT_AREA_RETAINED_SIZE 8 4.23 PGA_AGGREGATE_TARGET 8 4.24 WORKAREA_SIZE_POLICY 9 4.25 SQL_TRACE 9 4.26 TIMED_STATISTICS 9 4.27 DB_CACHE_SIZE 9 4.28 DB_KEEP_CACHE_SIZE 9 4.29 ...
这一特性允许数据库根据实际的处理需求动态地调整内存区域的大小,如sort_area_size、pga_aggregate_target、large_pool_size、sga_max_size和db_cache_size。这些内存区域分别服务于排序操作、PL/SQL程序执行、大...
2. `show parameter sga_target`和`show parameter sga_max_size`分别查看SGA的目标大小和可调范围的最大尺寸。 3. `select name,bytes,resizeable from v$sgainfo`显示SGA各个组件的大小及是否可调整。 4. `select ...
ORACLE修改SGA后无法启动的临时解决方法.比较实用的东西
调整SGA大小通常涉及修改Oracle的初始化参数文件(init.ora或spfile),增加`sga_target`或`sga_max_size`的值。重启数据库实例后,调整才会生效。同时,可能需要降低其他内存组件(如PGA或Large Pool)的大小,...
例如,`SGA_MAX_SIZE`用于设定SGA的最大大小,`DB_CACHE_SIZE`控制数据缓冲区的大小,`SHARED_POOL_SIZE`设定共享池的大小。需要根据系统负载、表空间大小和并发用户数量等实际情况进行调整。 2. **自动内存管理**...
- 调整`SGA_MAX_SIZE`、`sga_target`、`pga_aggregate_target`等参数以适应工作负载。 - 监控SGA各个组件的利用率,如Buffer Cache命中率,优化数据缓冲区大小。 - 分析PGA使用情况,防止内存不足导致的性能问题...
为了调整Buffer Cache的大小,可以先设置SGA的最大大小`sga_max_size`,然后再设置目标大小`sga_target`。例如,可以执行如下SQL命令: ```sql alter system set sga_max_size = 24G scope = both; alter system set...
2. **内存调整**:增加数据库服务器的内存大小或者调整数据库的内存分配参数,比如Oracle的`pga_aggregate_target`和`sga_target`,SQL Server的`max_server_memory`。这能允许数据库在内存中存储更多数据,减少对...
3. **memory_max_target** 和 **memory_target**:这两个参数控制整个数据库实例的内存使用。memory_max_target是允许的最大内存,而memory_target则是自动调整的内存目标。 4. **db_cache_size**:数据库缓存大小...
调整优化模式optimizer_max_permutations 14 并行优化 14 parallel_adaptive_multi_user: 14 Parallel_automatic_tuning: 14 参数parallel_max_servers_parameter 14 parallel_threads_per_cpu: 15 parallel_max_...
例如,`SGA_MAX_SIZE`控制共享全局区的最大大小,`DB_BLOCK_SIZE`定义数据块的大小,而`PROCESSES`则限制并发的用户进程数。 如果初始化参数设置得过小,可能会出现以下情况: 1. **性能瓶颈**:例如,如果`pga_...
例如,当系统内存为1GB时,SGA_MAX_SIZE建议设置为400-500MB,随着系统内存的增加,SGA_MAX_SIZE的推荐值也相应增大。 SGA的实际大小可以通过一个公式来估算,该公式涵盖了诸如数据库缓冲区(Database Buffers)、...
- `SGA_MAX_SIZE`:设置SGA的最大大小,包括共享池、数据缓冲区高速缓存、重做日志缓冲区和Java池。 - `SHARED_POOL_SIZE`:分配给共享池的内存,存储PL/SQL代码、SQL语句解析信息等。 - `DB_CACHE_SIZE`:数据...