SQL Server Archiเทคเจอร์ (อธิบาย)

⚡ สรุปอย่างชาญฉลาด

SQL Server Archiโครงสร้างของระบบเป็นไปตามแบบจำลองไคลเอ็นต์-เซิร์ฟเวอร์ โดยแบ่งออกเป็นสามชั้นหลัก ได้แก่ ชั้นโปรโตคอลสำหรับการสื่อสารผ่านเครือข่าย ชั้นเอนจินเชิงสัมพันธ์สำหรับการประมวลผลคำสั่งค้นหา และชั้นเอนจินจัดเก็บข้อมูลสำหรับการจัดการและการเรียกค้นข้อมูล

  • การเลือกโปรโตคอล: เลือกใช้ Shared Memory สำหรับการเชื่อมต่อภายในเครือข่ายเดียวกัน, TCP/IP สำหรับการเข้าถึงระยะไกล หรือ Named Pipes สำหรับสภาพแวดล้อม LAN โดยขึ้นอยู่กับโครงสร้างเครือข่ายของคุณ
  • ???? การประมวลผลแบบสอบถาม: เอนจินประมวลผลเชิงสัมพันธ์จะวิเคราะห์ไวยากรณ์ ปรับแผนการดำเนินการให้เหมาะสมผ่านการวิเคราะห์ต้นทุนหลายขั้นตอน และมอบหมายการดึงข้อมูลให้กับเอนจินจัดเก็บข้อมูล
  • 📦 การจัดการพื้นที่เก็บข้อมูล: ไฟล์ข้อมูลใช้หน้าขนาด 8KB ที่จัดกลุ่มเป็นส่วนๆ โดยมี Buffer ผู้จัดการดูแลการแคชและผู้จัดการธุรกรรมเพื่อให้มั่นใจว่าสอดคล้องกับหลักการ ACID
  • 🔒 การเพิ่มประสิทธิภาพการทำงาน: Buffer แคชช่วยลดการอ่าน/เขียนข้อมูล (I/O) โดยการดึงข้อมูลที่เข้าถึงบ่อยจากหน่วยความจำ ในขณะที่แคชแผนการดำเนินการจะจัดเก็บแผนการดำเนินการเพื่อนำคำสั่งค้นหามาใช้ซ้ำ
  • รายการ Integrity: การบันทึกข้อมูลล่วงหน้าและการบันทึกแบบขี้เกียจ Writer กระบวนการต่างๆ ทำงานร่วมกันเพื่อให้มั่นใจได้ถึงความคงทนของข้อมูลและการจัดการหน่วยความจำอย่างมีประสิทธิภาพ
  • 📋 การไหลของข้อมูล: ทุกคำสั่งค้นหาจะผ่านการเข้ารหัสแพ็กเก็ต TDS การแยกวิเคราะห์ CMD การเพิ่มประสิทธิภาพ การประมวลผล และการโต้ตอบกับเลเยอร์การจัดเก็บข้อมูล ก่อนที่ผลลัพธ์จะส่งกลับไปยังไคลเอ็นต์

SQL Server Archiเทคเจอร์

MS SQL Server มีสถาปัตยกรรมแบบไคลเอ็นต์-เซิร์ฟเวอร์ กระบวนการทำงานของ MS SQL Server เริ่มต้นด้วยแอปพลิเคชันไคลเอ็นต์ส่งคำขอ SQL Server จะรับคำขอ ประมวลผล และตอบกลับด้วยข้อมูลที่ประมวลผลแล้ว เรามาพิจารณารายละเอียดของสถาปัตยกรรมทั้งหมดที่แสดงด้านล่างนี้กัน:

ดังที่แผนภาพด้านล่างแสดงให้เห็น SQL Server ประกอบด้วยส่วนประกอบหลักสามส่วน Archiเทคเจอร์:

  1. ชั้นโปรโตคอล
  2. เครื่องยนต์เชิงสัมพันธ์
  3. เครื่องยนต์จัดเก็บข้อมูล

