ทำไมฐานข้อมูลไม่สร้างดัชนีของตนเองโดยอัตโนมัติ


32

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


3
รถของคุณซ่อมยางแบนโดยอัตโนมัติหรือไม่?
Kermit

11
การเปรียบเทียบที่แม่นยำยิ่งขึ้น ECU ของคุณเปลี่ยนกำลังงานที่จ่ายให้กับปั๊มน้ำมันเชื้อเพลิงเพื่อแก้ไขอัตราการไหลของน้ำมันเชื้อเพลิงและน้ำมันและชดเชยสิ่งสกปรกหรือไม่? คำตอบคือใช่ ..
Jharwood

11
ฐานข้อมูลสามารถวางดัชนีไว้ในตารางที่ปัจจุบันต้องการให้เราสั่งให้รถไม่สามารถเปลี่ยนยางรถยนต์ได้จนกว่าเราจะสร้างแขนขึ้นมาใช้
Jharwood

1
พวกเขาทำ - สำหรับคอลัมน์ที่มีUNIQUEข้อ จำกัด
dan04

8
หากคุณ google "ฐานข้อมูลการปรับแต่งตนเอง" คุณจะพบงานวิจัยมากมายเกี่ยวกับเรื่องนี้ บางทีในอนาคตมันจะเป็นเรื่องปกติที่จะมีองค์ประกอบบางอย่างในเรื่องนี้
Martin Smith

คำตอบ:


25

ปรับปรุง

สิ่งนี้นำมาใช้ใน SQL Server Azure มันสร้างคำแนะนำ

ป้อนคำอธิบายรูปภาพที่นี่

และการจัดการดัชนีสามารถกำหนดค่าให้โดยอัตโนมัติ

เปิดใช้งานการจัดการดัชนีอัตโนมัติ

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

คำตอบเดิม

ฐานข้อมูลบางตัวสร้างดัชนีอยู่แล้วโดยอัตโนมัติ

ใน SQL Server บางครั้งแผนการดำเนินการสามารถรวมตัวดำเนินการดัชนีสปูลซึ่ง RDBMS จะสร้างสำเนาของข้อมูลแบบดัชนี อย่างไรก็ตามสปูลนี้ไม่ได้เป็นส่วนถาวรของฐานข้อมูลที่เก็บไว้ในซิงค์กับแหล่งข้อมูลและไม่สามารถใช้ร่วมกันระหว่างการดำเนินการค้นหาความหมายการดำเนินการตามแผนดังกล่าวอาจสิ้นสุดลงซ้ำ ๆ การสร้างและวางดัชนีชั่วคราวบนข้อมูลเดียวกัน

บางทีในอนาคต RDBMSs จะมีความสามารถในการปล่อยแบบไดนามิกและสร้างดัชนีถาวรตามปริมาณงาน

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

DMVs ที่หายไปของดัชนีที่กล่าวถึงโดย Kenneth ไม่ได้มีวัตถุประสงค์ที่จะนำมาใช้อย่างสุ่มสี่สุ่มห้าเนื่องจากพวกเขาพิจารณาถึงประโยชน์ของการสืบค้นเฉพาะเท่านั้นและไม่พยายามที่จะคำนึงถึงต้นทุนของดัชนีที่อาจเกิดขึ้นกับการสืบค้นอื่น ๆ และไม่รวมดัชนีที่ขาดหายไปเช่นเดียวกัน เช่นผลลัพธ์ของ DMV นี้อาจรายงานดัชนีที่หายไปA,B,CและA,B INCLUDE(C)

ปัญหาปัจจุบันบางอย่างที่มีความคิดคือ

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

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

อย่างไรก็ตามการติดตั้งส่วนใหญ่อาจไม่ได้อยู่ในสถานการณ์ที่เงียบสงบนี้กับเจ้าหน้าที่ที่มีทักษะซึ่งติดตามตรวจสอบวินิจฉัยและคาดการณ์การเปลี่ยนแปลง (หรืออย่างน้อยตอบสนองต่อ) การเปลี่ยนแปลงในปริมาณงานอย่างต่อเนื่อง

โครงการ AutoAdminที่ Microsoft Research ได้รับการทำงานตั้งแต่ปี 1996

เป้าหมายของโครงการนี้คือการทำให้ฐานข้อมูลปรับแต่งเองและจัดการด้วยตนเองโดยใช้ประโยชน์จากความรู้เกี่ยวกับปริมาณงาน

