我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
Oracle共享池:数据库内存管理的"心脏"
如果把Oracle数据库比作一个人,那么共享池(SGA)就相当于它的"心脏",负责为整个系统输送"养分"(内存资源)。这个"心脏"要不大不小刚刚好——太小了会供血不足,太大了又会增加负担。
共享池是干什么的?
想象一下,你每次去图书馆查资料:
- 第一次查《三体》,需要花时间从书架上找
- 第二次再查《三体》,图书管理员直接就从手边拿给你了
共享池就是Oracle的"管理员工作台",它会把:
- 经常执行的SQL语句(就像热门书籍)
- PL/SQL程序代码(像常用的工具书)
- 数据库字典信息(像图书目录)
都放在手边,随用随取。
最常见的"心脏病":不用绑定变量
这就像每次借书都要重新编目:
- “我要借《三体》第一册”
- “我要借《三体》第二册”
- “我要借《三体》第三册”…
虽然都是《三体》,但因为编号不同,管理员每次都要重新查找。正确的做法应该是:
-- 不好的写法
SELECT * FROM books WHERE title='三体1';
SELECT * FROM books WHERE title='三体2';
-- 好的写法(使用绑定变量)
SELECT * FROM books WHERE title=:book_name;
真实案例:每天重启的数据库
有个客户的数据库就像个"心脏病患者":
- 共享池设了1GB(比实际需要大10倍)
- 每天必须重启一次,否则就会"心肌梗塞"
- 还想买更多服务器"强心针"
我们给出的"治疗方案"很简单:
- 教会应用程序使用绑定变量
- 把共享池从1GB降到100MB
- 结果:系统跑得比原来还快,再也不用每天重启了
其他重要"器官"
除了共享池,Oracle还有几个关键内存区:
-
大池:专门处理"大件物流"
- 共享服务器连接
- 并行查询
- 就像物流公司的"大件物品专用通道"
-
Java池:Java程序的"VIP包厢"
- 跑Java存储过程的地方
- 专用服务器模式下很小
- 共享服务器模式下需要更大空间
-
流池:数据复制的"快递中心"
- 给GoldenGate/Streams等工具用
- 默认会占用共享池10%空间
- 用了这些工具记得单独设置
-
内存列存储:分析查询的"加速器"(需额外付费)
- 像给每列数据都建了索引
- 21c开始有免费基础版(限16GB)
健康小贴士
想让你的Oracle"心脏"健康跳动,记住:
- 一定要用绑定变量——这是最好的"保健品"
- 共享池不是越大越好——合适最重要
- 特殊功能(如Java、流复制)要配置专用内存区
- 定期检查"心电图"(监控共享池使用情况)
只要遵循这些原则,你的数据库就能拥有强健的"心脏",长久稳定地运行!
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
优快云地址: (https://blog.youkuaiyun.com/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)