Apa "wajar" waktu yang panjang untuk menjaga SQL kursor terbuka?

Dalam aplikasi anda, apa yang's "lama" untuk menjaga transaksi terbuka sebelum melakukan atau bergulir kembali? Menit? Detik? Jam?

dan di mana database?

I'm mungkin akan mendapatkan dinyalakan selama ini, tapi anda benar-benar harus mencoba dan menghindari menggunakan kursor karena mereka mengalami kinerja yang serius memukul. Jika anda harus menggunakannya, anda harus tetap terbuka minimum absolut jumlah waktu mungkin sehingga anda membebaskan sumber daya yang diblokir oleh kursor SECEPATNYA.

Komentar (0)

transaksi: menit.

Kursor: 0seconds maksimal, jika anda menggunakan kursor kita api anda.

Ini bukan konyol ketika anda mempertimbangkan kami di web ketersediaan lingkungan, yang telah menjalankan sql server, dan kita don't bahkan memungkinkan disimpan procs karena ketidakmampuan untuk secara akurat versi dan menjaga mereka. Jika kita menggunakan oracle mungkin.

Komentar (1)

Secara umum saya setuju dengan jawaban yang lain: Menghindari kursor bila mungkin (dalam kebanyakan kasus) dan di dekat mereka secepat mungkin.

Namun Itu semua tergantung pada lingkungan anda're bekerja di.

  • Jika itu adalah produksi website lingkungan dengan banyak pengguna, pastikan bahwa kursor pergi sebelum seseorang mendapat timeout.
  • Jika anda're - misalnya - menulis "menganalisis log disimpan prosedur" (atau apapun) pada proprietary mesin itu apakah ada yang lain: merasa bebas untuk melakukan apapun yang anda ingin lakukan. Anda'll menjadi satu-satunya orang yang telah menunggu. It's tidak seperti jika database server akan mati karena anda menggunakan kursor. Yang harus anda perhatikan, meskipun, bahwa mungkin penggunaan perilaku akan berubah dari waktu ke waktu dan di beberapa titik mungkin ada 10 orang yang menggunakan aplikasi tersebut. Jadi cobalah untuk menemukan cara lain ;)
Komentar (0)
Larutan

@lomaxx, @ChanChan: untuk yang terbaik dari pengetahuan saya kursor hanya masalah pada SQL Server dan Sybase (T-SQL varian). Jika database anda pilihan adalah Oracle, maka kursor adalah teman anda. I've melihat sejumlah kasus di mana penggunaan kursor telah benar-benar meningkatkan kinerja. Kursor adalah aplikasi yang sangat berguna mekanisme dan tbh, mengatakan hal-hal seperti "jika anda menggunakan kursor kita api anda" ini sedikit konyol.

Setelah mengatakan bahwa, anda hanya ingin menjaga kursor terbuka untuk minimum mutlak yang diperlukan. Menentukan waktu maksimum akan sewenang-wenang dan sia-sia tanpa memahami domain masalah.

Komentar (0)

@ninesided: masalah kinerja samping, it's juga tentang menggunakan alat yang tepat untuk pekerjaan itu. Diberi pilihan untuk memindahkan kursor keluar dari pertanyaan anda ke kode, saya akan berpikir 99 kali dari 100 itu akan lebih baik untuk menempatkan bahwa perulangan logika menjadi semacam kode dikelola. Melakukan hal itu memungkinkan anda untuk mendapatkan keuntungan dari menggunakan debugger, compile time error checking, jenis keselamatan dll.

Jawaban saya untuk pertanyaan masih sama, jika anda're menggunakan kursor, dekat ASAP, di oracle saya'd juga dapat mencoba untuk menggunakan eksplisit kursor.

Komentar (0)