Cách tốt nhất, sử dụng SQL, để kiểm tra số lượng kết nối tối đa được phép cho cơ sở dữ liệu Oracle là gì? Cuối cùng, tôi muốn hiển thị số phiên hiện tại và tổng số cho phép, ví dụ: "Hiện tại, 23 trong số 80 kết nối được sử dụng".
Cách tốt nhất, sử dụng SQL, để kiểm tra số lượng kết nối tối đa được phép cho cơ sở dữ liệu Oracle là gì? Cuối cùng, tôi muốn hiển thị số phiên hiện tại và tổng số cho phép, ví dụ: "Hiện tại, 23 trong số 80 kết nối được sử dụng".
Câu trả lời:
Có một vài giới hạn khác nhau có thể ảnh hưởng đến việc xác định số lượng kết nối mà cơ sở dữ liệu Oracle hỗ trợ. Cách tiếp cận đơn giản nhất là sử dụng tham số SESSIONS và V $ SESSION, tức là
Số lượng phiên mà cơ sở dữ liệu đã được định cấu hình để cho phép
SELECT name, value
FROM v$parameter
WHERE name = 'sessions'
Số lượng phiên hiện đang hoạt động
SELECT COUNT(*)
FROM v$session
Tuy nhiên, như tôi đã nói, có những giới hạn tiềm ẩn khác cả ở cấp cơ sở dữ liệu và cấp hệ điều hành và tùy thuộc vào việc máy chủ chia sẻ đã được cấu hình hay chưa. Nếu máy chủ được chia sẻ bị bỏ qua, bạn có thể đạt đến giới hạn của thông số PROCESSES trước khi bạn đạt đến giới hạn của thông số SESSIONS. Và bạn có thể đạt đến giới hạn của hệ điều hành vì mỗi phiên yêu cầu một lượng RAM nhất định.
v$session
chế độ xem. Bạn cần yêu cầu DBA cấp cho bạn đặc quyền đó. Rất có thể, bạn muốn có select any dictionary
đặc quyền mặc dù select_catalog_role
vai trò hoặc khoản trợ cấp trực tiếp chỉ trên đối tượng đó cũng sẽ hoạt động.
Các phiên tham số có nguồn gốc từ quá trình tham số và thay đổi cho phù hợp khi bạn thay đổi số lượng các quy trình tối đa. Xem tài liệu Oracle để biết thêm thông tin.
Để chỉ nhận thông tin về các phiên:
select current_utilization, limit_value
from v$resource_limit
where resource_name='sessions';
CURRENT_UTILIZATION LIMIT_VALUE ------------------- ----------- 110 792
Hãy thử điều này để hiển thị thông tin về cả hai:
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 ------------- --------------------------------- -------- quy trình 96 309 500 phiên 104 323 792
Tôi nghĩ rằng điều này sẽ hoạt động, dựa trên nguồn này .
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
Tuy nhiên, Justin Cave đã đúng. Truy vấn này cho kết quả tốt hơn:
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'
Lưu ý: điều này chỉ trả lời một phần của câu hỏi.
Nếu bạn chỉ muốn biết số lượng phiên tối đa được phép, thì bạn có thể thực thi trong sqlplus, dưới dạng sysdba:
SQL> show parameter sessions
Điều này cung cấp cho bạn một đầu ra như:
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
Tham số phiên là thông số bạn muốn.
Chế độ xem v $ resource_limit rất thú vị đối với tôi để xem qua các phiên, quy trình tiên tri ..:
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'