วิธีใดที่ดีที่สุดในการใช้ SQL เพื่อตรวจสอบจำนวนการเชื่อมต่อสูงสุดที่อนุญาตสำหรับฐานข้อมูล Oracle ในท้ายที่สุดฉันต้องการแสดงจำนวนเซสชันปัจจุบันและจำนวนทั้งหมดที่อนุญาตเช่น "ปัจจุบันใช้การเชื่อมต่อ 23 จาก 80 รายการ"
วิธีใดที่ดีที่สุดในการใช้ SQL เพื่อตรวจสอบจำนวนการเชื่อมต่อสูงสุดที่อนุญาตสำหรับฐานข้อมูล Oracle ในท้ายที่สุดฉันต้องการแสดงจำนวนเซสชันปัจจุบันและจำนวนทั้งหมดที่อนุญาตเช่น "ปัจจุบันใช้การเชื่อมต่อ 23 จาก 80 รายการ"
คำตอบ:
มีขีด จำกัด ที่แตกต่างกันเล็กน้อยที่อาจเข้ามามีบทบาทในการกำหนดจำนวนการเชื่อมต่อที่ฐานข้อมูล Oracle รองรับ แนวทางที่ง่ายที่สุดคือการใช้พารามิเตอร์ SESSIONS และ V $ SESSION เช่น
จำนวนเซสชันที่ฐานข้อมูลถูกกำหนดค่าให้อนุญาต
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
จำนวนเซสชันที่ใช้งานอยู่ในปัจจุบัน
SELECT COUNT(*)
FROM v$session
ดังที่ได้กล่าวไปแล้วมีข้อ จำกัด อื่น ๆ ที่เป็นไปได้ทั้งในระดับฐานข้อมูลและระดับระบบปฏิบัติการและขึ้นอยู่กับว่าเซิร์ฟเวอร์ที่ใช้ร่วมกันได้รับการกำหนดค่า หากเซิร์ฟเวอร์ที่ใช้ร่วมกันถูกละเว้นคุณอาจถึงขีด จำกัด ของพารามิเตอร์ PROCESSES ก่อนที่จะถึงขีด จำกัด ของพารามิเตอร์ SESSIONS และคุณอาจถึงขีด จำกัด ของระบบปฏิบัติการเนื่องจากแต่ละเซสชันต้องใช้ RAM จำนวนหนึ่ง
v$session
มุมมอง คุณต้องขอให้ DBA ของคุณให้สิทธิ์นั้นแก่คุณ เป็นไปได้มากว่าคุณต้องการselect any dictionary
สิทธิ์แม้ว่าselect_catalog_role
บทบาทหรือการให้สิทธิ์โดยตรงกับวัตถุนั้นก็ใช้ได้เช่นกัน
ประชุมพารามิเตอร์ที่ได้มาจากกระบวนการพารามิเตอร์และการเปลี่ยนแปลงตามความเหมาะสมเมื่อคุณเปลี่ยนจำนวนของกระบวนการสูงสุด ดูเอกสาร 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
ฉันคิดว่ามันจะได้ผลตามแหล่งที่มานี้
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'
หมายเหตุ: คำตอบนี้เป็นเพียงส่วนหนึ่งของคำถามเท่านั้น
หากคุณต้องการทราบจำนวนเซสชันสูงสุดที่อนุญาตคุณสามารถดำเนินการใน 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
พารามิเตอร์เซสชันคือสิ่งที่คุณต้องการ
ใช้ gv $ session สำหรับ RAC หากคุณต้องการรับจำนวนเซสชันทั้งหมดในคลัสเตอร์
v $ resource_limit มุมมองเป็นสิ่งที่น่าสนใจสำหรับฉันในการดูเซสชัน oracle กระบวนการต่างๆ .. :
https://bbdd-error.blogspot.com.es/2017/09/check-sessions-and-processes-limit-in.html
select count(*),sum(decode(status, 'ACTIVE',1,0)) from v$session where type= 'USER'