SQL Server Archiแผนภาพโครงสร้างแสดงส่วนประกอบของเลเยอร์โปรโตคอล เอ็นจิ้นเชิงสัมพันธ์ และเอ็นจิ้นจัดเก็บข้อมูล

เลเยอร์โปรโตคอล – SNI

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

หน่วยความจำที่ใช้ร่วมกัน

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

แผนภาพโปรโตคอลหน่วยความจำร่วม (Shared Memory) แสดงให้เห็นว่าไคลเอ็นต์และ SQL Server อยู่บนเครื่องเดียวกัน

การเปรียบเทียบ: Tom เชื่อมโยงกับ Client, Mom เชื่อมโยงกับ SQL Server, Home เชื่อมโยงกับ Machine และการสื่อสารด้วยวาจาเชื่อมโยงกับโปรโตคอล Shared Memory

แผนผังเปรียบเทียบโปรโตคอลหน่วยความจำร่วมping ลูกค้าสำหรับทอม และ SQL Server สำหรับแม่

หมายเหตุเกี่ยวกับการตั้งค่า: In สตูดิโอจัดการ SQLสำหรับการเชื่อมต่อภายในเครื่อง ตัวเลือก “ชื่อเซิร์ฟเวอร์” สามารถเป็น “.”, “localhost”, “127.0.0.1” หรือ “Machine\Instance” ได้

TCP / IP

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

แผนภาพโปรโตคอล TCP/IP แสดงไคลเอ็นต์และ SQL Server บนเครื่องระยะไกล

การเปรียบเทียบ: ทอมเปรียบเสมือนไคลเอ็นต์ ร้านกาแฟเปรียบเสมือน SQL Server บ้านและตลาดเปรียบเสมือนสถานที่ห่างไกล และเครือข่ายโทรศัพท์มือถือเปรียบเสมือนโปรโตคอล TCP/IP

แผนผังเปรียบเทียบโปรโตคอล TCP/IPping การสื่อสารระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ระยะไกล

หมายเหตุเกี่ยวกับการตั้งค่า: ใน SQL Management Studio ตัวเลือก “ชื่อเซิร์ฟเวอร์” สำหรับการเชื่อมต่อ TCP/IP ต้องเป็น “เครื่อง\อินสแตนซ์ของเซิร์ฟเวอร์” โดยค่าเริ่มต้น SQL Server ใช้พอร์ต 1433 สำหรับการเชื่อมต่อ TCP/IP

ชื่อท่อ

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

แผนภาพโปรโตคอล Named Pipes สำหรับการเชื่อมต่อ SQL Server บนเครือข่าย LAN

การเปรียบเทียบ: Tom เชื่อมโยงกับ Client, Sierra เชื่อมโยงกับ SQL Server, การเป็นเพื่อนบ้านกันเชื่อมโยงกับ LAN และเครือข่ายภายในเชื่อมโยงกับโปรโตคอล Named Pipe

หมายเหตุเกี่ยวกับการตั้งค่า: โดยค่าเริ่มต้น Named Pipes จะถูกปิดใช้งาน และต้องเปิดใช้งานผ่าน SQL Configuration Manager

TDS คืออะไร?

เมื่อเข้าใจสถาปัตยกรรมไคลเอ็นต์-เซิร์ฟเวอร์ทั้งสามประเภทแล้ว ต่อไปนี้คือภาพรวมของ TDS:

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

ตารางต่อไปนี้เปรียบเทียบโปรโตคอลการเชื่อมต่อ SQL Server ทั้งสามแบบ:

คุณสมบัติ (Feature) หน่วยความจำที่ใช้ร่วมกัน TCP / IP ชื่อท่อ
ขอบเขตเครือข่าย เครื่องเดียวกัน ระยะไกล (WAN/อินเทอร์เน็ต) LAN เท่านั้น
พอร์ตเริ่มต้น N / A 1433 445
ประสิทธิภาพ เร็วที่สุด (ไม่มีค่าใช้จ่ายด้านเครือข่าย) ดี (ปรับให้เหมาะสมสำหรับ WAN) ดี (ปรับให้เหมาะสมสำหรับ LAN)
เปิดใช้งานโดยค่าเริ่มต้น มี (ใบกำกับภาษีเต็มรูปแบบ) มี (ใบกำกับภาษีเต็มรูปแบบ) ไม่
กรณีใช้งานที่ดีที่สุด การพัฒนาและการทดสอบในระดับท้องถิ่น การเข้าถึงการผลิตจากระยะไกล สภาพแวดล้อม LAN ที่เชื่อถือได้

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

