จะตรวจสอบจำนวนการเชื่อมต่อสูงสุดที่อนุญาตกับฐานข้อมูล Oracle ได้อย่างไร


91

วิธีใดที่ดีที่สุดในการใช้ SQL เพื่อตรวจสอบจำนวนการเชื่อมต่อสูงสุดที่อนุญาตสำหรับฐานข้อมูล Oracle ในท้ายที่สุดฉันต้องการแสดงจำนวนเซสชันปัจจุบันและจำนวนทั้งหมดที่อนุญาตเช่น "ปัจจุบันใช้การเชื่อมต่อ 23 จาก 80 รายการ"

คำตอบ:


123

มีขีด จำกัด ที่แตกต่างกันเล็กน้อยที่อาจเข้ามามีบทบาทในการกำหนดจำนวนการเชื่อมต่อที่ฐานข้อมูล Oracle รองรับ แนวทางที่ง่ายที่สุดคือการใช้พารามิเตอร์ SESSIONS และ V $ SESSION เช่น

จำนวนเซสชันที่ฐานข้อมูลถูกกำหนดค่าให้อนุญาต

SELECT name, value 
  FROM v$parameter
 WHERE name = 'sessions'

จำนวนเซสชันที่ใช้งานอยู่ในปัจจุบัน

SELECT COUNT(*)
  FROM v$session

ดังที่ได้กล่าวไปแล้วมีข้อ จำกัด อื่น ๆ ที่เป็นไปได้ทั้งในระดับฐานข้อมูลและระดับระบบปฏิบัติการและขึ้นอยู่กับว่าเซิร์ฟเวอร์ที่ใช้ร่วมกันได้รับการกำหนดค่า หากเซิร์ฟเวอร์ที่ใช้ร่วมกันถูกละเว้นคุณอาจถึงขีด จำกัด ของพารามิเตอร์ PROCESSES ก่อนที่จะถึงขีด จำกัด ของพารามิเตอร์ SESSIONS และคุณอาจถึงขีด จำกัด ของระบบปฏิบัติการเนื่องจากแต่ละเซสชันต้องใช้ RAM จำนวนหนึ่ง


ขอโทษทีเราจะเรียกใช้แบบสอบถามนี้ได้อย่างไร ฉันได้รับ "ตารางหรือมุมมองไม่มีอยู่" สำหรับ "SELECT COUNT (*) FROM v $ session"
ชาวบ้าน

3
@ yin03 - นั่นหมายความว่าผู้ใช้ Oracle ที่คุณใช้ไม่มีสิทธิ์ในv$sessionมุมมอง คุณต้องขอให้ DBA ของคุณให้สิทธิ์นั้นแก่คุณ เป็นไปได้มากว่าคุณต้องการselect any dictionaryสิทธิ์แม้ว่าselect_catalog_roleบทบาทหรือการให้สิทธิ์โดยตรงกับวัตถุนั้นก็ใช้ได้เช่นกัน
Justin Cave

38

ประชุมพารามิเตอร์ที่ได้มาจากกระบวนการพารามิเตอร์และการเปลี่ยนแปลงตามความเหมาะสมเมื่อคุณเปลี่ยนจำนวนของกระบวนการสูงสุด ดูเอกสาร Oracleสำหรับข้อมูลเพิ่มเติม

หากต้องการรับเฉพาะข้อมูลเกี่ยวกับเซสชัน:

    select current_utilization, limit_value 
    from v$resource_limit 
    where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE
------------------- -----------
                110 792

ลองสิ่งนี้เพื่อแสดงข้อมูลเกี่ยวกับทั้งสองอย่าง:

    select resource_name, current_utilization, max_utilization, limit_value 
    from v$resource_limit 
    where resource_name in ('sessions', 'processes');
RESOURCE_NAME CURRENT_UTILIZATION MAX_UTILIZATION LIMIT_VALUE
------------- ------------------- --------------- --------
ประมวลผล 96309500
เซสชัน 104 323 792

34

ฉันคิดว่ามันจะได้ผลตามแหล่งที่มานี้

SELECT
  'Currently, ' 
  || (SELECT COUNT(*) FROM V$SESSION)
  || ' out of ' 
  || DECODE(VL.SESSIONS_MAX,0,'unlimited',VL.SESSIONS_MAX) 
  || ' connections are used.' AS USAGE_MESSAGE
FROM 
  V$LICENSE VL

อย่างไรก็ตามจัสตินเคฟพูดถูก แบบสอบถามนี้ให้ผลลัพธ์ที่ดีกว่า:

SELECT
  'Currently, ' 
  || (SELECT COUNT(*) FROM V$SESSION)
  || ' out of ' 
  || VP.VALUE 
  || ' connections are used.' AS USAGE_MESSAGE
FROM 
  V$PARAMETER VP
WHERE VP.NAME = 'sessions'

ขออภัยเราจะเรียกใช้แบบสอบถามนี้ได้อย่างไร ฉันได้รับ "ตารางหรือมุมมองไม่มีอยู่" สำหรับ "SELECT COUNT (*) FROM v $ session"
ชาวบ้าน

2
@ yin03 คุณใช้ Oracle หรือฐานข้อมูลประเภทอื่นหรือไม่? หาก Oracle อาจเป็นปัญหาด้านสิทธิ์
JosephStyons

1
ไม่มีที่ติสอบถาม @JosephStyons!
Gaurav

@guarav ฉันดีใจที่คุณพบว่ามีประโยชน์!
JosephStyons

4

หมายเหตุ: คำตอบนี้เป็นเพียงส่วนหนึ่งของคำถามเท่านั้น

หากคุณต้องการทราบจำนวนเซสชันสูงสุดที่อนุญาตคุณสามารถดำเนินการใน sqlplus เป็น sysdba:

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
sessions                             integer     248
shared_server_sessions               integer

พารามิเตอร์เซสชันคือสิ่งที่คุณต้องการ


4

ใช้ gv $ session สำหรับ RAC หากคุณต้องการรับจำนวนเซสชันทั้งหมดในคลัสเตอร์



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.