Apakah SSRS mengunci tabel saat query?

9

DBA senior saya memberi tahu saya bahwa eksekusi SQL Query secara default tidak mengunci tabel.

Saya mengalami beberapa masalah dengan laporan SQL Server Reporting Services (SSR) yang sepertinya mendapatkan beberapa masalah dengan penguncian dan mendapatkan beberapa kesalahan.

Saya melakukan beberapa Googling tetapi gagal menemukan apa pun.

Apakah laporan SSR mengunci tabel yang sedang ditanyai?

Apakah ada dokumentasi MSDN yang mendokumentasikan perilaku ini secara khusus?

melaos
sumber
Kami memiliki masalah yang sama. Meskipun secara teknis bukan jawaban untuk pertanyaan Anda, kami melakukan perbaikan cepat dengan memulai permintaan dataset dengan SET TRANSACTION ISOLATION LEVELmisalnya READ UNCOMMITTEDjika Anda tidak keberatan mengambil risiko beberapa pembacaan kotor.
Jeroen
Sama seperti catatan untuk masa depan, Anda dapat mengalihkan beban pelaporan ke sekunder yang dapat dibaca dengan Grup Ketersediaan AlwaysOn di SQL 2012. msdn.microsoft.com/en-us/library/hh882437.aspx
wBob

Jawaban:

7

Jawaban singkat: Tidak

Lebih lama ...

SQL Server tidak tahu bahwa itu SSR yang mengirimkan kueri. Jadi kueri dari SSRS akan berjalan seperti kueri lainnya.

Kemungkinan besar pengoptimal kueri memutuskan untuk menggunakan kunci tabel untuk kueri SSR. tentu saja, itu bisa menjadi masalah yang berbeda, tapi itu pertanyaan yang berbeda

gbn
sumber
mm jadi apakah SRSS mencoba untuk mengunci tabel ketika melakukan query?
melaos
Pernyataan T-SQL menghasilkan beberapa jenis kunci atau lainnya, tergantung pada pernyataan T-SQL. Itu tidak tergantung pada tempat pernyataan itu berasal (SSRS, jendela permintaan, aplikasi, dll)
Eric Higgins
4

senior saya mengatakan kepada saya bahwa untuk eksekusi SQL Query secara default tidak mengunci tabel.

Ini benar. Namun, itu tidak berarti permintaan tidak dapat mengunci tabel.

apakah laporan SSR sebenarnya akan mengunci tabel apa pun yang sedang ditanyai?

SSRS mendapatkan data yang digunakan untuk membuat laporan dengan menjalankan kueri atau prosedur tersimpan terhadap database.

Kueri ini ditentukan oleh pengembang, dan mungkin pada akhirnya mengunci tabel (atau tabel), tergantung pada tingkat isolasi dan berapa banyak baris yang terlibat. (Bahkan, mungkin ada kasus di mana Anda ingin melakukan ini dengan sengaja .) Intinya adalah terserah pengembang bagaimana penguncian bekerja untuk kueri. SSR tidak dapat menyelesaikan masalah ini untuk Anda. Itu sebabnya tidak ada dokumentasi.

Pertimbangkan (misalnya):

  • Menggunakan READ UNCOMMITTEDjika bacaan kotor tidak apa-apa
  • Mengaktifkan dan menggunakan level isolasi snapshot
  • Log pengiriman dalam mode Siaga, dan menjalankan kueri terhadap salinan hanya-baca
Jon Seigel
sumber
2

Bagaimana Anda tahu bahwa ada kunci ketika laporan sedang berjalan? Saya menyarankan Anda untuk memeriksa kueri / simpanan tersimpan yang merupakan sumber laporan dan memastikannya berfungsi dengan baik.

Jika Anda yakin kueri sumber berfungsi dengan baik, cobalah untuk menunjukkan masalah dengan menggunakan profiler server SQL. Tautan di bawah ini mungkin membantu:
/programming/9107383/sql-server-profiler-capture-calls-to-your-databases-stored-procs-during-ssrs

Langit
sumber
karena saya sedang menjalankan laporan pada beberapa browser dan laporan tersebut terus mendapatkan kesalahan bahwa ada proses terkunci dengan mati terkunci.
melaos
Dalam hal itu, kemungkinan besar laporan Anda mencoba membaca data yang dikunci oleh pengguna lain (misalnya seseorang memperbarui catatan yang sama). Anda dapat menambahkan "tanpa kunci" ke semua pernyataan "Pilih", jika membaca data yang tidak dikomit ok.
Langit