Mengapa sesi Oracle masih hidup setelah dua minggu tidak aktif

16

DB: Oracle 10g

O / S: Windows Server 2003 64 bit

Saya meminta daftar sesi Oracle yang dihasilkan oleh aplikasi web (filter oleh program = w3wp.exe)

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

masukkan deskripsi gambar di sini

Menurut Logon_Time, mengapa sesi masih hidup dari 31/07/2012 atau 01/08/2012 atau sesi apa pun sebelum hari ini (21/08/2012)?

Saya telah mengkonfigurasi pada sqlnet.ora: SQLNET.EXPIRE_TIME = 20 Jadi itu berarti setiap 20 menit Oracle memeriksa apakah koneksi masih aktif.

Semua skema pengguna memiliki profil default. Itu berarti bahwa tidak ada sesi yang tidak akan pernah berakhir atau mati?

masukkan deskripsi gambar di sini

Ditambahkan sebagai tanggapan atas komentar Phil:

masukkan deskripsi gambar di sini

Ditambahkan dalam jawaban atas jawaban Phil:

masukkan deskripsi gambar di sini

Delmonte
sumber
Untuk apa v$session.PREV_EXEC_STARTsesi-sesi ini? Saya menduga mereka adalah bagian dari kumpulan koneksi & karena itu belum dihapus karena mereka sering digunakan.
Philᵀᴹ
Milik saya adalah Oracle 10g, jadi tidak ada kolom PREV_EXEC_START di sesi $ $. Tetapi saya memiliki permintaan lagi termasuk kolom Last_Call_ET (saya menambahkan gambar itu pada pertanyaan saya).
Delmonte
Saya berbicara dengan pengembang kami, dan mereka mengatakan kepada saya bahwa mereka menggunakan ODP.NET di aplikasi web mereka. Jadi sudah pasti bahwa sesi-sesi itu dihasilkan dalam kumpulan koneksi. Saya tidak percaya sepenuhnya ketika Oracle menunjukkan status tidak aktif, tetapi dalam kasus ini ... Apakah Anda pikir saya bisa membunuh sesi dari dua minggu lalu?
Delmonte
7
Tidak. INACTIVEHanya berarti tidak ada pernyataan SQL yang dieksekusi pada saat Anda memeriksa v$session. Jika mereka adalah bagian dari kumpulan koneksi, mereka melakukan tugasnya dengan benar - inti dari kumpulan koneksi adalah untuk menghilangkan kebutuhan akan banyak login / logoff & menjaga sesi persisten untuk startup cepat (overhead overhead yang lebih besar untuk masuk lagi & lagi hanya untuk mengeksekusi satu query). Saya tidak mengerti mengapa Anda khawatir tentang ini.
Philᵀᴹ
@ Phil - Saya dengan senang hati menyatakan itu sebagai jawaban!
Justin Cave

Jawaban:

22

Saya menduga mereka adalah bagian dari kumpulan koneksi & karena itu belum dihapus karena mereka sering digunakan.

INACTIVEdi v$sessionhanya berarti tidak ada pernyataan SQL dieksekusi pada saat yang tepat Anda memeriksa v$session.

Jika mereka adalah bagian dari kumpulan koneksi, mereka melakukan pekerjaan mereka dengan benar dengan masuk untuk jangka waktu yang lama. Inti dari penyatuan koneksi adalah untuk menghapus kebutuhan akan banyak login / logoff & menjaga sesi persisten untuk startup query cepat - ada overhead overhead yang jauh lebih besar untuk mengeksekusi satu query, kemudian memutuskan koneksi setiap waktu.

Untuk mendapatkan waktu aktivitas terakhir untuk setiap sesi:

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;

Saya menyarankan untuk tidak membunuh sesi kecuali jika Anda tahu bahwa hal itu tidak akan menimbulkan masalah di sisi aplikasi (mencoba menggunakan sesi yang sudah mati, misalnya).

Mungkin Anda melihat kumpulan koneksi yang tidak terkonfigurasi yang menciptakan ratusan koneksi setelah aplikasi dinyalakan - kumpulan koneksi mungkin urutan besarnya lebih besar dari yang seharusnya. Saya sarankan menjangkau staf pengembang / aplikasi pendukung & melihat bagaimana kumpulan koneksi dikonfigurasi.

Setelah melakukan sedikit riset, w3wp.exe adalah Proses Kumpulan Aplikasi IIS - Anda hampir pasti ingin berbicara dengan admin server web IIS Anda untuk membantu sampai ke bagian bawah konfigurasi penyatuan koneksi.

Philᵀᴹ
sumber
Terima kasih atas penjelasan Anda, tetapi bagaimana jika nilai sesi odp.net bertambah dan bertambah banyak? Saya meminta v $ resource_limit (ditambahkan pada pertanyaan awal saya) dan menunjukkan bahwa nilai proses dan sesi mencapai 80% dari batas nilai. Sesi odp.net itu bisa menghabiskan nilai sesi saya, mencapai nilai batas 701 dan kemudian menjatuhkan koneksi database saya? (Saya tahu bahwa saya dapat memperpanjang nilai batas tersebut hingga 1000 atau 2000, tapi itu bukan bagian dari pertanyaan)
Delmonte
Maka Anda memiliki masalah aplikasi.
Philᵀᴹ
Mengapa? Aplikasi web membuka, menutup, dan membuang koneksi odp.net ... Seperti yang saya pahami, sesi odp.net itu masih hidup menunggu koneksi di masa depan, bahkan jika aplikasi web memutuskannya.
Delmonte
Sepertinya itu akan menjadi masalah konfigurasi kolam koneksi. Sudahkah Anda membuat grafik hitungan (*) sesi v $ dari waktu ke waktu? Apakah Anda memiliki lisensi paket diagnostik untuk DB?
Philᵀᴹ
3
Saya berasumsi Anda maksud IIS (server HTTP / aplikasi Microsoft), bukan ISS (Stasiun Luar Angkasa Internasional) :-)
Justin Cave