主頁 > 資料庫 > 會話和連接數

會話和連接數

2020-09-13 06:23:17 資料庫

1 / 9


概念介紹


   通俗來講,會話(Session) 是通信雙方從開始通信到通信結束期間的一個背景關系(Context)。這個背景關系是一段位于服務器端的記憶體:記錄了本次連接的客戶端機器、通過哪個應用程式、哪個用戶登錄等資訊.





   連接(Connection):連接是從客戶端到ORACLE實體的一條物理路徑。連接可以在網路上建立,或者在本機通過IPC機制建立。通常會在客戶端行程與一個專用服務器或一個調度器之間建立連接。





   會話(Session) 是和連接(Connection)是同時建立的,兩者是對同一件事情不同層次的描述。簡單講,連接(Connection)是物理上的客戶端同服務器的通信鏈路,會話(Session)是邏輯上的用戶同服務器的通信互動。





   ORACLE中一個用戶登錄ORACLE服務器的前提,就是該用戶具有ORACLE的 “CREATE SESSION”權限。ORACE允許同一個用戶在同一個客戶機上建立多個同服務器的會話,每個SESSION都代表了用戶與服務器的一個互動。就像你用IE瀏覽器打開博客園網站,然后你再打開一個IE視窗,又打開一個博客園網站。兩個IE視窗就相當于兩個SESSION, 而物理鏈路就相當于連接(Connection)。后臺行程PMON會每隔一段時間,就會檢測用戶連接狀況,如果連接已斷開,PMON會清理現場,釋放相關的資源。


   在一條連接而無相應的會話。另外,一個會話可以有連接也可以沒有連接。使用高級Oracle Net特性(如連接池)時,客戶可以洗掉一條物理連接,而會話依然保留(但是會話會空閑)。客戶在這個會話上執行某個操作時,它會重新建立物理連接。


  在專用服務器中,一個會話對應一個服務器行程(Process),如果資料庫運行在共享服務器方式,一個服務器行程可以為多個會話服務。




     下面用通俗易懂的方式來解釋連接和會話。




 有A/B兩個城市,需要從A運送白菜到B城


 我們先建設一條公路 

2 / 9

 然后運送白菜過去,包括準備白菜和運送白菜以及回傳等一系列的動作。 


 一條公路,可以運送0-n次的白菜 

 當然從A到B的公路也可能不只一條。 

 某一次運送白菜,可以在真正上路時才開通某一條道路 

 一次運送不會影響別的運送的狀態 



 對應資料庫 

 A代表客戶端行程 

 B代表服務器端行程 

 公路代表連接,

 運送一次白菜代表一個會話 


 一個連接可以進行多次的會話 

 一個會話可以不依賴于某個連接,甚至沒有連接(當我準備好了,真正開始運送時再建立連接) 

 一個會話不會影響別的會話




會話&鏈接


在具體的應用場景中連接(connction) 和 會話(session) 有很多情況:


1. SQL*PLUS 登錄 ORACLE


這種場景比較容易理解,一個連接對應一個Session。


2. PL/SQL Developer工具登錄ORACLE


PL/SQL Developer工具——>首選項——>連接下,你可以設定會話方式,如下圖所示:




如果設定選項選擇多路會話,:PL/SQL Developer 登錄ORACLE,每打開一個視窗,將創建一個新的會話,而設定選項選擇單路會話,則新打開的視窗會共用一個會話。具體你可以參考PLSQL Developer8.0用戶指南:


多路會話:每個測驗視窗、SQL視窗和命令視窗都將有它自己的會話,另外的一個會話將被用于編譯。這是最靈活的設定,明顯地會導致最大數量的資料庫會話。另外可能的缺點是,在更新被提交之后,它們只在X視窗中可以看到,而在Y視窗看不到。


雙路會話:測驗視窗、SQL視窗和命令視窗將共享一個會話,另外一個會話將被用于編譯。

3 / 9

這個模式的缺點是每次只有一個視窗可以運行程式。


單路會話:所有的視窗和所有的編譯都使用同一個會話,這使事務管理變得很困難。在這個模式中除錯器被禁用使用。如果你被限制只能使用一個資料庫會話,那么你只能使用這個設定了。





會話&行程





在Oracle中如何查看引數sessiones或processes的值呢?一般使用show parameter命令查看。


SQL> show parameter processes;



NAME                                 TYPE                             VALUE

