系统启动分spfile和 pfile两种,spfile方式可以动态修改SGA相关参数,如 sga_max_size,shared_pool_size等。查看ORACLE启动方式,打如下命令:
SQL> show parameter spfile
如果为空则是从pfile启动,有值就是从spfile启动的!
修改sga_max_size命令alter system set sga_max_size=500M scope=spfile;
动态修改JAVA_POOL_SIZE和SHARED_POOL_SIZE;
alter system set shared_pool_size=50331648 scope=both
查询共享池:
show parameter shared_pool
由于共享池过小,导致数据库性能降低,现在把更改方法总结一下,以便以后查阅
A.sga(指定数据库启动时分配的内存大小)空间已满
1.以DBA身份进入控制台
2.在管理->例程->内存参数中,更改SGA大小
3.重启数据库后再次以DBA进入控制台,更改共享池大小
4.再次重启数据库
B.sga空间足够:直接更改共享池大小就可以了
可以用命令更改:进入sqlplus执行alter system set shared_pool_size=10M。(设置成需要的大小)
更改后要重启数据库哦!
查询数据库的SGA:select * from v$sga;
查询剩余内存:用总内存减去当前大小,语句如下:
SELECT (
(SELECT SUM(value) FROM V$SGA) -(SELECT CURRENT_SIZE FROM V$SGA_DYNAMIC_FREE_MEMORY)
) "SGA_TARGET"
FROM DUAL;
Oracle10g 管理系统全局区(SGA)
SGA中包含了多个内存组件(component),每一组件都可以被看作为一个内存池,用于满足特定类型的内存分配请求。举例来说,内存组件中包括共享池(sharedpool)(为 SQL 及 PL/SQL 的执行分配内存),Java 池(java pool)(为 Java 对象及 Java程序的执行分配内存),及数据缓存区(buffer cache)(用于缓存磁盘上的数据块)等。所有 SGA组件都是以预设的粒度(granule)为单位进行内存的分配与回收的。Oracle 数据库通过记录每个 SGA组件使用的粒度单位的数量来掌握整个 SGA 的内存使用情况。
粒度单位的大小是由整个 SGA 的容量决定的。在大多数平台下,当 SGA的容量小于 1GB 时,一个粒度单位为 4MB;当 SGA 的容量大于 1GB 时,一个粒度单位则为16MB。但也有些平台例外。例如,在 32 位的 Windows 平台下,当 SGA 的容量大于 1GB 时,一个粒度单位为8MB。
用户可以设定Oracle 数据库实例的 SGA 能够使用的内存总数量。Oracle在启动一个实例之初只会为此实例分配最小所需内存,而在实例运行期间可以通过扩展各个 SGA 组件来为实例提供更多内存,SGA所使用内存的上限由SGA_MAX_SIZE初始化参数决定。在实例初始化时,如果初始化参数文件(initialization parameterfile)或服务器参数文件(server parameter file)中SGA_MAX_SIZE 的值小于 Oracle 为 SGA 各组件分配的内存之和(为 SGA各组件分配的内存数量是依据参数文件中的显式设定值或系统的默认值),Oracle 将忽略SGA_MAX_SIZE 参数。
为了优化系统性能,整个 SGA 的容量应与实际内存数量相符。如果因 SGA过大而需要使用虚拟内存(virtual memory)时,数据库的系统性能将显著下降。因为此时操作系统需要对 SGA中的部分内容进行分页(page)(即在磁盘上进行读写操作)。SGA 中各个内存组件的容量会对数据库系统的性能有所影响。
SGA 的容量是由多个初始化参数决定的。下表显示了主要的参数:
参数 | 描述 |
DB_CACHE_SIZE | 标准容量数据块(standard block)使用的缓存区的容量。 |
LOG_BUFFER | 重做日志缓冲区(redo log buffer)的容量,以字节(byte)为单位。 |
SHARED_POOL_SIZE | 存储共享 SQL 及 PL/SQL 的内存容量,以字节(byte)为单位。 |
LARGE_POOL_SIZE | 大型池(large pool)的容量。默认值为 0。 |
JAVA_POOL_SIZE | Java 池(Java pool)的容量。 |