Dengan konstanta ini, apakah SQL Server akan selalu menghasilkan paket yang sama untuk permintaan yang diberikan? Jika tidak, apakah ada pertimbangan lain? Apakah ada unsur nondeterminisme yang perlu dipertimbangkan juga?
Kompilasi permintaan bersifat deterministik sejauh yang saya ketahui. Salah satu tujuan desain QO asli adalah bahwa itu harus memungkinkan untuk mereproduksi rencana eksekusi pada sistem yang berbeda menggunakan salinan database hanya statistik . Ada beberapa seluk-beluk untuk itu, di sekitar parameter konfigurasi seperti jumlah memori yang tersedia, dan jumlah prosesor logis, tetapi ini dicakup oleh daftar hal-hal yang akan disinkronkan.
Peringatan: Itu benar asalkan kata 'sama' dalam daftar Anda dianggap sama persis dalam semua hal . Sebagai contoh, statistik 'sama' mungkin ada pada kedua sistem, tetapi mereka hanya persis sama jika langkah histogram dan informasi kepadatan identik .
Yang mengatakan, proses optimisasi juga sangat kompleks , artinya bisa sulit untuk memastikan bahwa semua input untuk proses deterministik ini identik , dan bahwa semua keadaan internal cukup mirip untuk memastikan jalur kode yang sama diambil melalui pengoptimal untuk suatu tertentu kompilasi. Jika kueri berisi akses di luar database (ke database atau instance lain), lingkungan tersebut juga harus identik.
Satu hal yang akan saya tambahkan ke daftar Anda adalah untuk memeriksa apakah ada panduan paket di database kedua.
Penggunaan fungsi non-deterministik seperti GETDATE()
dalam kueri mungkin berarti Anda mendapatkan paket yang berbeda juga. Sementara pengoptimal utama tidak menggunakan nilai secara langsung, estimasi kardinalitas dapat (lihat Lipat Konstan dan Evaluasi Ekspresi Selama Estimasi Kardinalitas ). Saya tidak yakin apakah kelas perbedaan ini termasuk dalam ruang lingkup pertanyaan, karena kedua sistem akan menghasilkan rencana yang sama jika dijalankan pada waktu yang sama (atau, lebih umum, dengan variabel input, parameter, dan nilai fungsi yang sama).