connection session process的聯絡與區別
連線並不是會話的同義詞,發現這一點時很多人都很詫異。在大多數人眼裡,它們都是一樣的,但事實上並不一定如此。在一條連線上可以建立0個、一個或多個會話。各個會話是單獨而且獨立的,即使它們共享同一條資料庫物理連線也是如此。一個會話中的提交不會影響該連線上的任何其他會話。實際上,一條連線上的各個會話可以使用不同的使用者身份!
在Oracle中,連線只是客戶程式和資料庫例項之間的一條特殊線路,最常見的就是網路連線。這條連線可能連線到一個專用伺服器程式,也可能連線到排程器。如前所述,連線上可以有0個或多個會話,這說明可以有連線而無相應的會話。另外,一個會話可以有連線也可以沒有連線。使用高階Oracle Net特性(如連線池)時,客戶可以刪除一條物理連線,而會話依然保留(但是會話會空閒)。客戶在這個會話上執行某個操作時,它會重新建立物理連線。下面更詳細地定義這些術語:
? 連線(connection):連線是從客戶到Oracle例項的一條物理路徑。連線可以在網路上建立,或者透過IPC機制建立。通常會在客戶程式與一個專用伺服器或一個排程器之間建立連線。不過,如果使用Oracle的連線管理器(Connection Manager ,CMAN),還可以在客戶和CMAN之間以及CMAN和資料庫之間建立連線。CMAN的介紹超出了本書的範圍,不過Oracle Net Services Administrator’s Guide(可以從免費得到)對CMAN有詳細的說明。
? 會話(session):會話是例項中存在的一個邏輯實體。這就是你的會話狀態(session state),
也就是表示特定會話的一組記憶體中的資料結構。提到“資料庫連線”時,大多數人首先想到的就是“會話”。你要在伺服器中的會話上執行SQL、提交事務和執行儲存過程。
簡單地說,連線和會話之間有一種多對多的關係。不過,最常見的是專用伺服器與單一會話之間的一對一關係,這也是大多數人每天所看到的情況。
A process is a physical process or thread.
On unix, you can see a process with "ps" for example. It is there.
There are many types of processes in Oracle -- background processes like SMON, PMON,
RECO, ARCH, CKPT, EMNn, DBWR, etc..... And user processes like dedicated servers or
shared server (multi-threaded server -- aka MTS -- configuration)
每個sql login稱為一個連線(connection),而每個連線,可以產生一個或多個會話,如果資料庫執行在專用伺服器方式,一個會話對應一個伺服器程式(process),
如果資料庫執行在共享伺服器方式,一個伺服器程式可以為多個會話服務。
在dedicated server機器上的測試如下:
資料庫的session和作業系統process是對應的。
這表示一個session對應一個process,但是一個process未必對應一個session。
大家可以透過SELECT spid
FROM v$process
WHERE NOT EXISTS ( SELECT 1
FROM v$session
WHERE paddr = addr); 檢視
或
SQL> select count(*) from v$process;
COUNT(*)
----------
53
SQL> select count(*) from v$session;
COUNT(*)
----------
50
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7548/viewspace-1049940/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- cookie與session的區別與聯絡CookieSession
- Session與Cookie的區別與聯絡SessionCookie
- 【Python入門必看】Python中Cookie和Session的區別與聯絡!PythonCookieSession
- JRE與JDK的區別與聯絡JDK
- Kafka與ActiveMQ的區別與聯絡詳解KafkaMQ
- 詳解Kafka與ActiveMQ的區別與聯絡!KafkaMQ
- B/S與C/S的聯絡與區別
- javaSE中的==和equals的聯絡與區別Java
- HDFS 塊和 Input Splits 的區別與聯絡
- 程式和執行緒的區別與聯絡執行緒
- 感知器、logistic與svm 區別與聯絡
- ipv4與ipv6的聯絡與區別
- jQuery與JavaScript與ajax三者的區別與聯絡jQueryJavaScript
- 簡述Spring容器與SpringMVC的容器的聯絡與區別SpringMVC
- KPI vs OKR:區別與聯絡的終極指南KPIOKR
- Vue中watch、computed與methods的聯絡和區別Vue
- 單機、分散式、叢集的區別與聯絡分散式
- SCADA和PLC的區別聯絡
- session與cookie的區別SessionCookie
- 陣列地址與指標之間的區別與聯絡陣列指標
- Python中__new__和__init__的區別與聯絡Python
- 叢集、負載均衡、分散式的區別與聯絡負載分散式
- 淺析HTML、CSS、JavaScript之間的聯絡與區別!HTMLCSSJavaScript
- Instruction和Question的區別和聯絡Struct
- http、socket、tcp的區別和聯絡?HTTPTCP
- 如何區分 Connection、Thread和SessionthreadSession
- ARM晶片、核心、架構、指令集的聯絡與區別晶片架構
- Unicode,UTF-8和UTF-16的區別與聯絡Unicode
- 一文搞懂灰度釋出與 AB Test 的聯絡與區別
- tcp/ip和http的區別和聯絡TCPHTTP
- Nodejs中process.cwd()與__dirname的區別NodeJS
- 跟你深入剖析可迭代物件和迭代器的區別與聯絡物件
- `std::packaged_task`、`std::thread` 和 `std::async` 的區別與聯絡Packagethread
- 可觀測性與傳統監控的區別和聯絡
- 先驗概率與後驗概率、貝葉斯區別與聯絡
- annotation之context:annotation-config與 context:component-scan的區別與聯絡Context
- 大資料分析與機器學習之間的區別與聯絡大資料機器學習
- Rxjs map, mergeMap 和 switchMap 的區別和聯絡JS
- cookie和session的詳解與區別CookieSession