我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢! 由于博客中有大量代码,通过页面浏览效果更佳。

本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。

Oracle数据库连接与进程的奥秘

数据库背后的"工人团队"

想象Oracle数据库就像一个大型工厂,里面有各种"工人"(进程)在忙碌工作。这些工人主要分为三类:

  1. 服务器进程:直接处理我们提交的SQL请求,就像生产线上的操作工
  2. 后台进程:默默维护数据库运行的"后勤人员",负责写数据、清理垃圾等
  3. 从属进程:给其他工人打下手,协助完成特定任务

两种工作模式:专属服务 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;

实际应用中的智慧

  1. AUTOTRACE的秘密:当你在SQL*Plus中使用AUTOTRACE时,系统会自动创建第二个会话来监控统计信息,避免"观察行为影响被观察对象"。
  2. 共享服务的轮换机制:在共享服务模式下,你的SQL可能会被不同服务进程处理,就像银行不同柜员接力为你服务。
  3. 连接池技术:现代应用常用DRCP(数据库驻留连接池),兼具专属服务的性能和共享服务的资源效率。

理解这些机制,就像掌握了数据库的"工作流程",能帮助我们:

  • 更合理地设计应用连接方式
  • 更精准地诊断性能问题
  • 更有效地配置数据库资源

记住,数据库就像精密的钟表,每个齿轮(进程)都有其存在的意义,只有协同配合才能准确报时。

------------------作者介绍-----------------------

姓名:黄廷忠 现就职:Oracle中国高级服务团队 曾就职:OceanBase、云和恩墨、东方龙马等 电话、微信、QQ:18081072613

个人博客: (http://www.htz.pw)

CSDN地址: (https://blog.csdn.net/wwwhtzpw)

博客园地址: (https://www.cnblogs.com/www-htz-pw)

读书笔记:Oracle数据库连接与进程的奥秘_SQL