เครื่องยนต์เชิงสัมพันธ์

เอนจินเชิงสัมพันธ์ (Relational Engine) หรือที่รู้จักกันในชื่อตัวประมวลผลคำสั่งค้นหา (Query Processor) ประกอบด้วยส่วนประกอบของ SQL Server ที่กำหนดว่าคำสั่งค้นหาต้องทำอะไรและจะดำเนินการอย่างไรให้มีประสิทธิภาพที่สุด มีหน้าที่ในการดำเนินการคำสั่งค้นหาของผู้ใช้โดยการขอข้อมูลจากเอนจินจัดเก็บข้อมูล (Storage Engine) และประมวลผลผลลัพธ์ที่ได้รับกลับมา

ดังที่แสดงในแผนภาพโครงสร้างทางสถาปัตยกรรม ระบบประมวลผลเชิงสัมพันธ์ (Relational Engine) ประกอบด้วยส่วนประกอบหลักสามส่วน ได้แก่:

ตัวแยกวิเคราะห์ CMD

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

ส่วนประกอบ CMD Parser แสดงการตรวจสอบไวยากรณ์ การตรวจสอบความหมาย และการสร้างโครงสร้างต้นไม้ของคำสั่งค้นหา

การตรวจสอบวากยสัมพันธ์: เช่นเดียวกับภาษาโปรแกรมอื่นๆ SQL Server มีชุดคำหลักและกฎไวยากรณ์ที่กำหนดไว้ล่วงหน้า SELECT, INSERT, UPDATE และคำอื่นๆ อีกมากมายอยู่ในรายการคำหลักที่กำหนดไว้ล่วงหน้า ตัวแยกวิเคราะห์ CMD จะตรวจสอบว่าข้อมูลที่ป้อนเข้ามาเป็นไปตามกฎเหล่านี้หรือไม่ หากข้อมูลที่ผู้ใช้ป้อนเข้ามาเบี่ยงเบนจากไวยากรณ์ที่คาดไว้ ตัวแยกวิเคราะห์จะส่งคืนข้อผิดพลาด

ตัวอย่าง: ลองนึกภาพชาวรัสเซียคนหนึ่งเดินเข้าไปในร้านอาหารญี่ปุ่นและสั่งอาหารเป็นภาษารัสเซีย พนักงานเสิร์ฟเข้าใจเฉพาะภาษาญี่ปุ่นและไม่สามารถดำเนินการตามคำสั่งได้ ในทำนองเดียวกัน หากผู้ใช้พิมพ์ “SELECR” แทนที่จะเป็น “SELECT” ตัวแยกวิเคราะห์คำสั่ง CMD จะแสดงข้อผิดพลาดเนื่องจากไม่รู้จักคำหลักนั้น

การตรวจสอบความหมาย: ขั้นตอนนี้ดำเนินการโดย Normalizer ซึ่งจะตรวจสอบว่าชื่อคอลัมน์ ชื่อตาราง และอ็อบเจ็กต์อื่นๆ ที่ถูกเรียกใช้ในคิวรีนั้นมีอยู่ในสคีมาจริงหรือไม่ หากมีอยู่ Normalizer จะผูกอ็อบเจ็กต์เหล่านั้นเข้ากับคิวรี กระบวนการนี้เรียกว่าการผูก (Binding) เมื่อคิวรีของผู้ใช้มี VIEW อยู่ Normalizer จะแทนที่ VIEW ด้วยคำจำกัดความของ VIEW ที่จัดเก็บไว้ภายใน

