Best Practices Analyzer Tool สำหรับ Microsoft SQL Server 2000 เป็นเครื่องมือจัดการฐานข้อมูลที่พัฒนาโดยทีมพัฒนา Microsoft SQL Server ที่ให้คุณตรวจสอบว่าฐานข้อมูลที่ออกแบบนั้นเป็นไปตามแนวทางปฏิบัติที่ดีที่สุดสำหรับการดำเนินการและการจัดการ SQL Server หรือไม่ แนวทางเหล่านี้ได้รับการยอมรับเพื่อช่วยปรับปรุงประสิทธิภาพและประสิทธิภาพของฐานข้อมูล และทำให้แอปพลิเคชันบำรุงรักษาง่ายขึ้น
2. เริ่มใช้ SQL BPA Best Practices Analyzer
หลังจากการติดตั้งเสร็จสิ้น จะมีเอกสาร Word ของ SQL Server Best Practices Analyzer อธิบายวิธีใช้งานอย่างละเอียด โดยมีขั้นตอนพื้นฐานดังนี้
(1) Log ใน SQL BPA
(2) เพิ่มการวิเคราะห์ / อินสแตนซ์ SQL Server ที่ตรวจพบ
คุณต้องป้อนชื่ออินสแตนซ์ของ SQL Server ที่นี่ ชื่อที่จำง่ายใช้เพื่อเชื่อมโยงกับกลุ่มแนวทางปฏิบัติที่ดีที่สุดที่สร้างขึ้นในภายหลัง (เพียงใช้ชื่อเดียวกับชื่ออินสแตนซ์ของ SQL Server ). ค่าเริ่มต้นของรายการฐานข้อมูลคือ * ซึ่งหมายความว่ารายการดังกล่าวประกอบด้วยฐานข้อมูลทั้งหมดของอินสแตนซ์ SQL Server ปัจจุบัน อย่างไรก็ตาม BPA จะข้ามการตรวจจับฐานข้อมูล เช่น 'master', 'tempdb', 'msdb', 'pubs' และ 'northwind'
(3) ในการจัดการ Best Practice Groups
คุณต้องสร้าง Best Practice Group ก่อน ซึ่งจริงๆ แล้วเป็นการรวมกฎบางอย่างและเชื่อมโยงกับอินสแตนซ์ SQL Server ที่ป้อนไว้ก่อนหน้านี้
(4) วิเคราะห์อินสแตนซ์ SQL Server
และย้าย Best Practice Group ที่สร้างไว้ก่อนหน้านี้ไปยังรายการ Best Practice Groups ที่จะดำเนินการ เพื่อให้สามารถดำเนินการได้ตามกฎที่กำหนดไว้ก่อนหน้านี้ และสร้างรายงานเพื่อให้คำแนะนำและแนวทางในการปรับปรุง
3. ฉันคิดว่ากฎที่รวมอยู่ใน SQL BPA v1.0
เป็นจุดสำคัญ เพราะเพียงทำความเข้าใจแนวทางปฏิบัติที่ดีที่สุดสำหรับการดำเนินการและการจัดการ SQL Server เท่านั้นที่เราจะสามารถลองปฏิบัติตามกฎเหล่านี้เมื่อออกแบบฐานข้อมูลและเขียนสคริปต์ T-SQL ปรับปรุงประสิทธิภาพและประสิทธิภาพของ SQL Server และแอพพลิเคชั่น
ในความเป็นจริง กฎทั้งหมดอยู่ที่นี่ (เวอร์ชันภาษาอังกฤษ) file:///C:/Program%20Files/Microsoft%20SQL%20Server%20Best%20Practices%20Analyzer/html/RuleInformation.html#_Rule:_Explicit_Index_Creation โปรดทราบว่า I ใช้ SQL BPA ได้รับการติดตั้งในเส้นทางเริ่มต้น หากคุณเปลี่ยนเส้นทางการติดตั้ง เส้นทางดังกล่าวจะไม่อยู่ที่นี่
ต่อไปนี้เป็นกฎบางข้อที่ฉันสนใจ:
(1)
กฎการออกแบบฐานข้อมูล: ตารางที่ไม่มีคีย์หลักหรือข้อจำกัดเฉพาะ
ตรวจสอบฐานข้อมูลเพื่อให้แน่ใจว่าตารางทั้งหมดมีการกำหนดคีย์หลักไว้ หรือคอลัมน์มีข้อจำกัดเฉพาะที่กำหนดไว้
กฎ: การตั้งชื่ออ็อบเจ็กต์ผู้ใช้ (การตั้งชื่ออ็อบเจ็กต์ผู้ใช้)
จะตรวจจับอ็อบเจ็กต์ผู้ใช้ที่ตั้งชื่อด้วยคำนำหน้า sp_, xp_ หรือ fn_ เพื่อหลีกเลี่ยงความขัดแย้งในการตั้งชื่อกับอ็อบเจ็กต์ในตัวของ SQL Server ถ้า SQL Server พบว่ากระบวนงานที่เก็บไว้นำหน้าด้วย sp_ นั้นจะทำแบบสอบถามกระบวนงานที่เก็บไว้ในฐานข้อมูลหลักก่อน ซึ่งส่งผลต่อประสิทธิภาพการทำงาน
ดังนั้นต้องปฏิบัติตามแนวทางต่อไปนี้:
ห้ามใช้คำนำหน้า sp_ เพื่อตั้งชื่อขั้นตอนที่เก็บไว้ที่ผู้
ใช้กำหนด ห้ามใช้คำนำหน้า xp_ เพื่อตั้งชื่อขั้นตอนที่เก็บไว้แบบขยายที่ผู้ใช้กำหนด
ห้ามใช้คำนำหน้า fn_ เพื่อตั้งชื่อฟังก์ชันที่ผู้ใช้กำหนด .
ในความเป็นจริง คุณสามารถตั้งชื่อได้โดยใช้คำนำหน้า เช่น usp_, uxp_ หรือ ufn_ และ u หมายถึงผู้ใช้กำหนด
(2)
กฎ T-SQL: รายการคอลัมน์เคอร์เซอร์ FOR UPDATE
ตรวจพบส่วนคำสั่ง FOR UPDATE ในขั้นตอนการจัดเก็บ ฟังก์ชัน มุมมอง และทริกเกอร์ เมื่อเคอร์เซอร์กำหนดส่วนคำสั่ง FOR UPDATE แนะนำให้จัดเตรียมคอลัมน์คอลัมน์ที่ชัดเจน FOR UPDATE ใช้เพื่อกำหนดคอลัมน์ที่สามารถอัพเดตได้ในเคอร์เซอร์ หากมีการระบุ OF column_name เฉพาะคอลัมน์ที่อยู่ในรายการเท่านั้นที่สามารถแก้ไขได้ หากไม่มีการระบุรายการคอลัมน์ คอลัมน์ทั้งหมดสามารถอัปเดตได้ เว้นแต่จะระบุตัวเลือกการทำงานพร้อมกันแบบ READ_ONLY SQL Server สามารถเพิ่มประสิทธิภาพการดำเนินการตามคอลัมน์ที่ระบุได้
กฎ: การใช้เคอร์เซอร์
จะตรวจสอบว่าความสามารถในการอัปเดตเคอร์เซอร์ถูกกำหนดอย่างถูกต้องในขั้นตอนที่เก็บไว้ ฟังก์ชัน มุมมอง และทริกเกอร์หรือไม่ ความล้มเหลวจะถูกรายงานในสถานการณ์ต่อไปนี้:
เมื่อเคอร์เซอร์ไม่ได้กำหนดคำสั่งย่อย FOR UPDATE แต่ถูกอัพเดตผ่านเคอร์เซอร์
เมื่อเคอร์เซอร์กำหนดคำสั่งย่อย FOR UPDATE แต่ไม่ได้รับการอัพเดตผ่านเคอร์เซอร์
อย่างไรก็ตาม โดยทั่วไปเราพยายามหลีกเลี่ยงการใช้เคอร์เซอร์ฝั่งเซิร์ฟเวอร์ เนื่องจากเคอร์เซอร์ใช้ทรัพยากรหน่วยความจำเซิร์ฟเวอร์และส่งผลต่อประสิทธิภาพของ SQL Server ข้อความค้นหาแบบซ้อนหรือคำสั่ง WHILE สามารถใช้แทนเคอร์เซอร์ได้ แม้ว่าคุณจะใช้เคอร์เซอร์ คุณก็ควรใส่ใจกับการกำหนดตัวเลือกเคอร์เซอร์บางตัว เช่น FAST_FORWARD
กฎ: การสร้างดัชนีที่ชัดเจน
ขอแนะนำให้ใช้ CLUSTERED หรือ NONCLUSTERED เพื่อสร้างดัชนีอย่างชัดเจน
กฎ: INSERT รายการคอลัมน์
กำหนดให้เมื่อใช้ INSERT รายการคอลัมน์จะต้องระบุไว้อย่างชัดเจนเพื่อปรับปรุงการบำรุงรักษาโค้ด
กฎ: การกำหนดค่าทริกเกอร์ที่ซ้อนกัน
จะตรวจจับทริกเกอร์ที่ไม่ถูกทริกเกอร์เนื่องจากปัญหาการกำหนดค่ากับทริกเกอร์ที่ซ้อนกัน อันนี้ค่อนข้างหายากดังนั้นฉันจึงโพสต์โดยตรง
เมื่อตั้งค่าตัวเลือกการกำหนดค่า 'ทริกเกอร์ที่ซ้อนกัน' เป็น 0 ทริกเกอร์ AFTER ใดๆ ที่กำหนดไว้ในตาราง/มุมมองที่อัปเดตภายในทริกเกอร์ INSTEAD OF จะไม่เริ่มทำงาน กฎนี้:
1) ตรวจสอบค่าของตัวเลือกการกำหนดค่าและออกหากไม่ใช่ 0
2) สแกนทริกเกอร์ INSTEAD OF ทั้งหมด และสร้างรายการตาราง/มุมมองที่เป็นเป้าหมายของ DML จากภายในทริกเกอร์
3) ตรวจสอบว่าเป้าหมาย DML ที่ระบุมีทริกเกอร์ AFTER ที่กำหนดไว้หรือไม่
4) รายงานการไม่ปฏิบัติตามข้อกำหนดดังกล่าว กรณี.
กฎ: ตัวเลือก NOCOUNT ในทริกเกอร์
จะตรวจจับทริกเกอร์และตรวจสอบให้แน่ใจว่า SET NOCOUNT ON ถูกเขียนไว้ด้านหน้าทริกเกอร์
SQL Server จะส่งข้อความ 'เสร็จสิ้น' หลังจากที่แต่ละคำสั่งถูกดำเนินการ ข้อมูลนี้อาจทำให้แอปพลิเคชันที่ทริกเกอร์ทริกเกอร์มีผลกระทบที่ไม่ได้ตั้งใจ ดังนั้นจึงเป็นนิสัยการออกแบบที่ดีที่จะเพิ่ม SET NOCOUNT ON ที่ด้านหน้าทริกเกอร์
แน่นอนว่า ขอแนะนำให้เพิ่ม SET NOCOUNT ON หน้าขั้นตอนและฟังก์ชันที่เก็บไว้ ด้วยวิธีนี้ จำนวนแถวที่ได้รับผลกระทบจากการดำเนินการชุดคำสั่ง SQL จะไม่ถูกส่งกลับไปยังไคลเอนต์ ช่วยลดการรับส่งข้อมูลเครือข่ายและปรับปรุงประสิทธิภาพ
กฎ: การเปรียบเทียบ NULL
ตรวจจับการเปรียบเทียบความเท่าเทียมกันหรือความไม่เท่าเทียมกันที่เกี่ยวข้องกับค่าคงที่ NULL ในขั้นตอนที่เก็บไว้ ฟังก์ชัน มุมมอง และทริกเกอร์ ขอแนะนำให้ตั้งค่า ANSI_NULLS เป็น ON และใช้คำหลัก IS เพื่อเปรียบเทียบค่าคงที่ NULL
กฎ: ผลลัพธ์ในทริกเกอร์
จะตรวจสอบทริกเกอร์เพื่อให้แน่ใจว่าทริกเกอร์ไม่มีข้อมูลที่ส่งคืนไปยังผู้โทร ดังนั้นจึงไม่แนะนำให้ใช้คำสั่งต่อไปนี้ในทริกเกอร์:
คำสั่ง PRINT
SELECT (ไม่มีการกำหนดหรือ INTO clause)
FETCH (ไม่มีการกำหนด)
กฎ: การกำหนดขอบเขตของธุรกรรม
จะตรวจจับช่วงของธุรกรรมในขั้นตอนการจัดเก็บและทริกเกอร์ ขอแนะนำให้จุดเริ่มต้นและจุดสิ้นสุดของธุรกรรมอยู่ภายในโครงสร้าง T-SQL เดียวกัน
โดยทั่วไป พยายามจำกัดขอบเขตของธุรกรรมให้แคบลงให้มากที่สุดเพื่อหลีกเลี่ยงการใช้ทรัพยากรจำนวนมาก และส่งผลกระทบต่อประสิทธิภาพการทำงานของ SQL Server
กฎ: SELECT *
ตรวจพบการใช้ SELECT * ในขั้นตอนการจัดเก็บ ฟังก์ชัน มุมมอง และทริกเกอร์ แม้ว่า SELECT * จะสะดวกกว่า แต่จะลดการบำรุงรักษาโปรแกรม การเปลี่ยนแปลงตารางหรือมุมมองอาจทำให้เกิดข้อผิดพลาดหรือการเปลี่ยนแปลงประสิทธิภาพ
ดังนั้นจึงขอแนะนำให้ระบุรายการฟิลด์ไว้อย่างชัดเจนหลังคำสั่ง SELECT
กฎ: SET Options
ตรวจพบการใช้คำสั่ง SET ต่อไปนี้ในขั้นตอนการจัดเก็บและทริกเกอร์
ขอแนะนำให้ตั้งค่าตัวเลือกต่อไปนี้เป็นเปิด:
ANSI_NULLS
ANSI_PADDING
ANSI_WARNINGS
อาริธาบอร์ต
CONCAT_NULL_YIELDS_NULL
QUOTED_IDENTIFIER
แนะนำให้ตั้งค่าตัวเลือกต่อไปนี้เป็นปิด:
กฎNUMERIC_ROUNDABOUT
: การใช้ตารางชั่วคราว
ตรวจพบการใช้ตารางชั่วคราวในขั้นตอนการจัดเก็บและทริกเกอร์ เมื่อสร้างตารางชั่วคราว จะต้องสร้าง CREATE INDEX และหลังจากการใช้งานเสร็จสิ้น จะต้องปล่อยตารางชั่วคราว
เนื่องจากตารางชั่วคราวจะสร้างการดำเนินการ IO ของดิสก์จำนวนมาก จึงแนะนำให้ใช้ตัวแปร TABLE เพื่อแทนที่การใช้ตารางชั่วคราว
อย่างไรก็ตาม เนื่องจากข้อจำกัดของการดำเนินการพร้อมกันและการบำรุงรักษาข้อมูลทางสถิติ จึงยังคงแนะนำให้ใช้ตารางชั่วคราวเมื่อมีการแทรกข้อมูลจำนวนมากลงในตารางชั่วคราว
กฎ: TOP ที่ไม่มี ORDER BY
ตรวจพบการขาดคำสั่ง ORDER BY TOP ในขั้นตอนการจัดเก็บ ฟังก์ชัน มุมมอง และทริกเกอร์ เมื่อใช้คำสั่ง TOP แนะนำให้ระบุเงื่อนไขการเรียงลำดับ มิฉะนั้น ผลลัพธ์ที่ได้จะขึ้นอยู่กับแผนการดำเนินการ SQL และนำไปสู่ลักษณะการทำงานที่ไม่คาดคิด
กฎ: การใช้ Schema Qualified Tables/Views
จะตรวจจับว่ามีการระบุเจ้าของหรือไม่เมื่อมีการอ้างอิงตารางและมุมมองในขั้นตอนการจัดเก็บ ฟังก์ชัน มุมมอง และทริกเกอร์ แม้ว่าเมื่ออ้างอิงวัตถุเฉพาะใน SQL Server คุณไม่จำเป็นต้องระบุเซิร์ฟเวอร์ ฐานข้อมูล และเจ้าของ (สคีมา) ซึ่งหมายความว่าคุณไม่จำเป็นต้องมีปัญหากับ server_name.database_name.owner_name.*** แต่ SQL Server แนะนำว่า มันถูกใช้ในขั้นตอนการจัดเก็บ ฟังก์ชัน เมื่ออ้างอิงตารางหรือมุมมองในมุมมองหรือทริกเกอร์ วิธีที่ดีที่สุดคือระบุเจ้าของตารางหรือมุมมอง
เมื่อ SQL Server สอบถามวัตถุตาราง/มุมมองโดยไม่มีเจ้าของที่ระบุ อันดับแรกจะสอบถามเจ้าของเริ่มต้น จากนั้นจึง dbo ซึ่งจะส่งผลให้มีต้นทุนการดำเนินงานเพิ่มเติมสำหรับผลิตภัณฑ์ SQL Server โดยการระบุเจ้าของ คุณสามารถปรับปรุงประสิทธิภาพของ SQL Server ได้ (ครั้งแรกที่ได้ยินคำพูดนี้)
4. เอกสารอ้างอิงและ
เครื่องมือทรัพยากรที่เกี่ยวข้องดาวน์โหลด URL:
ดาวน์โหลดวิดีโอ: