รายการที่ชัดเจนของขั้นตอนสำหรับการทดสอบพื้นฐานของ SQL Server?


10

ก่อนเรียกใช้การทดสอบประสิทธิภาพ / พื้นฐานสำหรับแอปที่ใช้ SQL Server ฉันต้องการให้สามารถตั้งค่าอินสแตนซ์เป็นสถานะ "ใหม่ทั้งหมด" โดยไม่ต้องเริ่มต้นอินสแตนซ์ใหม่ มีขั้นตอนที่ฉันมักจะทำตาม แต่ฉันต้องการสร้างรายการที่ชัดเจนที่อยู่ในลำดับที่ถูกต้องและไม่มีขั้นตอนซ้ำซ้อน

รายการขั้นตอนนี้ทำให้การตั้งค่า SQL Server เป็นสถานะ "สะอาด" หรือไม่

ลำดับลอจิก / ถูกต้องหรือไม่?

มีขั้นตอนที่ซ้ำซ้อนหรือไม่?

CHECKPOINT              -- Write all dirty pages

DBCC DROPCLEANBUFFERS   -- All should be clean after checkpoint?

DBCC FREEPROCCACHE      -- Clear the plan cache

DBCC FREESYSTEMCACHE    -- Is this necessary after FREEPROCCACHE?

DBCC FREESESSIONCACHE   -- May not be necessary if distributed queries aren't used, but want to catch all scenarios

EXEC SP_UPDATESTATS     -- Refresh stats

'BEGIN TESTING!'

5
FYI DROPCLEANBUFFERSเป็นสิ่งที่ดีสำหรับการทดสอบ แต่ไม่แม่นยำเสมอไป หากคุณกำลังอ้างถึงตารางปริมาณสูงเป็นไปได้มากที่คุณจะมีหน้าเว็บในหน่วยความจำเกือบตลอดเวลาและเวลา IO จะไม่เป็นปัจจัยใหญ่ในแบบสอบถาม คุณอาจวางน้ำหนักให้กับ IO มากกว่าที่เป็นจริงในกรณีนั้น
JNK

คุณกำลังพูดถึงการทดสอบในสภาพแวดล้อมการผลิตหรือสภาพแวดล้อมการทดสอบที่แยกได้หรือไม่?
bopapa_1979

ทุกคนที่ทดสอบในสภาพแวดล้อม Prod ควรถูกไล่ออก ใช่ครับทดสอบสภาพแวดล้อม
Eric Higgins

คำตอบ:


5

ก่อนอื่นฉันจะย้อนกลับไปและถามว่าคุณต้องการเก็บค่าการวัดใดในระหว่างการทดสอบ หากคุณกำลังนับการอ่านเชิงตรรกะด้วยข้อความค้นหาคุณไม่จำเป็นต้องเพิ่มแคช ฉันเป็นแฟนตัวยงของการใช้การอ่านแบบลอจิคัลเนื่องจากเป็นอิสระจากข้อมูลที่เก็บไว้หรือบนดิสก์ - และในการผลิตมันยากที่จะเดาว่าข้อมูลของแบบสอบถามจะถูกแคชหรือไม่ (เว้นแต่คุณจะแคชฐานข้อมูลทั้งหมดในหน่วยความจำ) . หากคุณปรับแต่งเพื่อลดการอ่านเชิงตรรกะให้น้อยที่สุดแอปจะทำงานเร็วขึ้นไม่ว่าข้อมูลจะอยู่ในแคชหรือไม่ก็ตาม

ต่อไปฉันจะถามสิ่งที่เปลี่ยนแปลงระหว่างการวิ่ง ตัวอย่างเช่นการรัน EXEC SP_UPDATESTATS ในแต่ละฐานข้อมูลตามที่คุณแนะนำคุณจะต้องสุ่มตัวอย่างสถิติสำหรับตารางที่ได้รับการอัปเดตใหม่ อย่างไรก็ตามยกเว้นว่าคุณกำลังอัปเดตสถิติด้วย fullscan คุณจะได้รับแถวสุ่มจากตารางซึ่งไม่สามารถทำซ้ำได้และฉันไม่คิดว่าคุณต้องการทำเช่นนั้น แต่คุณอาจต้องการกู้คืนฐานข้อมูลระหว่างการทดสอบแต่ละครั้งเพื่อให้คุณทดสอบข้อมูลที่เหมือนกันทุกครั้ง หากการทดสอบของคุณทำการแทรก / อัปเดต / ลบการทดสอบเหล่านั้นอาจมีโปรไฟล์ประสิทธิภาพที่แตกต่างกันในแต่ละการทำงานหากคุณไม่ได้กู้คืนฐานข้อมูล (เพราะพวกเขากำลังเพิ่ม / เปลี่ยนแปลงข้อมูลรวมถึงการเปลี่ยนแปลงสถิติของข้อมูล)


คะแนนที่ดีมากเป้าหมายคือการมีทุกอย่างเหมือนกันระหว่างวิ่ง การวัดที่ฉันทำในกรณีนี้คือ @ hand เป็นเวลาทำงานสำหรับฟังก์ชั่นเฉพาะในแอป (x วินาทีเพื่อกลับรายการไปยังแอป, y วินาทีเพื่อเพิ่มรายการคิว ฯลฯ ) สิ่งที่เปลี่ยนแปลงระหว่างการทดสอบอาจเป็นชิ้นส่วนของรหัสแอปไม่ใช่วัตถุ SQL วัตถุ SQL และไม่ใช่รหัสแอปหรือการตั้งค่าระดับอินสแตนซ์ / DB เช่นการทำงานพร้อมกันโดยไม่มีการเปลี่ยนแปลงโค้ดแอป ถ้าฉันจะเพิ่มการคืนค่าออกจากเกตก่อนการทดสอบแต่ละครั้งคุณรู้สึกอย่างไรเกี่ยวกับรายการของฉันที่เหนือ @ จุดนั้น? ฉันขาดอะไรไปหรือลำดับต้องการงานบางอย่าง?
Eric Higgins

เบรนต์คุณรับ CPU ของบัญชีในการทดสอบหรือไม่?
AK

@EricHiggins แทนที่จะทดสอบหลาย ๆ อย่างพร้อมกันฉันจะทดสอบแต่ละรายการ ฉันควรทดสอบการค้นหาโดยตรงและดูว่าการเปลี่ยนแปลงมีผลกระทบกับประสิทธิภาพที่นั่น ตัวอย่างเช่นรันการติดตาม SQL ในขณะที่ทำหน้าที่เฉพาะในแอพจากนั้นทำการเล่นซ้ำการติดตามนั้นในขณะที่ทำการเปลี่ยนแปลงดัชนี / กำหนดค่าเพื่อปรับปรุงประสิทธิภาพการทำงานและดูสิ่งต่าง ๆ เช่นการอ่านเชิงตรรกะและการวัด CPU ในการติดตาม
เบรนต์โอซาร์

@AlexKuznetsov ฉันไม่ใช่คนที่ทำการทดสอบจริง ๆ แล้ว - Eric เป็นคนที่ถามคำถาม เมื่อฉันทำงานประเภทนี้ฉันจะดูการวัดของ CPU ที่ระดับการสืบค้นรวมถึงเซิร์ฟเวอร์โดยรวม
เบรนต์โอซาร์

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