Setelah mencari sebentar, saya memutuskan untuk mengirim pertanyaan ini karena tidak menemukan jawaban dan meminta maaf jika ada pertanyaan / jawaban serupa di luar sana.
Saat menjalankan kueri di bawah ini pada dua server SQL yang disetel dengan cara yang sama, kami menghadapi rencana eksekusi berbeda yang memengaruhi kinerja dan kami membutuhkan bantuan untuk mengetahui penyebabnya.
Kueri:
SELECT process_id
INTO #temp
FROM revrep_revenue_fact
WHERE process_id = 284
DROP TABLE #temp
Rencana eksekusi server A
Rencana eksekusi server B Server B http://s2.postimg.org/z9fjrfv4n/server_B.png
Anda akan melihat bahwa server B memiliki operasi fisik TOP dalam rencana eksekusi aktual dan kami berusaha mencari tahu alasannya. Kedua kueri menggunakan indeks yang sama dalam Pencarian Indeks.
Berikut adalah beberapa detail server A dan server B
Server A dan B keduanya
Paket Layanan Standar Windows Server 2008 R2 1
RAM 24GB
Sistem operasi 64-bit
Versi SQL Server 2012 diperoleh dengan menggunakan ( SELECT SERVERPROPERTY ('ProductVersion') )
Server A SQL versi 11.0.3000.0
Server B SQL versi 11.0.5058.0
Apa yang sudah kami coba
Mengapa server B memiliki TOP dalam rencana eksekusi? Dalam contoh kueri sederhana ini tidak ada masalah nyata tetapi dalam kueri yang lebih besar biaya naik untuk TOP dan kami melihat hit kinerja. Setiap bantuan debugging ini akan sangat dihargai dan kami bisa memberikan Anda informasi tambahan yang mungkin perlu Anda bantu.
sumber
TOP
Operator menyarankan non-nolSET ROWCOUNT
sebelumnya dieksekusi pada hubungan itu. Coba lagi dengan setelah menjalankanSET ROWCOUNT 0;
. Juga, versi SQL yang Anda posting bukan SQL 2008 R2. JalankanSELECT SERVERPROPERTY('ProductVersion');
di 2 server untuk mendapatkan versi SQL Server yang sebenarnya.GO
setelah baris rowcount. Bisakah Anda juga memposting properti operator Top?Jawaban:
Periksa untuk memastikan tingkat kompatibilitas basis data sama pada 2 server. Saya menjalankan tes cepat pada contoh SQL Server 2012 dan melihat operator TOP diperkenalkan jika tingkat kompatibilitasnya 100 atau lebih rendah. Kecuali Anda memiliki alasan khusus untuk melakukan sebaliknya, yang terbaik adalah menggunakan tingkat kompatibilitas 110 (SQL Server 2012) pada contoh SQL Server 2012.
sumber
Saya rasa Anda memiliki nilai untuk ROWCOUNT. Melakukan:
... untuk mematikannya.
sumber