Stack overflow terjadi ketika Anda menjalankan query yang berisi sejumlah besar argumen dalam IN atau tidak dalam klausul dalam SQL Server

PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.

Klik disini untuk melihat versi Inggris dari artikel ini:288095
Artikel ini telah diarsipkan. Artikel ditawarkan dalam bentuk "apa adanya" dan tidak akan dapat diperbarui lagi.
BUG #: 235727 (shiloh_bugs)
BUG #: 58274 (sqlbug_70)
GEJALA
Pertanyaan yang mengandung sejumlah besar argumen (ribuan) di dalam IN atau klausa tidak IN dapat menghasilkan stack overflow. Sebagai contoh, query berikut mengakibatkan stack overflow:
SELECT max(au_id) FROM authors WHERE au_id IN(1,2,5,......,11571)  -- Query contains over 11570 arguments.				
SQL Server error log yang berisi informasi yang mirip dengan berikut ini ketika stack overflow terjadi:
2000-08-10 12:02:37.87 spid51    08/10/00 12:02:37 Stack Overflow Dump not possible - Exception c00000fd E at 0x005872862000-08-10 12:02:37.87 spid51    Address=587286 Exception Code = c00000fd2000-08-10 12:02:37.87 spid51    eax=195922d0 ebx=19592338 ecx=2ad0e938 edx=000000072000-08-10 12:02:37.87 spid51    esi=196ce2c8 edi=19592180 eip=00587286 esp=2ac930002000-08-10 12:02:37.87 spid51    ebp=2ac93028 efl=000102022000-08-10 12:02:37.87 spid51    cs=1b ss=23 ds=23 es=23 fs=38 gs=02000-08-10 12:02:37.87 spid51    1: Return Address 005872862000-08-10 12:02:37.87 spid51    2: Return Address 0058728B.................				
Dalam beberapa kasus, SQL Server dapat benar-benar mati sebagai akibat dari stack overflow.
TEKNIK PEMECAHAN MASALAH
Menulis ulang query dan menggunakan tabel #temp berisi nilai-nilai dalam daftar IN alih-alih menggunakan sebuah klausa IN. Misalnya, permintaan sebelumnya dapat ditulis ulang seperti ini:
CREATE TABLE #IN_values (au_id char(4))INSERT INTO #IN_values select au_id FROM Table_with_values_123456789...SELECT max(au_id)FROM authors as AJOIN #IN_values as I ON (A.au_id = I.au_id)				
STATUS
Microsoft telah mengkonfirmasi bahwa ini merupakan masalah dalam produk Microsoft yang didaftar pada awal artikel ini.
INFORMASI LEBIH LANJUT
Klien tidak terputus tapi pesan galat ini dapat terjadi:
Server: Msg 8621, tingkat 17, negara bagian 1, jalur 2Kesalahan prosesor internal Query: Prosesor permintaan kehabisan ruang stack selama permintaan optimasi.

Peringatan: Artikel ini telah diterjemahkan secara otomatis

Properti

ID Artikel: 288095 - Tinjauan Terakhir: 12/06/2015 00:23:46 - Revisi: 2.0

Microsoft SQL Server 7.0 Standard Edition, Microsoft SQL Server 2000 Enterprise Edition, Microsoft SQL Server 2000 Personal Edition, Microsoft SQL Server 2000 Developer Edition, Microsoft SQL Server 2000 Standard Edition

  • kbnosurvey kbarchive kbprb kbpending kbmt KB288095 KbMtid
Tanggapan