SQL Server Archiเทคเจอร์ (อธิบาย)
⚡ สรุปอย่างชาญฉลาด
SQL Server Archiโครงสร้างของระบบเป็นไปตามแบบจำลองไคลเอ็นต์-เซิร์ฟเวอร์ โดยแบ่งออกเป็นสามชั้นหลัก ได้แก่ ชั้นโปรโตคอลสำหรับการสื่อสารผ่านเครือข่าย ชั้นเอนจินเชิงสัมพันธ์สำหรับการประมวลผลคำสั่งค้นหา และชั้นเอนจินจัดเก็บข้อมูลสำหรับการจัดการและการเรียกค้นข้อมูล
MS SQL Server มีสถาปัตยกรรมแบบไคลเอ็นต์-เซิร์ฟเวอร์ กระบวนการทำงานของ MS SQL Server เริ่มต้นด้วยแอปพลิเคชันไคลเอ็นต์ส่งคำขอ SQL Server จะรับคำขอ ประมวลผล และตอบกลับด้วยข้อมูลที่ประมวลผลแล้ว เรามาพิจารณารายละเอียดของสถาปัตยกรรมทั้งหมดที่แสดงด้านล่างนี้กัน:
ดังที่แผนภาพด้านล่างแสดงให้เห็น SQL Server ประกอบด้วยส่วนประกอบหลักสามส่วน Archiเทคเจอร์:
- ชั้นโปรโตคอล
- เครื่องยนต์เชิงสัมพันธ์
- เครื่องยนต์จัดเก็บข้อมูล
เลเยอร์โปรโตคอล – SNI
เลเยอร์โปรโตคอลของ SQL Server หรือที่รู้จักกันในชื่ออินเทอร์เฟซเครือข่ายเซิร์ฟเวอร์ (SNI) รองรับสถาปัตยกรรมไคลเอ็นต์-เซิร์ฟเวอร์สามประเภท แต่ละโปรโตคอลรองรับสถานการณ์เครือข่ายที่แตกต่างกัน การทำความเข้าใจโปรโตคอลเหล่านี้เป็นสิ่งสำคัญก่อนที่จะศึกษาว่าการสืบค้นข้อมูลได้รับการประมวลผลภายในอย่างไร
หน่วยความจำที่ใช้ร่วมกัน
ลองนึกถึงสถานการณ์การสนทนาในตอนเช้าตรู่ ทอมและแม่ของเขาอยู่ที่เดียวกัน คือบ้านของพวกเขา ทอมขอชงกาแฟ และแม่ก็ชงให้ทันที ในทำนองเดียวกัน SQL Server ก็มีโปรโตคอลหน่วยความจำร่วม (Shared Memory) เมื่อไคลเอนต์และเซิร์ฟเวอร์ทำงานบนเครื่องเดียวกัน ทั้งสองฝ่ายสื่อสารกันผ่านหน่วยความจำร่วมโดยไม่มีค่าใช้จ่ายด้านเครือข่าย
การเปรียบเทียบ: Tom เชื่อมโยงกับ Client, Mom เชื่อมโยงกับ SQL Server, Home เชื่อมโยงกับ Machine และการสื่อสารด้วยวาจาเชื่อมโยงกับโปรโตคอล Shared Memory
หมายเหตุเกี่ยวกับการตั้งค่า: In สตูดิโอจัดการ SQLสำหรับการเชื่อมต่อภายในเครื่อง ตัวเลือก “ชื่อเซิร์ฟเวอร์” สามารถเป็น “.”, “localhost”, “127.0.0.1” หรือ “Machine\Instance” ได้
TCP / IP
ลองนึกภาพว่าทอมต้องการกาแฟจากร้านที่อยู่ห่างออกไป 10 กิโลเมตร ทอมอยู่ที่บ้าน ส่วนร้านกาแฟตั้งอยู่ในตลาดที่พลุกพล่าน พวกเขาติดต่อสื่อสารกันผ่านเครือข่ายโทรศัพท์มือถือ ในทำนองเดียวกัน SQL Server ก็ให้ข้อมูลในลักษณะเดียวกันนี้ โปรโตคอล TCP / IP เมื่อเครื่องไคลเอ็นต์และ SQL Server อยู่บนเครื่องที่แยกจากกันและเชื่อมต่อกันผ่านเครือข่าย
การเปรียบเทียบ: ทอมเปรียบเสมือนไคลเอ็นต์ ร้านกาแฟเปรียบเสมือน SQL Server บ้านและตลาดเปรียบเสมือนสถานที่ห่างไกล และเครือข่ายโทรศัพท์มือถือเปรียบเสมือนโปรโตคอล TCP/IP
หมายเหตุเกี่ยวกับการตั้งค่า: ใน SQL Management Studio ตัวเลือก “ชื่อเซิร์ฟเวอร์” สำหรับการเชื่อมต่อ TCP/IP ต้องเป็น “เครื่อง\อินสแตนซ์ของเซิร์ฟเวอร์” โดยค่าเริ่มต้น SQL Server ใช้พอร์ต 1433 สำหรับการเชื่อมต่อ TCP/IP
ชื่อท่อ
สุดท้ายนี้ ทอมต้องการชาเขียวจากเซียร์ราเพื่อนบ้านของเขา พวกเขาอยู่ในสถานที่เดียวกันเนื่องจากเป็นเพื่อนบ้านกัน และสื่อสารกันผ่านเครือข่ายภายใน ในทำนองเดียวกัน SQL Server ก็มีโปรโตคอล Named Pipe เมื่อไคลเอนต์และเซิร์ฟเวอร์เชื่อมต่อกันผ่านเครือข่ายบริเวณท้องถิ่น (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 เป็นส่วนประกอบแรกที่ได้รับข้อมูลคำสั่งค้นหา หน้าที่หลักของมันคือการตรวจสอบคำสั่งค้นหาเพื่อหาข้อผิดพลาดทางไวยากรณ์และความหมาย จากนั้นจึงสร้างโครงสร้างต้นไม้ของคำสั่งค้นหา
การตรวจสอบวากยสัมพันธ์: เช่นเดียวกับภาษาโปรแกรมอื่นๆ 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 จะไม่ได้รับการปรับแต่งประสิทธิภาพ แต่จะถูกคอมไพล์เป็นรูปแบบภายใน
ค่าใช้จ่ายในการสืบค้นข้อมูลคำนวณจากปัจจัยต่างๆ เช่น การใช้งาน 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 และเรียกใช้ข้อมูลเมื่อจำเป็น ก่อนที่จะศึกษาองค์ประกอบต่างๆ ของหน่วยประมวลผลจัดเก็บข้อมูล จำเป็นต้องเข้าใจก่อนว่าข้อมูลถูกจัดเก็บข้อมูลในเชิงกายภาพอย่างไร
ไฟล์ข้อมูลและขอบเขต
ไฟล์ข้อมูลจัดเก็บข้อมูลทางกายภาพในรูปแบบของหน้าข้อมูล โดยแต่ละหน้ามีขนาด 8 กิโลไบต์ นี่คือหน่วยจัดเก็บข้อมูลที่เล็กที่สุดในโลก SQL Serverหน้าข้อมูลจะถูกจัดกลุ่มอย่างเป็นระบบเป็นส่วนขยาย (extents) ไม่มีการกำหนดหน้าข้อมูลให้กับวัตถุใดโดยตรง แต่การบำรุงรักษาจะทำผ่านส่วนขยายแทน แต่ละหน้าจะมีส่วนหัวของหน้า (96 ไบต์) ซึ่งประกอบด้วยข้อมูลเมตา เช่น ประเภทของหน้า หมายเลขหน้า พื้นที่ที่ใช้ พื้นที่ว่าง และตัวชี้ไปยังหน้าถัดไปและหน้าก่อนหน้า
ประเภทของไฟล์
ไฟล์หลัก: ฐานข้อมูลทุกฐานจะมีไฟล์หลักอยู่หนึ่งไฟล์ ไฟล์นี้จะเก็บข้อมูลสำคัญทั้งหมดที่เกี่ยวข้องกับตาราง มุมมอง ทริกเกอร์ และวัตถุอื่นๆ โดยทั่วไปนามสกุลไฟล์จะเป็น .mdf แต่ก็อาจเป็นนามสกุลใดก็ได้
ไฟล์สำรอง: ฐานข้อมูลอาจมีหรือไม่มีไฟล์รองหลายไฟล์ ไฟล์เหล่านี้เป็นไฟล์เสริมและมีข้อมูลเฉพาะของผู้ใช้ โดยทั่วไปนามสกุลไฟล์จะเป็น .ndf แต่สามารถเป็นนามสกุลใดก็ได้
ไฟล์บันทึก: หรือที่รู้จักกันในชื่อ Write-Ahead Logs นามสกุลไฟล์คือ .ldf ไฟล์บันทึกเหล่านี้ใช้สำหรับการจัดการธุรกรรม การกู้คืนจากเหตุการณ์ที่ไม่พึงประสงค์ และการย้อนกลับธุรกรรมที่ยังไม่ได้รับการยืนยัน
ระบบจัดเก็บข้อมูลประกอบด้วยส่วนประกอบหลักสามส่วน แต่ละส่วนมีบทบาทเฉพาะในการจัดการการเข้าถึงและความสมบูรณ์ของข้อมูล
วิธีการเข้าถึง
วิธีการเข้าถึงทำหน้าที่เป็นอินเทอร์เฟซระหว่างตัวดำเนินการแบบสอบถามและ Buffer ตัวจัดการหรือบันทึกธุรกรรม ไม่ได้ทำการประมวลผลด้วยตนเอง แต่จะกำหนดประเภทของคำสั่งค้นหา:
- หากคำถามคือ คำสั่ง SELECT (DML)มันถูกส่งต่อไปยัง Buffer ผู้จัดการเพื่อดำเนินการต่อไป
- หากคำถามคือ คำสั่งที่ไม่ใช่ SELECT (DDL และ DML)ข้อมูลจะถูกส่งต่อไปยังตัวจัดการธุรกรรม ซึ่งส่วนใหญ่จะประกอบด้วยคำสั่ง UPDATE, INSERT และ DELETE
Buffer ผู้จัดการ
การขอ Buffer Manager ทำหน้าที่จัดการฟังก์ชันหลักสำหรับ Plan Cache, การแยกวิเคราะห์ข้อมูล และการจัดการหน้าข้อมูลที่เปลี่ยนแปลง
วางแผนแคช
แผนการสืบค้นข้อมูลที่มีอยู่: การขอ Buffer ตัวจัดการจะตรวจสอบว่าแผนการดำเนินการมีอยู่ในแคชแผนการดำเนินการที่จัดเก็บไว้หรือไม่ หากมีอยู่ ระบบจะใช้แผนการดำเนินการของแบบสอบถามที่แคชไว้และแคชข้อมูลที่เกี่ยวข้องโดยตรง
แผนแคชสำหรับผู้ใช้ครั้งแรก: หากแผนการดำเนินการคิวรีครั้งแรกมีความซับซ้อน ระบบจะจัดเก็บไว้ในแคชแผนการดำเนินการ เพื่อให้มั่นใจได้ว่าคิวรีนั้นจะพร้อมใช้งานได้เร็วขึ้นในครั้งต่อไปที่ SQL Server ได้รับคิวรีเดียวกัน
การแยกวิเคราะห์ข้อมูล: Buffer แคชและการจัดเก็บข้อมูล
การขอ Buffer ตัวจัดการจะให้สิทธิ์ในการเข้าถึงข้อมูลที่จำเป็น โดยมีสองแนวทางที่เป็นไปได้ ขึ้นอยู่กับว่าข้อมูลนั้นมีอยู่ในแคชหรือไม่:
Buffer แคช – การแยกวิเคราะห์แบบอ่อน
การขอ Buffer ผู้จัดการมองหาข้อมูลใน Buffer แคช: หากมีข้อมูลอยู่ ตัวประมวลผลคำสั่งค้นหาจะใช้ข้อมูลนั้นโดยตรง ซึ่งจะช่วยเพิ่มประสิทธิภาพเนื่องจากการดึงข้อมูลจากแคชใช้การดำเนินการ I/O น้อยกว่าการดึงข้อมูลจากที่เก็บข้อมูลบนดิสก์
การจัดเก็บข้อมูล – การแยกวิเคราะห์แบบฮาร์ดแวร์
หากไม่มีข้อมูลอยู่ในนั้น Buffer แคชจะค้นหาข้อมูลที่ต้องการในที่เก็บข้อมูลบนดิสก์ จากนั้นข้อมูลจะถูกจัดเก็บไว้ในแคชข้อมูลเพื่อใช้งานในอนาคต
ผู้จัดการธุรกรรม
ตัวจัดการธุรกรรมจะถูกเรียกใช้เมื่อวิธีการเข้าถึงตรวจสอบแล้วพบว่าแบบสอบถามนั้นไม่ใช่คำสั่ง SELECT โดยจะช่วยให้มั่นใจได้ถึงความสอดคล้องและความคงทนของข้อมูลผ่านส่วนประกอบย่อยหลายส่วน:
ตัวจัดการบันทึก
โปรแกรมจัดการบันทึกจะเก็บรักษาข้อมูลไว้ track คือข้อมูลอัปเดตทั้งหมดที่ดำเนินการในระบบผ่านบันทึกที่จัดเก็บไว้ในบันทึกธุรกรรม (Transaction Logs) แต่ละรายการบันทึกประกอบด้วยหมายเลขลำดับบันทึก (Log Sequence Number) พร้อมด้วยรหัสธุรกรรม (Transaction ID) และบันทึกการแก้ไขข้อมูล (Data Modification Record) กลไกนี้ tracธุรกรรมที่ดำเนินการแล้วและธุรกรรมที่ยกเลิก
ผู้จัดการล็อค
ระหว่างการทำธุรกรรม ข้อมูลที่เกี่ยวข้องในพื้นที่จัดเก็บจะเข้าสู่สถานะล็อก ตัวจัดการล็อกจะจัดการกระบวนการนี้ เพื่อให้มั่นใจถึงความสอดคล้องและการแยกข้อมูล คุณสมบัติเหล่านี้เรียกอีกอย่างว่า ACID (Atomน้ำแข็ง ความสม่ำเสมอ ความโดดเดี่ยว ความคงทน)
กระบวนการดำเนินการ
ขั้นตอนการดำเนินการมีดังนี้:
- โปรแกรมจัดการบันทึก (Log Manager) จะเริ่มทำการบันทึก และโปรแกรมจัดการการล็อก (Lock Manager) จะทำการล็อกข้อมูลที่เกี่ยวข้อง
- มีการเก็บรักษาสำเนาของข้อมูลไว้ใน Buffer ขุมทรัพย์
- ข้อมูลที่ต้องอัปเดตจะถูกเก็บสำเนาไว้ในบันทึก (Log) Bufferและเหตุการณ์ทั้งหมดจะอัปเดตข้อมูลใน Data Buffer.
- หน้าเว็บที่จัดเก็บข้อมูลที่แก้ไขแล้วเรียกว่า... หน้าสกปรก.
การบันทึกจุดตรวจสอบและการบันทึกล่วงหน้า
กระบวนการตรวจสอบจุดบันทึกจะทำงานประมาณหนึ่งครั้งต่อนาที และทำเครื่องหมายหน้าข้อมูลที่เปลี่ยนแปลงทั้งหมดเพื่อเขียนลงดิสก์ อย่างไรก็ตาม หน้าข้อมูลนั้นจะถูกส่งไปยังหน้าข้อมูลของไฟล์บันทึกก่อนจาก 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 แม้ว่าจะไม่ค่อยพบเห็นในระบบสมัยใหม่ แต่ก็ยังคงมีประโยชน์สำหรับแอปพลิเคชันอินทราเน็ตแบบเก่า

















