Permintaan lambat untuk pengguna tertentu

11

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.
Supergibbs
sumber
2
Periksa pertanyaan-pertanyaan berikut . Anda mungkin menemukan Anda dalam situasi yang sama. Katakanlah pertama coba yang ini dan yang lainnya .
Marian
3
Apa saja jenis menunggu (sys.dm_os_waiting_tasks) pada permintaan lambat, dan juga apa rencana eksekusi aktual dari masing-masing (cepat Anda, lambat mereka)?
Thomas Stringer
2
Setuju dengan komentar sebelumnya. Pikiran pertama saya akan menjadi parameter sniffing juga. Memeriksa untuk melihat apakah rencana berbeda harus menjadi langkah pertama.
Martin Smith
4
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 seperti quoted_identifierdan arithabort, yang dapat Anda bandingkan sys.dm_exec_sessionsuntuk 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).
Aaron Bertrand
1
RE: Suntingan Anda apakah Anda memiliki skema default yang sama dengan pengguna lain? Sudahkah Anda menangkap rencana eksekusi untuk menjalankan lambat dan cepat?
Martin Smith

Jawaban:

5

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 seperti quoted_identifierdan arithabort, yang dapat Anda bandingkan sys.dm_exec_sessionsuntuk 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).

Aaron Bertrand
sumber
3

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);)

rottengeek
sumber
0

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

Kip Bryan
sumber
0

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:

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

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.

Rob Kraft
sumber
Seperti yang ditanyakan dalam komentar pada pertanyaan - apakah kedua pengguna memiliki database default yang sama, dan apakah pertanyaan dijalankan di database yang sama? Dan, dapatkah Anda menunjuk pada semacam dokumentasi yang menyatakan ini adalah bug, atau apakah itu pendapat Anda? Bukan mengatakan Anda salah, hanya mencari sesuatu di luar anekdot.
RDFozz
Masalah yang Anda identifikasi dalam jawaban Anda tampaknya tidak dapat diulang pada SQL Server 2008. Secara select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAMEkonsisten mengembalikan data segera untuk login non-SA yang tidak memiliki hak akses yang diberikan sama sekali.
Max Vernon