Saya punya beberapa pertanyaan yang dipanggil dari aplikasi web C # .NET yang selalu cepat untuk saya (saya adalah admin lokal di SQL Server) tetapi untuk sekelompok pengguna (grup domain dengan izin yang diperlukan), permintaannya sangat lambat untuk titik itu habis dalam aplikasi.
Apa yang menyebabkan kueri yang sama persis berjalan berbeda untuk pengguna yang berbeda?
Info lebih lanjut:
- Permintaannya adalah SQL inline dalam kode C #, bukan prosedur tersimpan
- Aplikasi ini menggunakan otentikasi domain dan baik pengguna maupun saya sendiri menjalankan kueri melalui aplikasi
- Sepertinya masalah adalah paket yang berbeda dan ada yang di-cache sehingga itulah sebabnya berbeda untuk pengguna yang berbeda. Sesuatu memengaruhi cache karena sekarang permintaannya lambat untuk saya melalui aplikasi dan cepat di SQL Server Management Studio.
sql-server
sql-server-2008
performance
t-sql
Supergibbs
sumber
sumber
exact same query
), seharusnya tidak menjadi parameter sniffing (pengguna mendapatkan rencana yang buruk untuk parameter yang salah), tetapi pengguna mendapatkan rencana berbeda untuk parameter yang sama (s). Itu bisa karena pengaturan sepertiquoted_identifier
danarithabort
, yang dapat Anda bandingkansys.dm_exec_sessions
untuk pengguna cepat dan pengguna lambat, atau bisa juga karena mereka memiliki skema default yang berbeda dan objek direferensikan tanpa awalan skema. Parameter mengendus mungkin masih terlibat (karenanya mengapa salah satu dari mereka memiliki rencana yang buruk).Jawaban:
Jika parameternya sama (saya anggap itu yang dimaksud dengan
exact same query
), seharusnya tidak menjadi parameter sniffing (pengguna mendapatkan rencana yang buruk untuk parameter yang salah), tetapi pengguna mendapatkan rencana berbeda untuk parameter yang sama (s). Itu bisa karena pengaturan sepertiquoted_identifier
danarithabort
, yang dapat Anda bandingkansys.dm_exec_sessions
untuk pengguna cepat dan pengguna lambat, atau bisa juga karena mereka memiliki skema default yang berbeda dan objek direferensikan tanpa awalan skema. Parameter mengendus mungkin masih terlibat (karenanya mengapa salah satu dari mereka memiliki rencana yang buruk).sumber
Saya telah melihat dua alasan untuk ini: 1, parameter sniffing 2, pengaturan koneksi berbeda. Jika Anda menjalankan whoisactive , ia akan menunjukkan kepada Anda properti koneksi yang berbeda. Saya sebenarnya memiliki posting blog tentang ini, tetapi saya belum membersihkan informasi spesifik perusahaan darinya. (saya belum mengaktifkan blog saya);)
sumber
Coba: Tentukan skema pada setiap EXEC dan referensi tabel. Misalnya, EXEC dbo.MyProc
Mungkin ada konflik (seperti yang disarankan Martin Smith - 'skema default yang sama'?) Atau mengkompilasi ulang
sumber
Tampaknya ini adalah bug di SQL Server. Saya mengalami bug ini dengan SQL Server 2008. Saya belum menguji versi baru. Saya bisa masuk sebagai admin dan menjalankan kueri ini dan mendapatkan respons dalam 0 detik:
Lalu saya masuk sebagai pengguna dengan izin lebih sedikit, menjalankan kueri yang sama persis dan responsnya membutuhkan waktu 45 detik.
Ini konsisten berulang-ulang. Jika saya bolak-balik antara dua jendela kueri saya, satu untuk admin dan satu untuk non-admin, non-admin selalu membutuhkan waktu sekitar 45 detik dan admin membutuhkan waktu 0 detik.
sumber
select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME
konsisten mengembalikan data segera untuk login non-SA yang tidak memiliki hak akses yang diberikan sama sekali.