Apakah query lintas-basis data mahal di SQL Server?

15

Apakah query lintas-basis data mahal di SQL Server? Semua database berada dalam contoh yang sama.

Jonathan Allen
sumber
3
Saya belum pernah menemukan bukti bahwa itu benar, tidak. Satu-satunya pengecualian yang saya dapat pikirkan (tetapi belum diuji) adalah (a) bahwa pengoptimal tidak dapat mengambil manfaat dari hubungan yang tidak dapat secara eksplisit (mis. Dapat mengambil manfaat dari definisi kunci asing, yang tidak dapat ada lintas -database) atau (b) ada masalah dengan statistik yang menjadi masalah pada server yang ditautkan, tapi saya bayangkan mungkin ada kasus di mana bahkan di seluruh basis data pengguna yang menjalankan kueri tidak dapat melihat statistik. Tidak tahu apakah (b) nyata atau tidak - belum diuji, ketahuilah bahwa itu bisa menjadi masalah serius di seluruh server.
Aaron Bertrand
2
Saya dengan @AaronBertrand untuk yang ini, saya belum melihat apa pun yang secara definitif mengatakan ada hit besar. Satu-satunya hal yang bisa saya pikirkan adalah menambahkan sesuatu ke persamaan itu mungkin beberapa bentuk operasi otentikasi, tapi saya ragu itu akan signifikan. Itu hanya saya yang berpikir keras, saya tidak yakin. Taruhan terbaik Anda di sini adalah untuk membuat tes / benchmark otomatis dengan database-silang, kemudian dengan database-query yang sama dan menjalankan tes itu ribuan kali. Dapatkan rata-rata, maks, dll. Dan buat keputusan berdasarkan itu.
Thomas Stringer
1
@ Thomas dapatkah Anda melihat perbedaan secara pasti dengan melihat paket permintaan yang sebenarnya?
Max Vernon
@ Jonathan: definisi "mahal" relatif terhadap alternatif. Jadi, apa yang Anda coba lakukan dan apa yang Anda putuskan? Tanpa info lebih lanjut, sangat mungkin untuk mendapatkan jawaban yang tampaknya benar untuk pertanyaan ini, tetapi pada saat yang sama benar-benar salah untuk situasi Anda. Semuanya memiliki sebuah biaya, tetapi biaya yang bisa baik murah atau mahal tergantung pada apa yang Anda membandingkannya dengan. Dan biaya permintaan (yaitu waktu, pertikaian, dll) perlu dipertimbangkan terhadap biaya perawatan, biaya perangkat keras, dll.
Solomon Rutzky
Saya ingin mengetahui biaya dibandingkan dengan kueri di tabel yang sama.
Jonathan Allen

Jawaban:

6

Maaf, saya tidak memiliki reputasi yang cukup untuk mengomentari pertanyaan, tetapi dari pengalaman saya jika aplikasi klien meningkatkan transaksi untuk permintaan yang menggunakan cross database bergabung maka itu akan mempromosikan transaksi untuk didistribusikan dan memiliki overhead transaksi DTC .

Overhead DTC dalam hal ini dapat dipandang sebagai negatif terhadap kinerja. Secara umum perbedaan akan diabaikan meskipun Microsoft menggambarkan transaksi DTC sebagai berikut:

Transaksi yang didistribusikan biasanya menggunakan sumber daya sistem yang signifikan

Promosi Transaksi

... yang akan menyarankan penurunan kinerja jika server Anda tidak dapat menawarkan sumber daya yang diperlukan.

Hanya untuk memperjelas, artikel di atas menjelaskan transaksi lokal yang dipromosikan ketika sistem jarak jauh diperkenalkan, tetapi saya telah melihat ini menjadi kasus untuk transaksi di server yang sama ketika menggunakan kueri basis data lintas.

Seperti yang ditunjukkan oleh Thomas Stringer dalam komentarnya, akan ada overhead tambahan dalam otentikasi meskipun saya pikir karena ini akan didorong oleh SID akan ada overhead minimal di sana kecuali Anda harus menggunakan kredensial terpisah untuk mengakses database lain.

Jika ada perbedaan dalam pengaturan basis data yang menyebabkan overhead tambahan dalam gabungan yang dapat berdampak lebih besar dari saran sebelumnya - misalnya pengumpulan basis data. Database collation dapat bermanifestasi sebagai perbedaan fungsional, bukan hanya perbedaan kinerja.

Saya pikir Aaron memiliki argumen terkuat untuk kinerja dengan pengoptimal yang tidak memiliki keuntungan menggunakan hubungan untuk permintaan lintas-basis data sedangkan mandiri dalam database Anda dapat menggunakan hubungan untuk keuntungan Anda.

LeedsDBA
sumber
1
Artikel promosi transaksi adalah untuk transaksi CLR.
stacylaray
-2

Di SQL Server 2014, tabel yang dioptimalkan memori tidak mendukung transaksi lintas basis data. Anda tidak dapat mengakses database lain dari transaksi yang sama atau permintaan yang sama yang juga mengakses tabel yang dioptimalkan memori. Anda tidak dapat dengan mudah menyalin data dari tabel dalam satu database, ke tabel yang dioptimalkan memori di database lain. http://msdn.microsoft.com/en-us/library/dn584627(v=sql.120).aspx Transaksi yang didistribusikan dan lintas-basis data tidak didukung untuk mirroring database / AOAG. http://technet.microsoft.com/en-us/library/hh393530.aspx . Jika Anda akan menggunakan rantai kepemilikan, waspadai risiko keamanan http://msdn.microsoft.com/en-us/library/ms188676.aspx

stacylaray
sumber
Itu hanya berlaku untuk skenario yang "sumber daya yang menjangkau beberapa instance atau server". Dalam hal ini kita berbicara tentang satu contoh dengan banyak basis data.
Jonathan Allen
1
Buruk saya ... Saya melewatkan bagian tentang hal itu berada dalam contoh yang sama
stacylaray