โฮมเพจของโครงการแสดงรายการโครงการที่น่าสนใจหลายโครงการ คำถามหนึ่งเกี่ยวข้องกับคำถามที่นี่โดยเฉพาะ

ปัญหาที่น่าสนใจอีกประการหนึ่งเกิดขึ้นเมื่อไม่มี DBA (เช่นฐานข้อมูลแบบฝังหรือธุรกิจขนาดเล็ก) ในสถานการณ์เช่นนี้วิธีการปรับดัชนีแบบต่อเนื่องแบบสัมผัสที่ต่ำอาจมีความสำคัญ เราได้สำรวจวิธีแก้ไขปัญหา ... [ใน]“ แนวทางออนไลน์สู่การปรับแต่งการออกแบบทางกายภาพ ” ใน ICDE 2007

รัฐผู้เขียน

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

กระดาษแนะนำอัลกอริทึม

ลักษณะสำคัญคือ:

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

การใช้อัลกอริทึมช่วยให้สามารถควบคุมปริมาณการตอบสนองต่อการเปลี่ยนแปลงในการโหลดเซิร์ฟเวอร์และยังสามารถยกเลิกการสร้างดัชนีหากในระหว่างการสร้างการเปลี่ยนแปลงภาระงานและผลประโยชน์ที่คาดว่าจะต่ำกว่าจุดที่ถือว่าคุ้มค่า

บทสรุปของผู้เขียนในหัวข้อของOnline กับการปรับทางกายภาพแบบดั้งเดิม

อัลกอริธึมออนไลน์ในงานนี้มีประโยชน์เมื่อ DBA ไม่แน่ใจเกี่ยวกับพฤติกรรมในอนาคตของภาระงานหรือไม่มีความเป็นไปได้ที่จะทำการวิเคราะห์หรือสร้างแบบจำลองที่ครอบคลุม หาก DBA มีข้อมูลทั้งหมดเกี่ยวกับคุณสมบัติภาระงานการวิเคราะห์และการปรับใช้แบบคงที่โดยเครื่องมือที่มีอยู่ (เช่น [2, 3]) จะเป็นทางเลือกที่ดีกว่า

ข้อสรุปที่นี่มีความคล้ายคลึงกับในการปรับแต่งการสืบค้นดัชนีโดยใช้แบบสอบถามแบบอิสระ

วิธีการของเราไม่สามารถเอาชนะที่ปรึกษาดัชนีได้หากทราบปริมาณงานทั้งหมดล่วงหน้า อย่างไรก็ตามในสภาพแวดล้อมแบบไดนามิกที่มีการพัฒนาและการเปลี่ยนภาระงานวิธีการที่ขับเคลื่อนด้วยแบบสอบถามให้ผลลัพธ์ที่ดีกว่า


4
เป็นอันตรายอย่างไม่น่าเชื่อกับอาชีพของ DBA ที่จะถือว่าทักษะของเขาไม่สามารถเป็นไปโดยอัตโนมัติได้ นั่นคือการฆ่าคนเครือข่ายประกอบอาชีพในขณะนี้เป็นกะไปยังซอฟต์แวร์ดาต้าเซ็นเตอร์ที่กำหนดไว้ ในฐานะ DBA ที่ดีเราควรเป็นผู้นำในการดำเนินการอัตโนมัติ
ออกุสตุส

20

การออกแบบดัชนีที่คุณวางไว้เป็นอะไรที่มากกว่าศิลปะอย่างวิทยาศาสตร์ RDBMS ไม่ฉลาดพอที่จะใช้ปริมาณงานทั่วไปและออกแบบกลยุทธ์การจัดทำดัชนีอัจฉริยะ มันขึ้นอยู่กับการแทรกแซงของมนุษย์ (อ่าน: DBA) เพื่อวิเคราะห์ปริมาณงานและกำหนดว่าอะไรคือวิธีที่ดีที่สุด

หากไม่มีบทลงโทษสำหรับการจัดทำดัชนีมันจะเป็นวิธีการของปืนลูกซองที่จะเพิ่มจำนวนอนันต์ของดัชนี แต่เนื่องจากการปรับเปลี่ยนข้อมูล (INSERTS, UPDATES และ DELETES) ส่งผลกระทบต่อดัชนีที่เปิดใช้งานบนตารางดังนั้นจะมีค่าใช้จ่ายของตัวแปรเหล่านี้ของดัชนีเหล่านี้

ใช้การออกแบบและกลยุทธ์ของมนุษย์เพื่อสร้างดัชนีอย่างชาญฉลาดซึ่งจะเพิ่มประสิทธิภาพการอ่านสูงสุดในขณะที่มีค่าใช้จ่ายในการแก้ไขข้อมูลน้อยที่สุด


ความคิดเห็นไม่ได้มีไว้สำหรับการอภิปรายเพิ่มเติม การสนทนานี้ได้รับการย้ายไปแชท
พอลไวท์พูดว่า GoFundMonica

13

ในความเป็นจริงมีฐานข้อมูลบางอย่างที่ทำเช่นนี้ ยกตัวอย่างเช่นของ Google BigTableและของ Amazon SimpleDBโดยอัตโนมัติสร้างดัชนี(แม้ว่าจะไม่เป็น RDBMS ของ) นอกจากนี้ยังมีเอ็นจินMySQL RDBMS อย่างน้อยหนึ่งตัวที่ทำสิ่งนี้ SQL Server ยังติดตามดัชนีที่คิดว่าคุณควรสร้างแม้ว่ามันจะไม่ไปไกลเท่าที่สร้างขึ้นจริง

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

อย่างไรก็ตามด้วยจำนวนแอปพลิเคชันเว็บ LAMP ที่เขียนโดยมือสมัครเล่นที่ไม่ทราบว่าดัชนีคืออะไรฉันยังคงคิดว่าคุณลักษณะนี้จะเป็นประโยชน์สำหรับบางคน


4
ฉันจะบอกว่าการเปรียบเทียบ BigTable (และอนุพันธ์ของมันเช่น Cassandra, HBase และอื่น ๆ ) กับโซลูชัน RDBMS กำลังเปรียบเทียบแอปเปิ้ลกับส้ม - BigTable และ derivates เป็นเหมือนค่าคีย์ยักษ์หรือร้านค้าแนวคอลัมน์โดยเนื้อแท้ .
Suman

1
เผง คำถามถูกติดแท็กด้วยrdbmsและฉันไม่คิดว่า BigTable ตกอยู่ในหมวดหมู่
ypercubeᵀᴹ

2
@ypercube: ... ใช่ฉันพูดถึงมันในคำตอบของฉัน; แต่มันก็ยังคุ้มค่าที่จะรู้ว่าอย่างน้อยที่สุดก็เป็นจุดสนใจ ฉันยังกล่าวถึงหลายฐานข้อมูลอื่น ๆ ที่เป็น RDBMS ซึ่งทำเช่นนี้และอธิบายว่าทำไมมันไม่ธรรมดา นี้ไม่สมควรได้รับ downvote ...
BlueRaja - Danny Pflughoeft

1
ฉันไม่ได้ลงคะแนน ฉันยอมรับว่ามันเป็นปัญหาที่ยากมาก
ypercubeᵀᴹ

10

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

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

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

ประเด็นคือดัชนีไม่ได้ถูกสร้างขึ้นโดยอัตโนมัติเพราะไม่ใช่คำตอบสำหรับทุกสิ่ง การออกแบบดัชนีไม่ได้เป็นเพียงแค่การพูดว่า "เฮ้นี่จะเพิ่มความเร็วในการอ่านของฉัน" แต่ก็มีปัจจัยอื่น ๆ ที่ต้องพิจารณา


1
+1 ในขณะที่เป็นไปได้อย่างแน่นอนและเป็นไปได้ที่จะทำให้สิ่งนี้เป็นไปโดยอัตโนมัติเราไม่ได้ดีไปกว่านี้เสมอไปกับดัชนีเวทมนต์มากมายที่นำมาใช้โดยระบบที่ไม่เข้าใจว่าจะใช้ข้อมูลในวันพรุ่งนี้อย่างไร เทียบกับอ่านขีด จำกัด การแลกเปลี่ยน ฉันblogged เล็กน้อยเกี่ยวกับเรื่องนี้ในวันอื่น ๆแต่ชัดเจนมีอีกมากมายที่จะพูดคุยเกี่ยวกับ
Aaron Bertrand

> ความมุ่งมั่นอาจเป็นช่วงเวลาสำคัญและการอ่านไม่ใช่ ในสถานการณ์ที่อาจเป็นที่ยอมรับไม่ได้ที่จะชะลอการแทรกของคุณ ช่างเป็นคำตอบที่ดีมีประโยชน์มาก
Siddhartha

6

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


-4

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

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

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