ตัวอย่าง: เล่น SELECT * from USER_ID หากตาราง USER_ID ไม่มีอยู่ในฐานข้อมูล จะทำให้ตัวแยกวิเคราะห์แสดงข้อผิดพลาดระหว่างการตรวจสอบความหมาย

สร้างแผนผังแบบสอบถาม: ขั้นตอนนี้จะสร้างแผนผังการดำเนินการที่แตกต่างกัน ซึ่งแสดงถึงวิธีการต่างๆ ที่สามารถใช้ในการเรียกใช้คำสั่งค้นหาได้ แผนผังทั้งหมดจะให้ผลลัพธ์ที่ต้องการเหมือนกัน

เพิ่มประสิทธิภาพ

ตัวปรับแต่งประสิทธิภาพ (Optimizer) จะสร้างแผนการดำเนินการสำหรับคำสั่งค้นหาของผู้ใช้ แผนนี้จะกำหนดวิธีการดำเนินการคำสั่งค้นหา ไม่ใช่ทุกคำสั่งค้นหาที่จะได้รับการปรับแต่งประสิทธิภาพ การปรับแต่งประสิทธิภาพจะใช้กับคำสั่ง DML (Data Modification Language) เช่น SELECT, INSERT, DELETE และ UPDATE ส่วนคำสั่ง DDL เช่น CREATE และ ALTER จะไม่ได้รับการปรับแต่งประสิทธิภาพ แต่จะถูกคอมไพล์เป็นรูปแบบภายใน

เวิร์กโฟลว์ของ SQL Server Optimizer แสดงขั้นตอนการเพิ่มประสิทธิภาพสามขั้นตอน

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

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

โปรแกรม Optimizer จะทำการค้นหาในสามขั้นตอน:

ขั้นตอนที่ 0: ค้นหาแผนการที่ไร้สาระ

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

ขั้นตอนที่ 1: ค้นหาแผนการประมวลผลธุรกรรม

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

ขั้นตอนที่ 2: การประมวลผลแบบขนานและการเพิ่มประสิทธิภาพ

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

ตัวดำเนินการแบบสอบถาม

ตัวดำเนินการค้นหา (Query Executor) เรียกใช้วิธีการเข้าถึง (Access Method) ในเอนจินจัดเก็บข้อมูล (Storage Engine) โดยจะส่งแผนการดำเนินการที่มีตรรกะการดึงข้อมูลที่จำเป็นสำหรับการดำเนินการนั้น เมื่อได้รับข้อมูลจากเอนจินจัดเก็บข้อมูลแล้ว ผลลัพธ์จะถูกส่งไปยังเลเยอร์โปรโตคอล (Protocol Layer) และส่งไปยังผู้ใช้ปลายทาง

ตัวดำเนินการคิวรีส่งแผนการดำเนินการไปยังวิธีการเข้าถึงในเอนจินจัดเก็บข้อมูล

หลังจากที่ Relational Engine กำหนดวิธีการดำเนินการสืบค้นข้อมูลแล้ว Storage Engine จะจัดการการดำเนินการข้อมูลทางกายภาพ เลเยอร์นี้จะจัดการวิธีการจัดเก็บ แคช และเรียกใช้ข้อมูลจากดิสก์

เครื่องยนต์จัดเก็บข้อมูล

หน่วยประมวลผลจัดเก็บข้อมูล (Storage Engine) มีหน้าที่ในการจัดเก็บข้อมูลในระบบจัดเก็บข้อมูล เช่น ดิสก์หรือ SAN และเรียกใช้ข้อมูลเมื่อจำเป็น ก่อนที่จะศึกษาองค์ประกอบต่างๆ ของหน่วยประมวลผลจัดเก็บข้อมูล จำเป็นต้องเข้าใจก่อนว่าข้อมูลถูกจัดเก็บข้อมูลในเชิงกายภาพอย่างไร

สถาปัตยกรรมของ Storage Engine แสดงวิธีการเข้าถึง (Access Method) Buffer ผู้จัดการ และผู้จัดการธุรกรรม

ไฟล์ข้อมูลและขอบเขต

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

ประเภทของไฟล์

ประเภทไฟล์ของ SQL Server ที่แสดง ได้แก่ ไฟล์หลัก ไฟล์รอง และไฟล์บันทึก

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

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

ไฟล์บันทึก: หรือที่รู้จักกันในชื่อ Write-Ahead Logs นามสกุลไฟล์คือ .ldf ไฟล์บันทึกเหล่านี้ใช้สำหรับการจัดการธุรกรรม การกู้คืนจากเหตุการณ์ที่ไม่พึงประสงค์ และการย้อนกลับธุรกรรมที่ยังไม่ได้รับการยืนยัน

ระบบจัดเก็บข้อมูลประกอบด้วยส่วนประกอบหลักสามส่วน แต่ละส่วนมีบทบาทเฉพาะในการจัดการการเข้าถึงและความสมบูรณ์ของข้อมูล

วิธีการเข้าถึง

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

  • หากคำถามคือ คำสั่ง SELECT (DML)มันถูกส่งต่อไปยัง Buffer ผู้จัดการเพื่อดำเนินการต่อไป
  • หากคำถามคือ คำสั่งที่ไม่ใช่ SELECT (DDL และ DML)ข้อมูลจะถูกส่งต่อไปยังตัวจัดการธุรกรรม ซึ่งส่วนใหญ่จะประกอบด้วยคำสั่ง UPDATE, INSERT และ DELETE

วิธีการเข้าถึงกำหนดเส้นทางการสืบค้น SELECT ไปยัง Buffer ผู้จัดการและผู้ที่ไม่ใช่ SELECT ไปจนถึงผู้จัดการธุรกรรม

Buffer ผู้จัดการ

การขอ Buffer Manager ทำหน้าที่จัดการฟังก์ชันหลักสำหรับ Plan Cache, การแยกวิเคราะห์ข้อมูล และการจัดการหน้าข้อมูลที่เปลี่ยนแปลง

Buffer สถาปัตยกรรมตัวจัดการที่แสดงแคชแผนงาน Buffer การทำงานร่วมกันระหว่างแคชและการจัดเก็บข้อมูล

วางแผนแคช

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

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

การแยกวิเคราะห์ข้อมูล: Buffer แคชและการจัดเก็บข้อมูล

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

Buffer แคช – การแยกวิเคราะห์แบบอ่อน

การขอ Buffer ผู้จัดการมองหาข้อมูลใน Buffer แคช: หากมีข้อมูลอยู่ ตัวประมวลผลคำสั่งค้นหาจะใช้ข้อมูลนั้นโดยตรง ซึ่งจะช่วยเพิ่มประสิทธิภาพเนื่องจากการดึงข้อมูลจากแคชใช้การดำเนินการ I/O น้อยกว่าการดึงข้อมูลจากที่เก็บข้อมูลบนดิสก์

Buffer กระบวนการแยกวิเคราะห์แบบอ่อนของแคช ซึ่งดึงข้อมูลจากแคชในหน่วยความจำ

การจัดเก็บข้อมูล – การแยกวิเคราะห์แบบฮาร์ดแวร์

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

กระบวนการแยกวิเคราะห์ข้อมูลแบบแข็ง (Hard parsing flow) ซึ่งดึงข้อมูลจากที่เก็บข้อมูลบนดิสก์และจัดเก็บไว้ในแคช

ผู้จัดการธุรกรรม

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

ตัวจัดการธุรกรรมแสดงขั้นตอนการทำงานของตัวจัดการบันทึก ตัวจัดการการล็อก และการดำเนินการ

ตัวจัดการบันทึก

โปรแกรมจัดการบันทึกจะเก็บรักษาข้อมูลไว้ track คือข้อมูลอัปเดตทั้งหมดที่ดำเนินการในระบบผ่านบันทึกที่จัดเก็บไว้ในบันทึกธุรกรรม (Transaction Logs) แต่ละรายการบันทึกประกอบด้วยหมายเลขลำดับบันทึก (Log Sequence Number) พร้อมด้วยรหัสธุรกรรม (Transaction ID) และบันทึกการแก้ไขข้อมูล (Data Modification Record) กลไกนี้ tracธุรกรรมที่ดำเนินการแล้วและธุรกรรมที่ยกเลิก

