SSRS ล็อคตารางเมื่อทำการสอบถามหรือไม่?


9

DBA อาวุโสของฉันบอกฉันว่าการประมวลผลแบบสอบถาม SQL โดยค่าเริ่มต้นจะไม่ล็อคตาราง

ฉันมีปัญหาบางอย่างกับรายงาน SQL Server Reporting Services (SSRS) ซึ่งดูเหมือนว่าจะมีปัญหาในการล็อคและรับข้อผิดพลาด

ฉันทำ Googling แล้ว แต่หาอะไรไม่เจอ

รายงาน SSRS ล็อคตารางที่กำลังสอบถามอยู่หรือไม่?

มีเอกสาร MSDN ใดที่บันทึกพฤติกรรมนี้โดยเฉพาะ?


เรามีปัญหาเดียวกัน แม้ว่าในทางเทคนิคจะไม่ใช่คำตอบสำหรับคำถามของคุณ แต่เราได้ทำการแก้ไขอย่างรวดเร็วโดยเริ่มต้นการสืบค้นชุดข้อมูลด้วยSET TRANSACTION ISOLATION LEVELตัวอย่างเช่นREAD UNCOMMITTEDหากคุณไม่รังเกียจที่จะเสี่ยงต่อการอ่านที่สกปรก
Jeroen

เช่นเดียวกับในอนาคตคุณสามารถเปลี่ยนเส้นทางการรายงานไปยังกลุ่มที่สองที่สามารถอ่านได้ด้วยกลุ่ม AlwaysOn Availability ใน SQL 2012 msdn.microsoft.com/en-us/library/hh882437.aspx
wBob

คำตอบ:


7

คำตอบสั้น ๆ : ไม่

อีกต่อไป ...

SQL Server ไม่ทราบว่าเป็น SSRS ส่งแบบสอบถาม ดังนั้นการค้นหาจาก SSRS จะทำงานเหมือนกับการสืบค้นอื่น ๆ

อาจเป็นไปได้ว่าตัวเพิ่มประสิทธิภาพคิวรีตัดสินใจใช้การล็อคตารางสำหรับคิวรี SSRS แน่นอนมันอาจเป็นปัญหาที่แตกต่างกัน แต่นั่นเป็นคำถามที่แตกต่าง


มม. ดังนั้น SRSS จึงพยายามล็อคตารางเมื่อทำการสอบถามหรือไม่
melaos

คำสั่ง T-SQL ส่งผลให้มีการล็อกบางประเภทหรือบางประเภทขึ้นอยู่กับคำสั่ง T-SQL มันไม่ได้ขึ้นอยู่กับว่าคำสั่งนั้นมาจากไหน (SSRS, หน้าต่างคิวรี, แอพ, ฯลฯ )
Eric Higgins

4

อาวุโสของฉันบอกฉันว่าสำหรับการดำเนินการแบบสอบถาม SQL โดยค่าเริ่มต้นไม่ล็อคตาราง

นี่เป็นเรื่องจริง อย่างไรก็ตามมันไม่ได้หมายความว่าแบบสอบถามไม่สามารถล็อคตารางได้

รายงาน SSRS จริงจะล็อคตารางใด ๆ ที่ถูกสอบถาม?

SSRS รับข้อมูลที่ใช้ในการเรนเดอร์รายงานโดยเรียกใช้คิวรีหรือกระบวนงานที่เก็บไว้กับฐานข้อมูล

นักพัฒนานี้ถูกกำหนดโดยแบบสอบถามและอาจสิ้นสุดการล็อคตาราง (หรือตาราง) ขึ้นอยู่กับระดับการแยกและจำนวนแถวที่เกี่ยวข้อง (อันที่จริงอาจมีบางกรณีที่คุณต้องการทำสิ่งนี้โดยเจตนา ) บรรทัดล่างคือขึ้นอยู่กับนักพัฒนาว่าการล็อกทำงานอย่างไรสำหรับคิวรี SSRS ไม่สามารถแก้ปัญหานี้ให้คุณได้ นั่นเป็นสาเหตุที่ไม่มีเอกสารใด ๆ

พิจารณา (ตัวอย่าง):

  • ใช้READ UNCOMMITTEDหากการอ่านที่สกปรกไม่เป็นไร
  • เปิดใช้งานและใช้ระดับการแยกสแนปชอต
  • บันทึกการจัดส่งในโหมดสแตนด์บายและเรียกใช้คิวรีกับสำเนาแบบอ่านอย่างเดียว

2

คุณจะรู้ได้อย่างไรว่ามีการล็อคใด ๆ เมื่อรายงานกำลังทำงานอยู่? ฉันขอแนะนำให้คุณตรวจสอบแบบสอบถาม / proc ที่เก็บไว้ซึ่งเป็นที่มาของรายงานและตรวจสอบให้แน่ใจว่าทำงานได้ดีด้วยตัวเอง

ถ้าคุณแน่ใจว่าแบบสอบถามต้นฉบับทำงานได้ดีให้ลองระบุปัญหาโดยใช้ Profiler ของเซิร์ฟเวอร์ SQL ลิงค์ด้านล่างอาจช่วยได้:
/programming/9107383/sql-server-profiler-capture-calls-to-your-databases-stored-procs-during-ssrs


เนื่องจากฉันเรียกใช้รายงานบนเบราว์เซอร์สองสามตัวและรายงานยังคงได้รับข้อผิดพลาดว่ากระบวนการถูกล็อกโดยไม่ได้ล็อก
melaos

ในกรณีนี้รายงานของคุณพยายามอ่านข้อมูลที่ถูกล็อคโดยผู้ใช้รายอื่น (เช่นมีคนกำลังอัปเดตระเบียนเดียวกัน) คุณสามารถเพิ่ม "โดยไม่มีการล็อก" ลงในคำสั่ง "เลือก" ทั้งหมดหากการอ่านข้อมูลที่ไม่มีข้อผูกมัดก็โอเค
Sky
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.