我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
Oracle数据库连接与进程的奥秘
数据库背后的"工人团队"
想象Oracle数据库就像一个大型工厂,里面有各种"工人"(进程)在忙碌工作。这些工人主要分为三类:
- 服务器进程:直接处理我们提交的SQL请求,就像生产线上的操作工
- 后台进程:默默维护数据库运行的"后勤人员",负责写数据、清理垃圾等
- 从属进程:给其他工人打下手,协助完成特定任务
两种工作模式:专属服务 vs 共享服务
专属服务模式
就像VIP客户的私人管家:
- 每个客户连接都有专属的服务进程
- 一对一服务,响应快速直接
- 适合高负载、长时间运行的操作
# 查看专属服务进程示例
$ sqlplus / as sysdba
SQL> select a.spid dedicated_server, b.process clientpidfrom v$process a, v$session bwhere a.addr = b.paddrand b.sid = sys_context('userenv','sid');
共享服务模式
更像是银行柜台服务:
- 多个客户共享一组服务进程
- 通过"调度员"(dispatcher)分配任务
- 适合大量短时连接,节省资源
-- 配置共享服务示例
ALTER SYSTEM SET shared_servers=4;
ALTER SYSTEM SET dispatchers="(protocol=TCP)(dispatchers=3)";
连接与会话:不是一回事!
很多人容易混淆这两个概念:
- 连接:就像电话线,是物理通道
- 会话:相当于通话内容,是逻辑概念
有趣的是:
- 一条电话线(连接)可以多次通话(会话)
- 一次通话(会话)可能换多条电话线(如共享服务)
- 电话线可以空闲(连接无会话)
-- 查看当前会话信息
SELECT username, sid, serial#, server, status
FROM v$session
WHERE username = USER;
实际应用中的智慧
- AUTOTRACE的秘密:当你在SQL*Plus中使用AUTOTRACE时,系统会自动创建第二个会话来监控统计信息,避免"观察行为影响被观察对象"。
- 共享服务的轮换机制:在共享服务模式下,你的SQL可能会被不同服务进程处理,就像银行不同柜员接力为你服务。
- 连接池技术:现代应用常用DRCP(数据库驻留连接池),兼具专属服务的性能和共享服务的资源效率。
理解这些机制,就像掌握了数据库的"工作流程",能帮助我们:
- 更合理地设计应用连接方式
- 更精准地诊断性能问题
- 更有效地配置数据库资源
记住,数据库就像精密的钟表,每个齿轮(进程)都有其存在的意义,只有协同配合才能准确报时。
------------------作者介绍-----------------------
姓名:黄廷忠 现就职:Oracle中国高级服务团队 曾就职:OceanBase、云和恩墨、东方龙马等 电话、微信、QQ:18081072613
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)