วิธีตอบว่าทำไมเราต้องมีดัชนีหรือแบบสอบถามต้องเปลี่ยน


11

ฉันเป็นจูเนียร์ DBA ที่มีประสบการณ์ 3 ปี งานของเราคือการปรับแต่งแบบสอบถามหรือให้คำแนะนำกับนักพัฒนาว่าควรเขียนโค้ดเฉพาะหรือดัชนีใหม่

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

เราควรตอบคำถาม "สิ่งที่เปลี่ยนแปลง" โดยทีมพัฒนาอย่างไร พวกคุณเคยเผชิญกับสถานการณ์เดียวกันหรือไม่? ถ้าเป็นเช่นนั้นโปรดแบ่งปันประสบการณ์ของคุณ

คำตอบ:


10

จะตอบคำถามที่เปลี่ยนแปลงโดย dev อย่างไร

นี่เป็นคำถามที่พบบ่อยมากไม่เพียง แต่มี DEV เท่านั้น แต่ยังนำไปใช้กับทุกทีมในด้านไอทีและธุรกิจ

มีอะไรเปลี่ยนแปลง ==> สามารถตอบได้โดยข้อเท็จจริงและตัวเลข

ข้อเท็จจริงอ้างถึงตัวอย่าง

  • เพิ่มจำนวนผู้ใช้ที่เข้าถึงฐานข้อมูลหรือไม่
  • การเปลี่ยนแปลงใด ๆ ในพารามิเตอร์การกำหนดค่าเซิร์ฟเวอร์?
  • การบำรุงรักษาฐานข้อมูล - อัพเดตสถิติ, ไม่สามารถสร้างดัชนีใหม่ / สร้างใหม่? เนื่องจากแผนนี้ถูกสร้างขึ้นอย่างไม่ถูกต้อง!
  • จำนวนข้อมูลเพิ่มขึ้น?
  • มีการเปลี่ยนแปลงทางด้านเครือข่ายระบบปฏิบัติการได้รับการติดตั้งและ / หรือเซอร์วิสแพ็คใหม่หรือ CU สำหรับเซิร์ฟเวอร์ sql ถูกปรับใช้โดยไม่ทำการทดสอบการถดถอยแบบเต็มของวงจรธุรกิจแอปพลิเคชันของคุณหรือไม่
  • SAN พื้นฐานช้าลงอย่างกระทันหันหรือไม่

สามารถรับตัวเลขได้หากคุณมีข้อมูลที่จะแสดง ตัวอย่างเช่น :

  • การกำหนดเซิร์ฟเวอร์ของคุณเป็นสิ่งสำคัญในระหว่างสถานการณ์นี้ เกมนี้จะช่วยลดความผิดพลาดเนื่องจากคุณสามารถรองรับข้อเท็จจริงด้วยตัวเลขที่แข็ง
  • เริ่มรวบรวมข้อมูลโดยใช้ DMVs หรือ sp_whoisactive กับตารางเพื่อให้ข้อมูลได้รับการคงอยู่หลังจากรีบูตเซิร์ฟเวอร์ sql

(คุณต้องออกกำลังกายตามสภาพแวดล้อมและความต้องการของคุณบ่อยแค่ไหนในการเก็บรวบรวมข้อมูล / ข้อมูลที่จะรวบรวมและระยะเวลาเก็บรักษาเท่าไหร่)หรือ(คุณสามารถลงทุนในซอฟต์แวร์ของบุคคลที่สามเช่น sqlsentry หรือผู้จัดการการวิเคราะห์ของ idera ที่ จะดำเนินงานดังกล่าวข้างต้นสำหรับคุณ)


7

