ข้อความค้นหาช้าสำหรับผู้ใช้บางราย


11

ฉันมีแบบสอบถามสองสามข้อที่เรียกจากแอปพลิเคชันเว็บ C # .NET ซึ่งรวดเร็วสำหรับฉันเสมอ (ฉันเป็นผู้ดูแลระบบภายใน SQL Server) แต่สำหรับกลุ่มผู้ใช้ (กลุ่มโดเมนที่มีสิทธิ์ที่จำเป็น) แบบสอบถามนั้นช้ามาก จุดที่มันหมดเวลาในแอปพลิเคชัน

อะไรจะทำให้การค้นหาเดียวกันที่แน่นอนนั้นทำงานต่างกันสำหรับผู้ใช้ที่ต่างกัน

ข้อมูลเพิ่มเติม:

  • แบบสอบถามเป็นแบบอินไลน์ SQL ในรหัส C # ไม่ใช่ขั้นตอนการจัดเก็บ
  • แอปใช้การรับรองความถูกต้องของโดเมนและทั้งผู้ใช้และตัวฉันเองเรียกใช้แบบสอบถามผ่านแอป
  • ดูเหมือนว่าปัญหานี้เป็นแผนที่แตกต่างกันและมีการแคชหนึ่งครั้งดังนั้นจึงเป็นเหตุผลที่แตกต่างกันสำหรับผู้ใช้ที่ต่างกัน มีบางอย่างที่ส่งผลต่อแคชเพราะตอนนี้คิวรีช้าสำหรับฉันผ่านแอปและรวดเร็วใน SQL Server Management Studio

2
ตรวจสอบคำถามดังต่อไปนี้ คุณอาจพบว่าคุณอยู่ในสถานการณ์เดียวกัน สมมติว่าก่อนอื่นลองอันนี้และอันอื่นก่อน
แมเรียน

3
ชนิดของการรอ (sys.dm_os_waiting_tasks) ในการสืบค้นแบบช้า (ies) คืออะไรและแผนการดำเนินการจริงของแต่ละรายการคืออะไร (เร็วของคุณช้า)
Thomas Stringer

2
เห็นด้วยกับความคิดเห็นก่อนหน้า ความคิดแรกของฉันก็คือการดมพารามิเตอร์ การตรวจสอบเพื่อดูว่าแผนแตกต่างกันควรเป็นขั้นตอนแรก
Martin Smith

4
หากพารามิเตอร์เหมือนกัน (ฉันสมมติว่านั่นคือสิ่งที่มีความหมายexact same query) มันไม่ควรเป็นการดมกลิ่นพารามิเตอร์ (ผู้ใช้ได้รับแผนการที่ไม่ถูกต้องสำหรับพารามิเตอร์ที่ไม่ถูกต้อง) แต่ผู้ใช้ค่อนข้างได้รับแผนการแตกต่างกันสำหรับพารามิเตอร์เดียวกัน (s) อาจเป็นเพราะการตั้งค่าเช่นquoted_identifierและarithabortซึ่งคุณสามารถเปรียบเทียบsys.dm_exec_sessionsสำหรับผู้ใช้ที่รวดเร็วและผู้ใช้ที่ช้าหรืออาจเป็นเพราะพวกเขามีสกีมาเริ่มต้นและวัตถุที่แตกต่างกันมีการอ้างอิงโดยไม่มีคำนำหน้าสคี การดมกลิ่นพารามิเตอร์อาจยังเกี่ยวข้อง (ดังนั้นทำไมหนึ่งในนั้นมีแผนไม่ดี)
Aaron Bertrand

1
RE: การแก้ไขของคุณคุณมีสคีมาเริ่มต้นเหมือนกับผู้ใช้รายอื่นหรือไม่ คุณได้บันทึกแผนการดำเนินการสำหรับการทำงานที่ช้าและเร็วหรือยัง
Martin Smith

คำตอบ:


5

หากพารามิเตอร์เหมือนกัน (ฉันสมมติว่านั่นคือสิ่งที่มีความหมายexact same query) มันไม่ควรเป็นการดมกลิ่นพารามิเตอร์ (ผู้ใช้ได้รับแผนการที่ไม่ถูกต้องสำหรับพารามิเตอร์ที่ไม่ถูกต้อง) แต่ผู้ใช้ค่อนข้างได้รับแผนการแตกต่างกันสำหรับพารามิเตอร์เดียวกัน (s) อาจเป็นเพราะการตั้งค่าเช่นquoted_identifierและarithabortซึ่งคุณสามารถเปรียบเทียบsys.dm_exec_sessionsสำหรับผู้ใช้ที่รวดเร็วและผู้ใช้ที่ช้าหรืออาจเป็นเพราะพวกเขามีสกีมาเริ่มต้นและวัตถุที่แตกต่างกันมีการอ้างอิงโดยไม่มีคำนำหน้าสคี การดมกลิ่นพารามิเตอร์อาจยังเกี่ยวข้อง (ดังนั้นทำไมหนึ่งในนั้นมีแผนไม่ดี)


3

ฉันได้เห็นสองเหตุผลนี้: 1, ดมกลิ่นพารามิเตอร์ 2, การตั้งค่าการเชื่อมต่อจะแตกต่างกัน หากคุณเรียกใช้ข้อมูลที่มีการโต้ตอบมันจะแสดงคุณสมบัติการเชื่อมต่อที่แตกต่างกัน จริงๆแล้วฉันมีโพสต์บล็อกในเรื่องนี้ แต่ฉันไม่ได้ล้างข้อมูลเฉพาะ บริษัท จากมัน (ฉันไม่ได้เปิดใช้งานบล็อกของฉัน);)


0

ลอง: ระบุสคีมาในทุก EXEC และการอ้างอิงตาราง เช่น EXEC dbo.MyProc

อาจมีข้อขัดแย้ง (ตามที่ Martin Smith แนะนำ - 'schema เริ่มต้นเดียวกัน'?) หรือคอมไพล์ใหม่


0

สิ่งนี้ดูเหมือนจะเป็นบั๊กใน SQL Server ฉันพบข้อผิดพลาดนี้กับ SQL Server 2008 ฉันยังไม่ได้ทดสอบเวอร์ชันใหม่ ฉันสามารถเข้าสู่ระบบในฐานะผู้ดูแลและเรียกใช้แบบสอบถามนี้และได้รับการตอบกลับใน 0 วินาที:

select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAME

จากนั้นฉันเข้าสู่ระบบในฐานะผู้ใช้ที่มีสิทธิ์น้อยลงเรียกใช้แบบสอบถามเดียวกันที่แน่นอนและการตอบสนองใช้เวลา 45 วินาที

นี่คือความสอดคล้องกันซ้ำแล้วซ้ำอีก หากฉันย้อนกลับไปมาระหว่างหน้าต่างแบบสอบถามทั้งสองของฉันหน้าต่างหนึ่งสำหรับผู้ดูแลระบบและอีกหน้าต่างหนึ่งสำหรับผู้ที่ไม่ใช่ผู้ดูแลระบบผู้ที่ไม่ใช่ผู้ดูแลระบบจะใช้เวลาประมาณ 45 วินาทีและผู้ดูแลระบบจะใช้เวลา 0 วินาที


ตามที่ถามในความคิดเห็นต่อคำถาม - ผู้ใช้ทั้งสองมีฐานข้อมูลเริ่มต้นเหมือนกันหรือไม่และมีการดำเนินการค้นหาในฐานข้อมูลเดียวกันหรือไม่ และคุณสามารถชี้ไปที่เอกสารบางประเภทที่ระบุว่านี่เป็นข้อบกพร่องหรือเป็นความคิดเห็นของคุณหรือไม่? ไม่ได้บอกว่าคุณผิดเพียงแค่มองหาสิ่งที่นอกเหนือจากเรื่องเล็ก ๆ น้อย ๆ
RDFozz

ปัญหาที่คุณระบุไว้ในคำตอบของคุณดูเหมือนจะไม่สามารถทำซ้ำได้ใน SQL Server 2008 select ROUTINE_NAME from INFORMATION_SCHEMA.ROUTINES ORDER BY ROUTINE_NAMEจะส่งคืนข้อมูลอย่างสม่ำเสมอสำหรับการเข้าสู่ระบบที่ไม่ใช่ SA ซึ่งไม่มีสิทธิ์ในการอธิบายอย่างชัดเจนเลย
Max Vernon
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.