------------------------------------ -------------------------------- ---------------

aq_tm_processes                      integer                          0

db_writer_processes                  integer                          1

gcs_server_processes                 integer                          0

job_queue_processes                  integer                          10

log_archive_max_processes            integer                          2

processes                            integer                          850

SQL> show parameter session;



NAME                                 TYPE                             VALUE

------------------------------------ -------------------------------- -----------

java_max_sessionspace_size           integer                          0

java_soft_sessionspace_limit         integer                          0

license_max_sessions                 integer                          0

license_sessions_warning             integer                          0

logmnr_max_persistent_sessions       integer                          1

session_cached_cursors               integer                          20

session_max_open_files               integer                          10

sessions                             integer                          940

shared_server_sessions               integer

SQL> 

方法2:查詢v$parameter


select name, type, value ,display_value, isses_modifiable, issys_modifiable 

4 / 9

from v$parameter

where name='sessions';





select name, type, value ,display_value, isses_modifiable, issys_modifiable 

from v$parameter

where name='processes';




方法3:查詢v$resiyrce_limit;







Oracle的sessions和processes的數量關系是:


Oracle 11g R1以及之前版本


           sessions=(1.1 * processes) + 5


Oracle 11g R2


           sessions=(1.5 * processes) + 22


如下例子所示,在Oracle 10g 版本中,processes與sessions的關系如下所示:


SQL> select * from v$version;



BANNER

----------------------------------------------------------------

Oracle Database 10g Release 10.2.0.4.0 - 64bit Production

PL/SQL Release 10.2.0.4.0 - Production

CORE    10.2.0.4.0      Production

TNS for Linux: Version 10.2.0.4.0 - Production

NLSRTL Version 10.2.0.4.0 - Production







SELECT (1.1 *850)+ 5 FROM DUAL; 其值剛好為940




5 / 9

一般修改引數processes后,sessions引數也會隨之變化,但是有一個奇怪的現象時,如下所示,我將processes從


850改為120后,重啟資料庫實體,發現sessions的值并沒有隨之變化。這個現象一般發生在改小processes引數。為什么這樣呢?






共享服務器模式,一個會話可能由多個服務行程輪流為之服務,一個行程可能為多個會話服務。簡單地說,行程和會話之間有一種多對多的關系。





會話管理





1:查看當前所有用戶的會話(SESSION):


SELECT * FROM V$SESSION 

WHERE USERNAME IS NOT NULL

ORDER BY LOGON_TIME , SID;

其中Oracle內部行程的USERNAME為空





2:查看當前用戶的所有SESSION:


SELECT * FROM V$SESSION

WHERE USERNAME = USER

ORDER BY LOGON_TIME, SID;




3:查看當前視窗/當前用戶的會話資訊


SELECT SID, SERIAL#, STATUS FROM V$SESSION WHERE AUDSID=USERENV('SESSIONID');




4:查看所有ACTIVE會話(活動會話)


SELECT * FROM V$SESSION 

WHERE USERNAME IS NOT NULL AND STATUS='ACTIVE'

6 / 9

ORDER BY LOGON_TIME, SID;




5:查看當前會話的ID可以通過如下腳本:


SELECT * FROM V$MYSTAT WHERE ROWNUM =1

查看當前用戶的SPID


SELECT P.SPID, S.SID, S.SERIAL#

FROM V$PROCESS P

INNER JOIN V$SESSION S ON P.ADDR = S.PADDR

WHERE S.AUDSID=USERENV('SESSIONID');




6:查看資料庫允許最大會話數


SQL> SHOW PARAMETER SESSIONS;



NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

java_max_sessionspace_size           integer     0

java_soft_sessionspace_limit         integer     0

license_max_sessions                 integer     0

license_sessions_warning             integer     0

logmnr_max_persistent_sessions       integer     1

sessions                             integer     225

shared_server_sessions               integer     





SQL> SELECT NAME, TYPE, VALUE FROM V$PARAMETER WHERE NAME LIKE 'session%';



NAME                       TYPE                 VALUE

---------                 ----------             -----------

sessions                          3                225

session_cached_cursors            3                20

session_max_open_files            3                10

7:查看曾經的最大會話數:




SQL>

SQL> SELECT SESSIONS_MAX,SESSIONS_WARNING,SESSIONS_CURRENT,SESSIONS_HIGHWATER 