ผู้จัดการล็อค

ระหว่างการทำธุรกรรม ข้อมูลที่เกี่ยวข้องในพื้นที่จัดเก็บจะเข้าสู่สถานะล็อก ตัวจัดการล็อกจะจัดการกระบวนการนี้ เพื่อให้มั่นใจถึงความสอดคล้องและการแยกข้อมูล คุณสมบัติเหล่านี้เรียกอีกอย่างว่า ACID (Atomน้ำแข็ง ความสม่ำเสมอ ความโดดเดี่ยว ความคงทน)

กระบวนการดำเนินการ

ขั้นตอนการดำเนินการมีดังนี้:

  1. โปรแกรมจัดการบันทึก (Log Manager) จะเริ่มทำการบันทึก และโปรแกรมจัดการการล็อก (Lock Manager) จะทำการล็อกข้อมูลที่เกี่ยวข้อง
  2. มีการเก็บรักษาสำเนาของข้อมูลไว้ใน Buffer ขุมทรัพย์
  3. ข้อมูลที่ต้องอัปเดตจะถูกเก็บสำเนาไว้ในบันทึก (Log) Bufferและเหตุการณ์ทั้งหมดจะอัปเดตข้อมูลใน Data Buffer.
  4. หน้าเว็บที่จัดเก็บข้อมูลที่แก้ไขแล้วเรียกว่า... หน้าสกปรก.

การบันทึกจุดตรวจสอบและการบันทึกล่วงหน้า

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

สันหลังยาว Writer

เมื่อ SQL Server ตรวจพบภาระงานหนักและต้องการหน่วยความจำบัฟเฟอร์สำหรับธุรกรรมใหม่ มันจะปล่อยหน้าข้อมูลที่ยังไม่ได้ใช้งานออกจากแคช (Lazy Loading Pages) Writer ทำงานโดยใช้หลักการ LRU (Least Recently Used) เพื่อล้างหน้าข้อมูลจากบัฟเฟอร์พูลไปยังดิสก์

SQL Server ประมวลผลคำสั่งค้นหาอย่างไรตั้งแต่ต้นจนจบ

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

การขอ ชั้นโปรโตคอล รับคำขอผ่านหน่วยความจำที่ใช้ร่วมกัน (Shared Memory), TCP/IP หรือ Named Pipes แล้วห่อหุ้มไว้ในแพ็กเก็ต TDS เครื่องยนต์เชิงสัมพันธ์ จากนั้นกระบวนการจะเริ่มทำงานต่อ: ตัวแยกวิเคราะห์ CMD จะตรวจสอบไวยากรณ์และความหมาย ตัวเพิ่มประสิทธิภาพจะสร้างแผนการดำเนินการที่ประหยัดที่สุด และตัวดำเนินการค้นหาจะเริ่มต้นการดึงข้อมูล

ตัวดำเนินการคำสั่งค้นหาจะเรียกใช้ เครื่องจัดเก็บข้อมูล วิธีการเข้าถึง ซึ่งกำหนดเส้นทางการสืบค้น SELECT ไปยัง Buffer ผู้จัดการและคำถามเกี่ยวกับการแก้ไขที่ส่งไปยังผู้จัดการธุรกรรม Buffer ผู้จัดการตรวจสอบแคชแผนงานและ Buffer ระบบจะแคชข้อมูลก่อน (การวิเคราะห์แบบอ่อน) หากข้อมูลไม่ได้ถูกแคชไว้ ระบบจะทำการอ่านข้อมูลจากดิสก์ (การวิเคราะห์แบบแข็ง) สำหรับการดำเนินการเขียนข้อมูล ตัวจัดการธุรกรรมจะประสานงานกับตัวจัดการบันทึก ตัวจัดการการล็อก และกระบวนการตรวจสอบจุดตรวจสอบ เพื่อให้มั่นใจว่าสอดคล้องกับหลักการ ACID