คุณอาจได้รับแผนการที่แตกต่างเพราะ:

  • แผนอาจถูกขับไล่ออกจากแคชเนื่องจาก:
    • บริการเริ่มต้นใหม่
    • การล้างแคชแผนด้วยตนเอง
    • บริการเริ่มต้นใหม่หรือล้มเหลว
    • การเปลี่ยนแปลงที่ไม่ตั้งใจเช่นsp_configureการเปลี่ยนแปลงบางอย่างสามารถล้างแคช
    • การเปลี่ยนแปลงวัตถุต้นแบบดัชนีสถิติหรือการอ้างอิงอื่น ๆ บางอย่างทำให้เกิดการคอมไพล์ใหม่
  • คุณอาจได้รับแผนที่แตกต่างจากผู้ใช้รายอื่นหรือการเรียกใช้ก่อนหน้านี้เนื่องจาก:
    • ข้อความค้นหาอาจไม่เหมือนกัน (ซึ่งรวมถึงตัวพิมพ์เล็กและช่องว่างไม่ต้องคำนึงถึงคอลัมน์ที่แตกต่างเกณฑ์การเข้าร่วมตัวกรอง ฯลฯ )
    • แบบสอบถามสามารถเรียกใช้โดยผู้ใช้ที่แตกต่างกันด้วยชุดตัวเลือกที่แตกต่างกัน (หรือ schema ที่เป็นค่าเริ่มต้นที่แตกต่างกันหากวัตถุใด ๆ ในแผนไม่มีชื่อที่ผ่านการรับรองโดยสมบูรณ์รวมถึงสคีมา )
  • แบบสอบถามและแผนอาจเหมือนกัน แต่คุณอาจได้รับประสิทธิภาพที่แตกต่างกันเพราะ:
    • แผนถูกแคชโดยใช้พารามิเตอร์ที่แตกต่างกันและแผนนั้นไม่เหมาะสำหรับชุดพารามิเตอร์ปัจจุบัน (โดยทั่วไปเรียกว่า "พารามิเตอร์การดมกลิ่น")
    • ปริมาณข้อมูลตามพารามิเตอร์หรือเพียงเพราะการเปลี่ยนแปลงข้อมูลในระหว่างนั้นแตกต่างกันอย่างมีนัยสำคัญ
    • ข้อมูลมีการเปลี่ยนแปลงมากพอที่จะเปลี่ยนแปลงวิธีที่มีประสิทธิภาพที่สุดในการเข้าถึงข้อมูล แต่ไม่เพียงพอที่จะกระตุ้นการอัปเดตสถิติหรือคอมไพล์ใหม่ (ค้นหาปัญหาจากน้อยไปมากเช่นเดียวกับอัลกอริทึมสถิติอัตโนมัติ)
    • ข้อมูลถูกขับออกจากบัฟเฟอร์พูลและตอนนี้ต้องอ่านจากดิสก์
    • มีการเกิดขึ้นพร้อมกันสูงขึ้นการปิดกั้นหรือสายพันธุ์อื่น ๆ ในทรัพยากรที่จำเป็นในการตอบสนองแบบสอบถาม

ฉันผ่านรายละเอียดเหล่านี้ได้มากมายที่นี่:

หากสิ่งเหล่านี้ทำงานในสภาพแวดล้อมที่แตกต่างกันฉันมีหลายสิ่งหลายอย่างให้ตรวจสอบที่นี่:

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


7

ตามปกติแอรอนเบอร์ทรานด์และญาติให้คำตอบที่ดีเยี่ยม อย่างไรก็ตามคำตอบทั้งสองมีเธรดทั่วไป หากคุณวิเคราะห์คำตอบทั้งสองคุณจะเห็นว่าเหตุผลที่ XYZ ไม่ทำงานเหมือนที่ทำงานเมื่อวานไม่ใช่เพราะสิ่งที่คุณ / พวกเขา / คน X ทำ เหตุผลที่สิ่งต่าง ๆ เปลี่ยนแปลงไปเนื่องจากฐานข้อมูลตัดสินใจทำสิ่งต่าง ๆ เนื่องจากเหตุผล XYZ

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

ฉันจะใช้การอ้างอิงทางทหารเพราะฉันไม่สามารถนึกถึงสิ่งที่ดีกว่าได้ในตอนนี้ คำอุปมาทั่วไปมากขึ้นจะได้รับการชื่นชม (ไม่มีปุนตั้งใจ)

ในการใช้งานส่วนใหญ่โปรแกรมเมอร์ทำหน้าที่เป็นผู้สอนการฝึกซ้อม พวกเขาบอกคอมพิวเตอร์ว่าจะต้องทำอะไรลำดับและบางครั้งนานเท่าไหร่ การเขียนโปรแกรมฐานข้อมูลนั้นเหมือนกับการทำหน้าที่เป็นผู้บังคับบัญชา คุณบอกสิ่งที่คุณต้องการให้ทำในระดับสูงและเสนอแนวทางที่จำเป็น ฐานข้อมูลใช้เวลาในการหาวิธีที่ดีที่สุดในการดำเนินการตามแผนของหน่วยข่าวกรองปัจจุบันเช่นเจ้าหน้าที่ระดับรองและเจ้าหน้าที่ที่ไม่ได้รับหน้าที่

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

* ฉันรู้ว่า "ทำไม" มีค่ามากสำหรับการป้องกันในอนาคตการเรียนรู้ ฯลฯ แต่ดูเหมือนว่า OP กำลังเผชิญกับการต่อต้านจากคนที่ไม่ได้พยายามเรียนรู้หรือช่วยเหลือปัญหา

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