2  FROM v$license;



7 / 9

SESSIONS_MAX SESSIONS_WARNING SESSIONS_CURRENT SESSIONS_HIGHWATER

------------ ---------------- ---------------- ------------------

         0                0              512                553

SESSIONS_HIGHWATER表示曾經的最大會話數512





8:查詢那些應用的連接數此時是多少


SELECT  B.PROGRAM , COUNT(1) 

FROM V$PROCESS A, V$SESSION B 

WHERE A.ADDR = B.PADDR 

    AND  B.USERNAME IS NOT NULL

GROUP BY B.PROGRAM;




會話狀態:


會話有ACTIVE、INACTIVE、KILLED、CACHED、SNIPED五個狀態,一般比較常見的有ACTIVE、INACTIVE、KILLED三個狀態。





ACTIVE   :處于此狀態的會話,表示正在執行,處于活動狀態。


INACTIVE :處于此狀態的會話表示不是正在執行的


KILLED   :處于此狀態的會話,表示出現了錯誤或行程被殺掉,正在回滾,當然,這個狀態的會話也占用系統資源的。還有一點就是,    KILLED的狀態一般會持續較長時間,如果你想快速殺掉回話,可以參考我以前的一篇文章ORACLE快速徹底Kill掉的會話


CACHED   : Session temporarily cached for use by Oracle*XA


SNIPED   : Session inactive, waiting on the client。 標記為SNIPED的行程被釋放有兩種條件:


       1、相關的terminal再一次試圖登錄及執行sql


       2、手動的在作業系統后臺kill掉相應的spid


關于會話資訊


通過如下SQL你可以查詢你的每個應用程式到底在等待什么,從而針對這些資訊對資料庫的性能進行調整。

8 / 9


COL USERNAME FOR A12;

COL PROGRAM  FOR A32;

COL EVENT    FOR A26;

SELECT S.USERNAME

    ,S.PROGRAM

    ,S.STATUS

    ,SE.EVENT

    ,SE.TOTAL_WAITS

    ,SE.TOTAL_TIMEOUTS

    ,SE.TIME_WAITED

    ,SE.AVERAGE_WAIT

FROM V$SESSION S, V$SESSION_EVENT SE

WHERE S.SID=SE.SID AND SE.EVENT NOT LIKE 'SQL*Net%'

AND S.STATUS ='ACTIVE' AND S.USERNAME IS NOT NULL;




2.ORACLE中查詢被鎖的表并釋放session


SELECT A.OWNER

,A.OBJECT_NAME

,B.XIDUSN

,B.XIDSLOT

,B.XIDSQN

,B.SESSION_ID

,B.ORACLE_USERNAME

,B.OS_USER_NAME

,B.PROCESS

,B.LOCKED_MODE

,C.MACHINE

,C.STATUS

,C.SERVER

,C.SID

,C.SERIAL#

,C.PROGRAM

FROM ALL_OBJECTS A,V$LOCKED_OBJECT B,SYS.GV_$SESSION C

WHERE  A.OBJECT_ID = B.OBJECT_ID  AND B.PROCESS = C.PROCESS  ORDER BY 1,2;




3.查看占用系統IO較大的session


SELECT se.sid

    ,se.serial#

    ,pr.spid

9 / 9

    ,se.username

    ,se.status

    ,se.terminal

    ,se.program

    ,se.module

    ,se.sql_address

    ,st.event

    ,st.p1text

    ,si.physical_reads

    ,si.block_changes

FROM v$session se,v$session_wait st,v$sess_io si,v$process pr

WHERE st.sid=se.sid  AND st.sid=si.sid 

AND se.paddr=pr.ADDR AND se.sid>6

AND st.wait_time=0 AND st.event NOT LIKE '%SQL%' 

ORDER BY physical_reads DESC;




4.找出耗cpu較多的session


select a.sid

    ,spid

    ,status

    ,substr(a.program,1,40) prog

    ,a.terminal

    ,osuser

    ,value/60/100 value

from v$session a,v$process b,v$sesstat c

where c.statistic#=12 and c.sid=a.sid and a.paddr=b.addr

 order by value desc



uj5u.com熱心網友回復:

感謝分享,建議記錄在博客中。

uj5u.com熱心網友回復:

我是來看評論的
參考 1 樓 賣水果的net 的回復:
感謝分享,建議記錄在博客中。

uj5u.com熱心網友回復:

參考 1 樓 賣水果的net的回復:
感謝分享,建議記錄在博客中。

好的,初次使用這個分享自己的學習成果,正在學習使用中

轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/21230.html

標籤:基礎和管理

上一篇:誰有Oracle的Support Identifier,求大神幫忙下載meb-4.0 ,做個測驗,官網的測驗版只能下載最新的4.1.3

下一篇:這么寫查詢的效率怎樣?

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • GPU虛擬機創建時間深度優化

    **?桔妹導讀:**GPU虛擬機實體創建速度慢是公有云面臨的普遍問題,由于通常情況下創建虛擬機屬于低頻操作而未引起業界的重視,實際生產中還是存在對GPU實體創建時間有苛刻要求的業務場景。本文將介紹滴滴云在解決該問題時的思路、方法、并展示最終的優化成果。 從公有云服務商那里購買過虛擬主機的資深用戶,一 ......

    uj5u.com 2020-09-10 06:09:13 more
  • 可編程網卡芯片在滴滴云網路的應用實踐

    **?桔妹導讀:**隨著云規模不斷擴大以及業務層面對延遲、帶寬的要求越來越高,采用DPDK 加速網路報文處理的方式在橫向縱向擴展都出現了局限性。可編程芯片成為業界熱點。本文主要講述了可編程網卡芯片在滴滴云網路中的應用實踐,遇到的問題、帶來的收益以及開源社區貢獻。 #1. 資料中心面臨的問題 隨著滴滴 ......

    uj5u.com 2020-09-10 06:10:21 more
  • 滴滴資料通道服務演進之路

    **?桔妹導讀:**滴滴資料通道引擎承載著全公司的資料同步,為下游實時和離線場景提供了必不可少的源資料。隨著任務量的不斷增加,資料通道的整體架構也隨之發生改變。本文介紹了滴滴資料通道的發展歷程,遇到的問題以及今后的規劃。 #1. 背景 資料,對于任何一家互聯網公司來說都是非常重要的資產,公司的大資料 ......

    uj5u.com 2020-09-10 06:11:05 more
  • 滴滴AI Labs斬獲國際機器翻譯大賽中譯英方向世界第三

    **桔妹導讀:**深耕人工智能領域,致力于探索AI讓出行更美好的滴滴AI Labs再次斬獲國際大獎,這次獲獎的專案是什么呢?一起來看看詳細報道吧! 近日,由國際計算語言學協會ACL(The Association for Computational Linguistics)舉辦的世界最具影響力的機器 ......

    uj5u.com 2020-09-10 06:11:29 more
  • MPP (Massively Parallel Processing)大規模并行處理

    1、什么是mpp? MPP (Massively Parallel Processing),即大規模并行處理,在資料庫非共享集群中,每個節點都有獨立的磁盤存盤系統和記憶體系統,業務資料根據資料庫模型和應用特點劃分到各個節點上,每臺資料節點通過專用網路或者商業通用網路互相連接,彼此協同計算,作為整體提供 ......

    uj5u.com 2020-09-10 06:11:41 more
  • 滴滴資料倉庫指標體系建設實踐

    **桔妹導讀:**指標體系是什么?如何使用OSM模型和AARRR模型搭建指標體系?如何統一流程、規范化、工具化管理指標體系?本文會對建設的方法論結合滴滴資料指標體系建設實踐進行解答分析。 #1. 什么是指標體系 ##1.1 指標體系定義 指標體系是將零散單點的具有相互聯系的指標,系統化的組織起來,通 ......

    uj5u.com 2020-09-10 06:12:52 more
  • 單表千萬行資料庫 LIKE 搜索優化手記

    我們經常在資料庫中使用 LIKE 運算子來完成對資料的模糊搜索,LIKE 運算子用于在 WHERE 子句中搜索列中的指定模式。 如果需要查找客戶表中所有姓氏是“張”的資料,可以使用下面的 SQL 陳述句: SELECT * FROM Customer WHERE Name LIKE '張%' 如果需要 ......

    uj5u.com 2020-09-10 06:13:25 more
  • 滴滴Ceph分布式存盤系統優化之鎖優化

    **桔妹導讀:**Ceph是國際知名的開源分布式存盤系統,在工業界和學術界都有著重要的影響。Ceph的架構和演算法設計發表在國際系統領域頂級會議OSDI、SOSP、SC等上。Ceph社區得到Red Hat、SUSE、Intel等大公司的大力支持。Ceph是國際云計算領域應用最廣泛的開源分布式存盤系統, ......

    uj5u.com 2020-09-10 06:14:51 more
  • es~通過ElasticsearchTemplate進行聚合~嵌套聚合

    之前寫過《es~通過ElasticsearchTemplate進行聚合操作》的文章,這一次主要寫一個嵌套的聚合,例如先對sex集合,再對desc聚合,最后再對age求和,共三層嵌套。 Aggregations的部分特性類似于SQL語言中的group by,avg,sum等函式,Aggregation ......

    uj5u.com 2020-09-10 06:14:59 more
  • 爬蟲日志監控 -- Elastc Stack(ELK)部署

    傻瓜式部署,只需替換IP與用戶 導讀: 現ELK四大組件分別為:Elasticsearch(核心)、logstash(處理)、filebeat(采集)、kibana(可視化) 下載均在https://www.elastic.co/cn/downloads/下tar包,各組件版本最好一致,配合fdm會 ......

    uj5u.com 2020-09-10 06:15:05 more
