重庆思庄Oracle、KingBase、PostgreSQL、Redhat认证学习论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 313|回复: 0
打印 上一主题 下一主题

[参数设置] shared_pool的默认值计算

[复制链接]
跳转到指定楼层
楼主
发表于 2026-1-3 18:09:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1. 默认值规则
--------Oracle 9i及以前版本------------

    没有明确的默认值

    通常从 shared_pool_size 参数显式设置

--------Oracle 10g及以后版本----------

-- 默认值规则:
-- 如果使用自动内存管理(AMM):
--   MEMORY_TARGET 或 MEMORY_MAX_TARGET 已设置
--   则 shared_pool_size 默认为 0(自动管理)

-- 如果使用自动共享内存管理(ASMM):
--   SGA_TARGET 已设置
--   则 shared_pool_size 默认为 0(自动管理)

-- 如果手动管理SGA:
--   则 shared_pool_size 需要显式设置

2. 查看当前值的方法
-----------查看当前设置------------
sql

-- 查看当前shared_pool_size
SELECT name, value/1024/1024 "Size(MB)", isdefault
FROM v$parameter
WHERE name = 'shared_pool_size';

-- 或者
SHOW PARAMETER shared_pool_size;

-- 查看详细内存分配
SELECT * FROM v$sgainfo WHERE name LIKE '%Shared Pool%';

-- 查看共享池使用情况
SELECT pool, name, bytes/1024/1024 "Size(MB)"
FROM v$sgastat
WHERE pool = 'shared pool'
ORDER BY bytes DESC;

查看是否自动管理
sql

-- 检查内存管理模式
SELECT name, value
FROM v$parameter
WHERE name IN (
  'memory_target',
  'memory_max_target',
  'sga_target',
  'sga_max_target'
);

-- 判断是否自动管理:
-- 如果 memory_target > 0 → AMM启用
-- 如果 sga_target > 0 且 memory_target=0 → ASMM启用
-- 如果都为0 → 手动管理


3.不同版本的具体默认值
Oracle 11g/12c/19c:

-- 安装时的默认计算规则(如果未设置):
-- 对于64位系统,通常为:
--   SGA_TARGET <= 1GB: shared_pool ≈ SGA的50%
--   SGA_TARGET 1-8GB:  shared_pool ≈ 512MB
--   SGA_TARGET > 8GB:  shared_pool ≈ SGA的10%(最大到2GB)

-- 实际典型默认值:
--   OLTP系统:通常 400MB - 1GB
--   数据仓库:可能更大


Oracle 21c:

-- 默认值可能更大,适应现代硬件
-- 典型范围:1GB - 4GB

4. 操作系统相关默认值

Linux 64位
-- 物理内存 vs SGA vs Shared Pool 的关系
-- 物理内存    SGA默认     Shared Pool默认
--  8GB        2-3GB       500MB-800MB
--  16GB       4-8GB       1GB-1.6GB
--  32GB       8-16GB      2GB-3.2GB
--  64GB       16-32GB     4GB-6.4GB

Windows
-- 通用模板:shared_pool_size = 150MB
-- 数据仓库:shared_pool_size = 300MB
-- OLTP:shared_pool_size = 200MB

-- 实际通过DBCA创建时会根据物理内存动态计算


5. DBCA创建的数据库默认值
不同模板的默认值
sql

-- 通用模板:shared_pool_size = 150MB
-- 数据仓库:shared_pool_size = 300MB
-- OLTP:shared_pool_size = 200MB

-- 实际通过DBCA创建时会根据物理内存动态计算

DBCA计算示例
bash

# DBCA计算公式(近似)
total_memory = 物理内存
shared_pool_size =
  CASE
    WHEN total_memory <= 1GB THEN 80MB
    WHEN total_memory <= 4GB THEN total_memory * 0.1
    WHEN total_memory <= 16GB THEN 400MB
    ELSE total_memory * 0.05
  END

6. 如何确定合适的值
监控共享池使用
sql

-- 检查共享池使用率
SELECT
  ROUND(SUM(bytes)/1024/1024, 2) "Total(MB)",
  ROUND(SUM(bytes - CASE name WHEN 'free memory' THEN bytes ELSE 0 END)/1024/1024, 2) "Used(MB)",
  ROUND(SUM(CASE name WHEN 'free memory' THEN bytes ELSE 0 END)/1024/1024, 2) "Free(MB)",
  ROUND((SUM(bytes - CASE name WHEN 'free memory' THEN bytes ELSE 0 END) / SUM(bytes)) * 100, 2) "Usage(%)"
FROM v$sgastat
WHERE pool = 'shared pool';

-- 检查库缓存命中率
SELECT
  1 - (SUM(reloads) / SUM(pins)) "Library Cache Hit Ratio"
FROM v$librarycache
WHERE namespace IN ('SQL AREA', 'TABLE/PROCEDURE', 'BODY', 'TRIGGER');

-- 检查空闲内存是否充足
SELECT * FROM v$sgastat
WHERE pool = 'shared pool'
AND name = 'free memory'
AND bytes < 100*1024*1024;  -- 少于100MB

根据负载类型调整
sql

-- OLTP系统(大量小事务)
-- shared_pool_size = SGA的15-20%

-- 数据仓库(复杂查询)
-- shared_pool_size = SGA的25-35%

-- 混合负载
-- shared_pool_size = SGA的20-25%

7. 调整建议
自动管理(推荐)
sql

-- 启用自动共享内存管理
ALTER SYSTEM SET SGA_TARGET = 4G SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_POOL_SIZE = 0;  -- 设为0让Oracle自动管理

-- 或启用自动内存管理
ALTER SYSTEM SET MEMORY_TARGET = 8G SCOPE=SPFILE;
ALTER SYSTEM SET SHARED_POOL_SIZE = 0;
ALTER SYSTEM SET SGA_TARGET = 0;

手动设置(特殊情况)
sql

-- 如果必须手动设置
-- 计算当前合理值
SELECT
  ROUND(SUM(bytes)/1024/1024) current_mb,
  ROUND(SUM(bytes)*1.2/1024/1024) suggested_mb
FROM v$sgastat
WHERE pool = 'shared pool';

-- 设置新值
ALTER SYSTEM SET SHARED_POOL_SIZE = 1G SCOPE=SPFILE;

8. 最佳实践建议

    使用自动管理:除非有特殊需求

    监控使用率:保持命中率>95%

    避免频繁调整:稳定比最优值更重要

    考虑保留区:
    sql

-- 设置共享池保留区
ALTER SYSTEM SET SHARED_POOL_RESERVED_SIZE = 50M;

-----
总结:

精确的默认值不存在,它取决于:

    ✅ Oracle版本

    ✅ 安装方式(DBCA vs 手动)

    ✅ 内存管理模式(AMM/ASMM/手动)

    ✅ 物理内存大小

    ✅ 数据库模板选择

实际工作中:使用自动管理让Oracle动态调整,定期监控命中率和使用情况即可。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 支持支持 反对反对
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|重庆思庄Oracle、Redhat认证学习论坛 ( 渝ICP备12004239号-4 )

GMT+8, 2026-4-17 20:09 , Processed in 0.234614 second(s), 24 queries .

重庆思庄学习中心论坛-重庆思庄科技有限公司论坛

© 2001-2020

快速回复 返回顶部 返回列表