เมื่อ Storage Engine ส่งข้อมูลที่ร้องขอกลับมาแล้ว Relational Engine จะจัดรูปแบบชุดผลลัพธ์ และ Protocol Layer จะส่งข้อมูลนั้นกลับไปยังแอปพลิเคชันไคลเอ็นต์ผ่านโปรโตคอล TDS เดียวกัน

วิธีการเลือกโปรโตคอลที่เหมาะสมสำหรับการเชื่อมต่อกับ SQL Server

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

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

ใช้ TCP/IP เมื่อไคลเอ็นต์และเซิร์ฟเวอร์อยู่บนเครื่องที่แตกต่างกัน แต่เชื่อมต่อกันผ่าน WAN หรืออินเทอร์เน็ต โปรโตคอลนี้เป็นโปรโตคอลที่ใช้กันมากที่สุดในสภาพแวดล้อมการผลิต โดยค่าเริ่มต้น SQL Server จะรับฟังที่พอร์ต 1433 และโปรโตคอลนี้รองรับการเชื่อมต่อแบบเข้ารหัสผ่าน TLS

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

คำถามที่พบบ่อย

สถาปัตยกรรมของ SQL Server ประกอบด้วยสามชั้น ได้แก่ ชั้นโปรโตคอล (จัดการการสื่อสารเครือข่ายผ่านหน่วยความจำที่ใช้ร่วมกัน, TCP/IP หรือ Named Pipes), เอ็นจินเชิงสัมพันธ์ (ประมวลผลคำสั่งค้นหา) และเอ็นจินจัดเก็บข้อมูล (จัดการการจัดเก็บและการเรียกค้นข้อมูล)

TDS (Tabular Data Stream) เป็นโปรโตคอลที่ใช้โดยวิธีการเชื่อมต่อทั้งสามแบบของ SQL Server โดยจะห่อหุ้มข้อมูลไว้ในแพ็กเก็ตเครือข่ายเพื่อถ่ายโอนระหว่างไคลเอ็นต์และเซิร์ฟเวอร์ TDS ได้รับการพัฒนาขึ้นครั้งแรกโดย Sybase

การแยกวิเคราะห์แบบอ่อนจะดึงข้อมูลจาก Buffer การแคชข้อมูลในหน่วยความจำทำให้การประมวลผลเร็วขึ้น การวิเคราะห์ข้อมูลแบบฮาร์ดพาร์ซ (Hard parsing) เกิดขึ้นเมื่อข้อมูลไม่ได้ถูกแคชไว้และต้องอ่านจากที่เก็บข้อมูลบนดิสก์ ซึ่งต้องใช้การดำเนินการ I/O มากขึ้น

ตัวปรับแต่งประสิทธิภาพจะทำการค้นหาผ่านสามขั้นตอน ได้แก่ การตรวจจับแผนงานที่ไม่สำคัญ การค้นหาแผนงานสำหรับการประมวลผลธุรกรรม และการเพิ่มประสิทธิภาพการประมวลผลแบบขนาน โดยจะเลือกแผนงานที่คุ้มค่าที่สุดโดยพิจารณาจากปัจจัยด้าน CPU หน่วยความจำ และ I/O

หน้าที่มีการเปลี่ยนแปลงคือหน้าข้อมูลใน Buffer แคชที่ได้รับการแก้ไขแล้วแต่ยังไม่ได้บันทึกลงดิสก์ กระบวนการเช็คพอยต์และแบบเลซี่ Writer จัดการการบันทึกหน้าข้อมูลที่เปลี่ยนแปลงไปยังดิสก์เป็นระยะ

การบันทึกข้อมูลล่วงหน้า (Write-Ahead Logging) ช่วยให้มั่นใจได้ว่ารายการบันทึกธุรกรรมจะถูกเขียนลงดิสก์ก่อนหน้าข้อมูลจริง ซึ่งรับประกันการกู้คืนข้อมูลในกรณีที่ระบบล้มเหลวและรักษาความคงทนของธุรกรรม

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

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

สรุปโพสต์นี้ด้วย: