ความแตกต่างระหว่างผลลัพธ์ของกระบวนการเรียกที่เก็บไว้จาก MS SQL SERVER และ MS ACCESS

SP คือ RecordSource ของแบบฟอร์ม เมื่อเปิดแบบฟอร์ม SP ดำเนินการและหลังจากการหมดเวลาของการสืบค้น การเชื่อมต่อจะปิดลงโดยไม่มีอะไรเลย ถ้า SP ดำเนินการจาก SSMS จะดำเนินการประมาณ 2 วินาทีและส่งกลับชุดของระเบียน ขณะที่ฉันดูผ่านการเรียก SSMS Profiler นั้นเหมือนกัน แต่จำนวนการอ่าน (การดำเนินการจาก Access) > 28 ล้านและประมาณ 70,000 จาก SSMS ช่วยฉันที ฉันสับสน หน้าจอที่มีตัวสร้างโปรไฟล์ http://take.ms/u7tTy


person anatol    schedule 28.04.2016    source แหล่งที่มา
comment
แค่เดาที่นี่: Count of Reads != Count of Rows อาจเป็นปัญหากับแผนการสืบค้นที่ไม่ถูกต้องสำหรับ SP ที่ทำให้เกิดสิ่งนี้ เช่น การดมกลิ่นพารามิเตอร์   -  person tobypls    schedule 28.04.2016
comment
@BIDeveloper มีการอ่าน 28 ล้านครั้งจาก Access   -  person anatol    schedule 28.04.2016
comment
Could be an issue with bad query plans for the SP causing this, such as parameter sniffing. @tobypls มันหมายความว่าอะไร?   -  person anatol    schedule 28.04.2016
comment
@anatol ดูที่ stackoverflow.com/questions/6585417/ (เว็บในกรณีนี้คล้ายกับ MS Access ในกรณีของคุณ)   -  person tobypls    schedule 28.04.2016
comment
มันจะช่วยได้ถ้าคุณโพสต์รูปภาพหน้าจอของเอาต์พุต SQL Server Profiler   -  person RichardCL    schedule 28.04.2016
comment
@ richard345 ฉันไม่มีชื่อเสียงในการโพสต์ภาพ รับลิงค์   -  person anatol    schedule 29.04.2016


คำตอบ (1)


@tobypls
ขอบคุณมาก - ลิงก์ของคุณมีประโยชน์
วิธีแก้ไขง่ายๆ คือเขียนใหม่ (ตัวอย่าง)

จาก

ALTER PROCEDURE [dbo].[sproc] 
@param1 int,  
AS  
SELECT * FROM Table WHERE ID = @param1  

to

ALTER PROCEDURE [dbo].[sproc] 
@param1 int,
AS
DECLARE @param1a int
SET @param1a = @param1
SELECT * FROM Table WHERE ID = @param1a  

ฉันได้รับจากโพสต์นี้

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

person anatol    schedule 29.04.2016