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

Terjemahan Artikel Terjemahan Artikel
ID Artikel: 288095 - Melihat produk di mana artikel ini berlaku.
BUG #: 235727 (shiloh_bugs)
BUG #: 58274 (sqlbug_70)
Perbesar semua | Perkecil semua

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 0x00587286
2000-08-10 12:02:37.87 spid51    Address=587286 Exception Code = c00000fd
2000-08-10 12:02:37.87 spid51    eax=195922d0 ebx=19592338 ecx=2ad0e938 edx=00000007
2000-08-10 12:02:37.87 spid51    esi=196ce2c8 edi=19592180 eip=00587286 esp=2ac93000
2000-08-10 12:02:37.87 spid51    ebp=2ac93028 efl=00010202
2000-08-10 12:02:37.87 spid51    cs=1b ss=23 ds=23 es=23 fs=38 gs=0
2000-08-10 12:02:37.87 spid51    1: Return Address 00587286
2000-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 A
JOIN #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 2 Kesalahan prosesor internal Query: Prosesor permintaan kehabisan ruang stack selama permintaan optimasi.

Properti

ID Artikel: 288095 - Kajian Terakhir: 23 September 2011 - Revisi: 2.0
Berlaku bagi:
  • 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
Kata kunci: 
kbprb kbpending kbmt KB288095 KbMtid
Penerjemahan Mesin
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

Berikan Masukan

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com