Tại sao các phiên của Oracle vẫn còn sống sau hai tuần không hoạt động


16

DB: Oracle 10g

O / S: Windows Server 2003 64 bit

Tôi truy vấn danh sách các phiên của Oracle được tạo bởi các ứng dụng web (bộ lọc theo chương trình = w3wp.exe)

select * from V$session
where UPPER(program) LIKE '%W3%'
order by logon_time

nhập mô tả hình ảnh ở đây

Theo Logon_Time, tại sao các phiên còn sống từ ngày 31/07/2012 hoặc 01/08/2012 hoặc bất kỳ phiên nào trước ngày hôm nay (21/08/2012)?

Tôi đã định cấu hình trên sqlnet.ora: SQLNET.EXPIRE_TIME = 20 Vì vậy, điều đó có nghĩa là cứ sau 20 phút, Oracle sẽ kiểm tra xem các kết nối có còn hoạt động không.

Tất cả các lược đồ người dùng có hồ sơ mặc định. Nó có nghĩa là không có phiên nào sẽ không bao giờ hết hạn hoặc chết?

nhập mô tả hình ảnh ở đây

Đã thêm vào phản hồi bình luận của Phil:

nhập mô tả hình ảnh ở đây

Đã thêm vào để trả lời câu trả lời của Phil:

nhập mô tả hình ảnh ở đây


Những gì v$session.PREV_EXEC_STARTcho các phiên này? Tôi nghi ngờ chúng là một phần của nhóm kết nối và do đó không hoạt động vì chúng được sử dụng thường xuyên.
Phil

Của tôi là Oracle 10g, vì vậy không có cột PREV_EXEC_START trên phiên v $. Nhưng tôi có truy vấn một lần nữa bao gồm cột Last_Call_ET (Tôi đã thêm hình ảnh đó vào câu hỏi của mình).
Delmonte

Tôi đã nói chuyện với các nhà phát triển của chúng tôi và họ nói với tôi rằng họ đang sử dụng ODP.NET trong các ứng dụng web của họ. Vì vậy, chắc chắn rằng các phiên đó đã được tạo trong nhóm kết nối. Tôi không hoàn toàn tin tưởng khi Oracle hiển thị trạng thái KHÔNG THỰC HIỆN, nhưng trong trường hợp này ... Bạn có nghĩ rằng tôi có thể giết phiên từ hai tuần trước không?
Delmonte

7
Không. Chỉ INACTIVEcó nghĩa là không có câu lệnh SQL nào được thực thi tại thời điểm chính xác mà bạn kiểm tra v$session. Nếu họ là một phần của nhóm kết nối, họ đang thực hiện đúng công việc của mình - toàn bộ vấn đề của kết nối là loại bỏ nhu cầu đăng nhập / đăng xuất và duy trì các phiên liên tục để khởi động nhanh (đăng nhập lại nhiều lần chỉ để thực hiện một truy vấn). Tôi không hiểu tại sao bạn lo lắng về điều này.
Philᵀᴹ

@Phil - Tôi rất vui khi nhận được câu trả lời đó!
Hang Justin

Câu trả lời:


22

Tôi nghi ngờ chúng là một phần của nhóm kết nối và do đó không hoạt động vì chúng được sử dụng thường xuyên.

INACTIVEtrong v$sessionchỉ có nghĩa là không có một câu lệnh SQL được thực thi tại thời điểm chính xác mà bạn kiểm tra v$session.

Nếu họ là một phần của nhóm kết nối, họ sẽ thực hiện công việc của mình đúng cách bằng cách đăng nhập trong thời gian dài. Toàn bộ quan điểm của việc kết nối là loại bỏ nhu cầu đăng nhập / đăng xuất và duy trì các phiên liên tục để khởi động truy vấn nhanh - có một lần đăng nhập lớn hơn nhiều để thực hiện một truy vấn, sau đó ngắt kết nối mỗi lần.

Để có được thời gian hoạt động cuối cùng cho mỗi phiên:

select username, UPPER(program), logon_time, 
       floor(last_call_et / 60) "Minutes since active", status
from v$session
where UPPER(program) LIKE '%W3%'
order by last_call_et;

Tôi khuyên bạn không nên giết phiên trừ khi bạn biết rằng làm như vậy sẽ không gây ra vấn đề gì cho phía ứng dụng (ví dụ: cố gắng sử dụng phiên bị giết).

Đây có thể là trường hợp bạn đang xem nhóm kết nối được cấu hình không chính xác, tạo ra hàng trăm kết nối sau khi ứng dụng khởi động - nhóm kết nối có thể lớn hơn mức cần thiết. Tôi khuyên bạn nên liên hệ với các nhà phát triển / nhân viên hỗ trợ ứng dụng và xem xét cách cấu hình nhóm kết nối.

Đã thực hiện một chút nghiên cứu, w3wp.exe là Quy trình nhóm ứng dụng IIS - bạn gần như chắc chắn muốn nói chuyện với quản trị viên máy chủ web IIS của mình để giúp tìm hiểu về cấu hình nhóm kết nối.


Cảm ơn lời giải thích của bạn, nhưng điều gì sẽ xảy ra nếu các giá trị phiên odp.net đó đang tăng lên và tăng lên về số lượng? Tôi truy vấn v $ resource_limit (được thêm vào câu hỏi ban đầu của tôi) và cho thấy rằng các giá trị của quy trình và phiên đang đạt tới 80% giới hạn giá trị. Các phiên odp.net đó có thể tiêu thụ giá trị phiên của tôi, đạt giá trị giới hạn 701 và sau đó bỏ kết nối cơ sở dữ liệu của tôi? (Tôi biết rằng tôi có thể mở rộng các giá trị giới hạn đó lên 1000 hoặc 2000, nhưng đó không phải là một phần của câu hỏi)
Delmonte

Sau đó, bạn có một vấn đề ứng dụng.
Philᵀᴹ

Tại sao? Các ứng dụng web đang mở, đóng và xử lý kết nối odp.net ... Theo tôi hiểu, các phiên odp.net đó vẫn còn chờ đợi các kết nối trong tương lai, ngay cả khi ứng dụng web xử lý chúng.
Delmonte

Có vẻ như nó sẽ là một vấn đề cấu hình nhóm kết nối. Bạn đã vẽ đồ thị số lượng (*) của phiên v $ theo thời gian chưa? Bạn có giấy phép gói chẩn đoán cho DB không?
Phil

3
Tôi giả sử bạn có nghĩa là IIS (máy chủ HTTP / ứng dụng của Microsoft), không phải ISS (Trạm vũ trụ quốc tế) :-)
Justin Cave
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.