最新发布
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:33:24 more
  • MySQL中binlog備份腳本分享

    關于MySQL的二進制日志(binlog),我們都知道二進制日志(binlog)非常重要,尤其當你需要point to point災難恢復的時侯,所以我們要對其進行備份。關于二進制日志(binlog)的備份,可以基于flush logs方式先切換binlog,然后拷貝&壓縮到到遠程服務器或本地服務器 ......

    uj5u.com 2023-04-20 08:28:06 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:27:27 more
  • 快取與資料庫雙寫一致性幾種策略分析

    本文將對幾種快取與資料庫保證資料一致性的使用方式進行分析。為保證高并發性能,以下分析場景不考慮執行的原子性及加鎖等強一致性要求的場景,僅追求最終一致性。 ......

    uj5u.com 2023-04-20 08:26:48 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:26:35 more
  • 云時代,MySQL到ClickHouse資料同步產品對比推薦

    ClickHouse 在執行分析查詢時的速度優勢很好的彌補了MySQL的不足,但是對于很多開發者和DBA來說,如何將MySQL穩定、高效、簡單的同步到 ClickHouse 卻很困難。本文對比了 NineData、MaterializeMySQL(ClickHouse自帶)、Bifrost 三款產品... ......

    uj5u.com 2023-04-20 08:26:29 more
  • sql陳述句優化

    問題查找及措施 問題查找 需要找到具體的代碼,對其進行一對一優化,而非一直把關注點放在服務器和sql平臺 降低簡化每個事務中處理的問題,盡量不要讓一個事務拖太長的時間 例如檔案上傳時,應將檔案上傳這一步放在事務外面 微軟建議 4.啟動sql定時執行計劃 怎么啟動sqlserver代理服務-百度經驗 ......

    uj5u.com 2023-04-20 08:25:13 more
  • Redis 報”OutOfDirectMemoryError“(堆外記憶體溢位)

    Redis 報錯“OutOfDirectMemoryError(堆外記憶體溢位) ”問題如下: 一、報錯資訊: 使用 Redis 的業務介面 ,產生 OutOfDirectMemoryError(堆外記憶體溢位),如圖: 格式化后的報錯資訊: { "timestamp": "2023-04-17 22: ......

    uj5u.com 2023-04-20 08:24:54 more
  • day02-2-商鋪查詢快取

    功能02-商鋪查詢快取 3.商鋪詳情快取查詢 3.1什么是快取? 快取就是資料交換的緩沖區(稱作Cache),是存盤資料的臨時地方,一般讀寫性能較高。 快取的作用: 降低后端負載 提高讀寫效率,降低回應時間 快取的成本: 資料一致性成本 代碼維護成本 運維成本 3.2需求說明 如下,當我們點擊商店詳 ......

    uj5u.com 2023-04-20 08:24:03 more
  • day02-短信登錄

    功能實作02 2.功能01-短信登錄 2.1基于Session實作登錄 2.1.1思路分析 2.1.2代碼實作 2.1.2.1發送短信驗證碼 發送短信驗證碼: 發送驗證碼的介面為:http://127.0.0.1:8080/api/user/code?phone=xxxxx<手機號> 請求方式:PO ......

    uj5u.com 2023-04-20 08:23:11 more