← Back to PostgreSQL course
PHASE 1: THE CORE PROBLEM & ARCHITECTURE PHASE 1 CAPSTONE 🏆

Day 4: Architecture Capstone & Phase 1 Synthesis (การประมวลรวบยอดสถาปัตยกรรม Phase 1: การวัดผล Benchmark, การบูรณาการ Network-Memory-Locking และกรอบการนำเสนอเพื่อโต้แย้งทางสถาปัตยกรรม)

ผนึกรวมบทเรียน Days 1–3 สู่สถาปัตยกรรมระดับ Capstone: บูรณาการการตัด Network RTT (Day 1) + การเข้าถึง Shared Buffers บน RAM (Day 2) + การใช้ Non-Blocking Locks (Day 3) รวบยอดเป็น Single In-Database Pipeline พร้อมเครื่องมือวัดผล Benchmark EXPLAIN (ANALYZE, BUFFERS) และ Presentation Defense Framework เพื่อชนะใจ Senior Architects และบอร์ดบริหาร

📍 ตำแหน่งปัจจุบันของคุณบน Roadmap (18-Day Masterclass) บทสรุปยอด Phase 1 (พร้อมก้าวสู่ Phase 2)
Day 1: Chatty App & Network RTT ✓
➔
Day 2: Storage Engine & Buffer Pool ✓
➔
Day 3: Transaction Lock Contention ✓
➔
Day 4: Architecture Capstone & Synthesis
➔
Day 5: Pillar 1 - UDFs & Inlining
เปิดบท

ถอดรหัสคำสำคัญของวันนี้

สามวันที่ผ่านมาเราชี้คอขวดได้แล้ว วันนี้เราต้องมีไม้บรรทัด — ไม่เดาว่าช้าตรงไหน แต่เปิดดูว่าฐานข้อมูลทำงานอย่างไรจริงๆ

Performance Measurement

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

Plan Analysis

การอ่านแผนที่ Query Planner เลือกใช้ เช่น สแกนทั้งตาราง (Seq Scan) หรือวิ่งผ่านดรรชนี (Index Scan)

EXPLAIN (ANALYZE, BUFFERS)

คำสั่งใน PostgreSQL ที่รัน Query จริง แล้วพ่นรายงานทั้งเวลา แผนการทำงาน และจำนวนบล็อก 8KB ที่อ่านจาก RAM (shared hit) หรือจากดิสก์ (read)

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

เปรียบกับชีวิตจริง

เหมือนใบตรวจร่างกายกับผลสแกน MRI แทนที่จะเดาเองว่าทำไมปวดหัว ผลสแกนบอกชัดว่าอวัยวะชิ้นไหนทำงานหนัก และปัญหาอยู่ตรงไหน

นี่คือเครื่องมือจบ Phase 1 ก่อนจะเริ่มสร้าง Stored Code ใน Phase 2 ทำให้เรามีตัวเลขเปรียบเทียบชัดเจนว่าโค้ดใหม่เร็วกว่าโค้ดเดิมกี่เท่า

1

🏛️ มโนทัศน์ สถาปัตยกรรมองค์กร และสถานการณ์จริง (Concept & Architecture)

ตลอด 3 วันที่ผ่านมา เราได้เจาะลึกคอขวดแยกตามมิติสำคัญ 3 ด้าน: Day 1 (Network Latency & Chatty App), Day 2 (Disk I/O & Shared Buffer Pool Mechanics), และ Day 3 (Transaction Lock Contention & Concurrency) แต่ในระบบ Enterprise จริง ปัญหาเหล่านี้ไม่ได้เกิดขึ้นแยกกันอย่างโดดเดี่ยว แต่มักทับซ้อนกันเป็นโดมิโนความช้าใน Pipeline เดียวกัน!

💳 วิกฤตระบบเคลียริง 50,000 TPS: เมื่อคอขวด 3 มิติทับซ้อนกันจนระบบล่ม

ระบบชำระเงินและเคลียริงออเดอร์ (Order Settlement Engine) ของแพลตฟอร์มการเงินแห่งหนึ่ง รองรับ Transaction ในช่วงโปรโมชันสูงสุด 50,000 TPS ทีมวิศวกรพบว่าระบบเกิดปัญหาซ้อนทับกัน 3 ชั้นพร้อมกัน:

20 RTTs/Order
Network Layer: ยิงวนลูป 20 รอบต่อ 1 ออเดอร์ (Chatty Anti-Pattern)
68% Hit Ratio
Memory Layer: Buffer Cache ถูกเตะทิ้ง เกิด Disk Read มหาศาล
p99 = 15s + Deadlock
Locking Layer: Lock Wait Queue ค้างยาวจนเกิด Deadlock ล่มระบบ

เมื่อทีมงานพยายามแก้เฉพาะจุด (Siloed Optimization) เช่น สเกลเพิ่ม RAM ให้ฐานข้อมูล ปัญหาก็แค่ขยับไปคอขวดที่ Network หรือ Lock Wait แทน สถาปนิกจึงต้องรวบยอดแก้ไขทั้ง 3 มิติในคำสั่งเดียวด้วย Capstone In-Database Pipeline

🧩 การบูรณาการ 3 เสาหลักสู่ End-to-End Architectural Synthesis

1. Network Layer (Day 1) Single Round-Trip

ปัญหาเดิม: วนลูปยิง Query ข้ามสาย Network 20 รอบต่อออเดอร์ เสียเวลา RTT และ Serialization

  • ยุบการสื่อสารจาก 20 ครั้งเหลือ 1 Single Round-Trip ใน PL/pgSQL Block
  • ตัดเวลาเดินทาง Network Latency ออกได้ 99.9%
2. Memory Layer (Day 2) Buffer Pool Proximity

ปัญหาเดิม: สแกนกวาดข้อมูลออกจาก RAM จนเกิด Disk I/O Bottleneck และ Cache Hit ตกเหลือ 68%

  • ประมวลผลบน Data Pages 8KB ใน shared_buffers โดยตรงแบบ Zero Copy
  • ดัน Cache Hit Ratio กลับคืนสู่ระดับ > 99% (Disk Read = 0)
3. Locking Layer (Day 3) Non-Blocking Concurrency

ปัญหาเดิม: แย่งกันถือ Lock ค้างยาวนาน เกิด Lock Wait Queue และ Deadlock วงกลม

  • ใช้ FOR UPDATE SKIP LOCKED ข้ามแถวติดล็อกไปทำแถวถัดไปทันที
  • คุม Fail-Fast ด้วย SET LOCAL lock_timeout = '2s'; ขจัด Deadlock 100%
สถาปัตยกรรมระดับ Capstone: การบูรณาการ 3 มิติ (Network + Memory + Concurrency Pipeline) End-to-End Synthesis Blueprint
❌ แย่: Siloed Optimization (แก้เฉพาะจุด คอขวดสลับที่) ✅ ปัง: Phase 1 Capstone Synthesis (รวม 3 พลังใน 1 Pipeline) 1. Network Bottleneck (Chatty Loops) • วนลูปยิง Query 20 รอบต่อ 1 ออเดอร์ (SELECT + UPDATE + INSERT) • RTT สะสม = 20 × 2ms = 40ms ต่อออเดอร์ (50,000 TPS = ระบบล่มทันที) 💥 Serialization CPU Spike พุ่ง 100% บน App Server 2. Memory Churn & Disk I/O Throttling • กวาดข้อมูลข้าม Socket บีบเตะ Data Pages ออกจาก shared_buffers • Cache Hit Ratio ตกฮวบเหลือ 68% บังคับอ่าน Data Pages จาก Disk 💥 Disk I/O Wait (IO:DataFileRead) พุ่ง 90% เซิร์ฟเวอร์แทบค้าง 3. Lock Queue Cascade & Deadlocks • แต่ละคำสั่งถือ Row Lock ค้างไว้ระหว่างรอ Network RTT • Lock Wait Queue สะสมนับหมื่น Connections จนเต็ม max_connections • สองคำสั่งแย่งกันอัปเดตสลับแถว เกิด Deadlock (77P01) ยกเลิกคำสั่งทิ้ง ผลรวม: p99 Latency ทะลุ 15 วินาที และระบบเคลียริงพังทลาย The Capstone In-Database Synthesis Pipeline Single Execution Unit ที่ผนึกรวมการแก้ปัญหา 3 มิติเข้าด้วยกัน ⚡ Step 1: Single Round-Trip Boundary (Day 1) • App ยิงสคริปต์ก้อนเดียวจบ ไม่มีการวิ่งวนลูปยิบย่อยข้ามสาย LAN • RTT รวมลดลงจาก 40ms เหลือเพียง 2ms ใน Single Request ⚡ Step 2: Buffer Pool Proximity & Data Anchoring (Day 2) • ประกาศตัวแปรด้วย %ROWTYPE ปลอดภัยเรื่อง Data Alignment • อัปเดตและบันทึก Audit บน shared_buffers ด้วย CTE RETURNING • รักษาระดับ Cache Hit Ratio > 99% (Disk Read = 0 ใน RAM) ⚡ Step 3: Non-Blocking Concurrency & Fail-Fast (Day 3) • คุม Timeout ด้วย SET LOCAL lock_timeout = '2s'; • ดึงออเดอร์ด้วย FOR UPDATE SKIP LOCKED ข้ามแถวติดล็อกทันที • ปลด Lock ในเสี้ยววินาที ขจัด Deadlock 100% ⚡ ผลลัพธ์: p99 Latency ลดจาก 15s เหลือ 4ms (เร็วขึ้น 3,750 เท่า!)
🎙️ สคริปต์คำพูดสำหรับพรีเซนท์บนเวที (Presentation Pitch Script)

"ทุกท่านครับ การแก้ปัญหาคอขวดระดับ Enterprise ไม่สามารถมองแยกส่วนได้ การสเกล RAM อย่างเดียวไม่ช่วยถ้าแอปยัง Chatty ข้าม Network และการตัด Network ไม่ช่วยถ้าตารางยังติด Deadlock

วันนี้เราขอเสนอ Phase 1 Synthesis Architecture ที่รวม 3 พลังไว้ในคำสั่งเดียว: (1) ยุบ Network เหลือ 1 Single Round-Trip (2) ประมวลผลติดชิด Buffer Pool ดัน Cache Hit > 99% และ (3) ขจัด Deadlock 100% ด้วย Non-Blocking Locks ผลลัพธ์คือการตัด p99 Latency จาก 15 วินาที เหลือเพียง 4 มิลลิวินาที โดยไม่ต้องลงทุนซื้อฮาร์ดแวร์เพิ่มแม้แต่บาทเดียวครับ"

ถอดรหัสคำศัพท์เทคนิคระดับ Capstone (Architecture Synthesis Vocab)

🌐 End-to-End Architectural Synthesis
การเชื่อมโยงการตัด Network RTT + การเข้าถึง RAM (shared_buffers) + การใช้ Non-Blocking Locks (FOR UPDATE SKIP LOCKED) เข้าเป็น Pipeline เดียวกัน เพื่อแก้คอขวดทั้งระบบ
⏱️ p99 Latency (Tail Latency)
ค่าเวลาตอบสนองของระบบในกลุ่มที่ช้าที่สุด 1% ซึ่งเป็นดัชนีชี้วัดความเสถียรของระบบระดับ Enterprise (ดีกว่าการมองแค่ค่าเฉลี่ย Mean/Average ที่มักกลบปัญหาคอขวดจริง)
🔬 EXPLAIN (ANALYZE, BUFFERS, TIMING)
เครื่องมือวัดผลประสิทธิภาพเชิงลึกทางสถาปัตยกรรม เพื่อพิสูจน์ค่า Execution Time, Planning Time, และ Buffer Cache Hits/Reads ออกมาเป็นตัวเลขวิทยาศาสตร์ที่โต้แย้งไม่ได้
🛡️ Presentation Defense Framework
กรอบการนำเสนอและตอบคำถามเพื่อรับมือกับข้อโต้แย้งคลาสสิกของสถาปนิกสาย App-Centric ที่มักคัดค้านว่า "ห้ามเขียน Business Logic บน Database" ให้เข้าใจถึงขอบเขตความคุ้มค่า (Boundary & Trade-offs)
⚡ pgbench (Load Testing Engine)
โปรแกรมทดสอบโหลดมาตรฐานที่มาพร้อมกับ PostgreSQL ใช้สำหรับจำลอง Concurrency หลายร้อย Connections เพื่อวัดค่า Transactions Per Second (TPS) และ Latency ก่อนขึ้น Production จริง
⚖️ Architectural Decision Matrix
เมทริกซ์การตัดสินใจเชิงสถาปัตยกรรม: งานคำนวณที่ต้องเน้น Data Consistency สูงให้ทำ In-Database ส่วนงาน Heavy Media Processing หรือ AI/ML ให้ทำบน Application/Worker Layer
🧮 วิดเจ็ตทดลอง: ตัวจำลองการรวบยอดสถาปัตยกรรมและผลลัพธ์ p99 Latency (Capstone Synthesis Simulator)

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

ผลลัพธ์การประเมิน Benchmark ระดับ Capstone:
บูรณาการครบ 3 มิติ: ขจัดคอขวดสมบูรณ์แบบ ทั้ง Network, Disk I/O และ Lock Contention
p99 Latency = 4.2 ms (เร็วกว่าเดิม 3,500x)
2

💻 ปูพื้นฐานไวยากรณ์ & แบบฝึกหัดไต่ระดับ (Capstone Pipeline Syntax)

การรวบยอดสถาปัตยกรรม Capstone Pipeline จะนำไวยากรณ์จาก Days 1–3 มาเรียงต่อกันเป็นเวิร์กโฟลว์เดียวที่ทรงประสิทธิภาพและปลอดภัยสูงสุด:

🧱 แกะโครงสร้างไวยากรณ์ Capstone Pipeline: รวบ 3 มิติใน 1 บล็อก

ไวยากรณ์หลัก: Capstone Pipeline Synthesis Architecture PL/pgSQL Capstone Blueprint
DO $$
DECLARE
    -- [Day 2 Concept] ใช้ %ROWTYPE ผูกกับ Schema ตาราง เพื่อความปลอดภัยของหน่วยความจำบน RAM
    v_task_rec   tasks%ROWTYPE;
    v_proc_count INT := 0;
BEGIN
    -- [Day 3 Concept] ตั้งค่า lock_timeout เพื่อทำ Fail-Fast ป้องกันการนั่งรอคิวค้างยาว
    SET LOCAL lock_timeout = '2s';

    -- [Day 3 Concept] ดึงข้อมูลแถวแรกที่ยังไม่ติดล็อกด้วย FOR UPDATE SKIP LOCKED
    SELECT * INTO v_task_rec
    FROM tasks
    WHERE status = 'PENDING'
    ORDER BY priority DESC
    LIMIT 1
    FOR UPDATE SKIP LOCKED; -- 🎯 Non-blocking concurrent access

    -- [Day 1 & Day 2 Concept] ประมวลผลบน shared_buffers แบบ Single Round-Trip
    IF v_task_rec.id IS NOT NULL THEN
        UPDATE tasks
        SET status = 'COMPLETED', updated_at = CURRENT_TIMESTAMP
        WHERE id = v_task_rec.id;

        RAISE NOTICE 'Capstone Pipeline: ประมวลผล Task ID % สำเร็จ', v_task_rec.id;
    END IF;
END $$;
💡 ความเชื่อมโยง: ไวยากรณ์ด้านบนใช้ %ROWTYPE (Day 2) เพื่อรับประกันความถูกต้องใน RAM, ใช้ lock_timeout และ SKIP LOCKED (Day 3) เพื่อขจัดปัญหา Lock Queue และประมวลผลจบใน 1 Single Round-Trip (Day 1)

🏋️‍♂️ แบบฝึกหัดไต่ระดับการเขียนจริง (จาก Benchmark ➔ Capstone Synthesis)

🟢 Level 1: การใช้ EXPLAIN (ANALYZE, BUFFERS, TIMING) เพื่อวัดผล Benchmark ระดับเริ่มต้น
-- [1] คำสั่งวัดผลทางสถาปัตยกรรมแบบเจาะลึก 3 มิติ
-- วัดค่า Execution Time จริง + สถิติ Data Pages (shared hit / read) + Planning Time
EXPLAIN (ANALYZE, BUFFERS, TIMING)
SELECT status, COUNT(*)
FROM orders
WHERE created_at >= CURRENT_DATE
GROUP BY status;

-- 📤 ตัวอย่างผลลัพธ์ Benchmark เชิงสถาปัตยกรรม:
-- HashAggregate  (cost=125.00..127.00 rows=3 width=16) (actual time=0.852..0.855 rows=3 loops=1)
--   Buffers: shared hit=842 read=0  <-- 🎯 พิสูจน์ว่าอ่านจาก RAM 100% ไร้ Disk Read!
--   Planning Time: 0.120 ms
--   Execution Time: 0.895 ms         <-- 🎯 วัดเวลาจริงได้ในระดับเสี้ยววินาที
จุดที่ต้องสังเกต: ค่า shared hit=842 read=0 คือหลักฐานยืนยันความเร็วระดับ Nanoseconds ของ Buffer Pool Proximity
🟡 Level 2: การตรวจสอบสถานะ Lock Contention และ Cache Hit Ratio สดๆ ในระบบ ระดับปานกลาง
-- [1] ดึงสถิติ Cache Hit Ratio ของตาราง orders เพื่อพิสูจน์กลไก Buffer Pool Proximity
SELECT
    relname AS table_name,
    heap_blks_hit AS ram_hits,
    heap_blks_read AS disk_reads,
    ROUND(100.0 * heap_blks_hit / NULLIF(heap_blks_hit + heap_blks_read, 0), 2) AS cache_hit_ratio_pct
FROM pg_statio_user_tables
WHERE relname = 'orders';

-- 📤 ผลลัพธ์:
-- table_name | ram_hits | disk_reads | cache_hit_ratio_pct
-- orders     |   984500 |        120 |               99.99
จุดที่ต้องสังเกต: หากค่า cache_hit_ratio_pct สูงกว่า 99% แสดงว่าระบบปลอดพ้นจาก Disk I/O Bottleneck เรียบร้อยแล้ว

🔴 Level 3: Refactoring โค้ดระดับ Capstone (รวบยอด Days 1–3 เข้าเป็น Pipeline เดียว)

เปรียบเทียบโค้ดเดิมที่มีปัญหาซ้อนทับ 3 มิติ กับโค้ดใหม่ระดับ Capstone ที่ประมวลผลเคลียริงออเดอร์และบันทึก Audit Log ใน RAM รวดเดียว:

❌ โค้ดเดิมแบบ Flawed: มีปัญหาซ้อน 3 มิติ (Chatty + I/O + Locks) p99 = 15s + Deadlock
# โค้ดเคลียริงออเดอร์บน Application Server
# ⚠️ ปัญหา 1: ยิง 3 คำสั่งข้าม Network ต่อ 1 รายการ (Chatty RTT)
# ⚠️ ปัญหา 2: ไม่ใช้ Row Lock ป้องกันแย่งงาน (Race Condition)
# ⚠️ ปัญหา 3: กวาดข้อมูลเข้า App จนล้าง Cache ใน RAM (Disk I/O พุ่ง)
for order in db.execute("SELECT id, amount FROM orders WHERE status = 'PENDING'"):
    if order.amount >= 1000:
        db.execute(
            "UPDATE orders SET status = 'PROCESSING' WHERE id = %s",
            (order.id,)
        )
        db.execute(
            "INSERT INTO audit_logs (order_id, action) VALUES (%s, 'PROCESS')",
            (order.id,)
        )
วิเคราะห์ข้อเสีย: สลับโอนข้อมูลข้าม Network ซ้ำซาก, เกิด Deadlock บ่อย และทำให้ Connection Pool เต็มระบบ
✅ โค้ดใหม่ระดับ Capstone: PL/pgSQL Synthesis Pipeline p99 = 4ms (เร็วขึ้น 3,750x)
DO $$
DECLARE
    -- [บรรทัดที่ 1-2] ประกาศตัวแปรเรกคอร์ด %ROWTYPE (Day 2) และตัวแปรนับจำนวน
    v_order_rec   orders%ROWTYPE;
    v_processed   INT := 0;
BEGIN
    -- [บรรทัดที่ 3] กำหนดเวลาในการรอ Lock ไม่เกิน 2 วินาทีเพื่อป้องกันคิวค้าง (Day 3 Fail-Fast)
    SET LOCAL lock_timeout = '2s';

    -- [บรรทัดที่ 4] ดึงออเดอร์ค้างประมวลผล 1 รายการโดยใช้ FOR UPDATE SKIP LOCKED (Day 3 Non-Blocking)
    SELECT * INTO v_order_rec
    FROM orders
    WHERE status = 'PENDING' AND amount >= 1000
    ORDER BY created_at ASC
    LIMIT 1
    FOR UPDATE SKIP LOCKED;

    -- [บรรทัดที่ 5] ตรวจสอบว่าดึงออเดอร์สำเร็จหรือไม่
    IF v_order_rec.id IS NOT NULL THEN

        -- [บรรทัดที่ 6-12] ใช้ CTE ยุบคำสั่ง UPDATE และ INSERT Audit Log ลงบน RAM ใน Single Pipeline (Day 1 & Day 2)
        WITH updated_order AS (
            UPDATE orders
            SET status = 'PROCESSED',
                updated_at = CURRENT_TIMESTAMP
            WHERE id = v_order_rec.id
            RETURNING id, amount
        )
        INSERT INTO audit_logs (order_id, action, amount_processed)
        SELECT id, 'SETTLED_IN_DATABASE', amount
        FROM updated_order;

        -- [บรรทัดที่ 13] บันทึกสถิติสำเร็จ
        v_processed := 1;
        RAISE NOTICE 'Capstone Pipeline: เคลียริงออเดอร์ ID % สำเร็จแบบ Single Round-Trip', v_order_rec.id;
    ELSE
        RAISE NOTICE 'Capstone Pipeline: ไม่พบออเดอร์ที่พร้อมประมวลผล (หรือ ออเดอร์กำลังถูก Thread อื่นทำอยู่)';
    END IF;
END $$;
วิเคราะห์ข้อได้เปรียบ: จบทุกขั้นตอนใน RAM เที่ยวเดียว! ไม่เสียค่า RTT, ดัน Cache Hit > 99% และใช้ Non-Blocking Locks ขจัด Deadlock 100%
3

📝 คลังข้อสอบและแบบประเมินความรู้ (18 ข้อ Multiple Choices พร้อมเฉลยยิบ)

แบบทดสอบวัดระดับความเข้าใจสถาปัตยกรรม Capstone Synthesis, การวัดผล Benchmark (EXPLAIN ANALYZE BUFFERS), Presentation Defense Framework, และข้อสอบสะสมทบทวนครบทั้ง Day 1, Day 2 & Day 3 คลิกเลือกคำตอบ ก, ข, ค, หรือ ง เพื่อดูผลลัพธ์และคำอธิบายอย่างละเอียดทันที

📊 สรุปผลการประเมิน Phase 1 Capstone (Day 4) 0 / 18
ความคืบหน้า ตอบแล้ว 0 จาก 18 ข้อ

🎉 ยินดีด้วยครับ! คุณได้ผ่านการฝึกอบรม Phase 1: The Core Problem & Architecture เรียบร้อยแล้ว 100%

บทเรียน Day 4: Architecture Capstone & Phase 1 Synthesis เป็นการสรุปรวบยอดสถาปัตยกรรม Phase 1 โดยการผนึกรวมการแก้ปัญหา Network Latency (Day 1), Disk I/O & Memory (Day 2) และ Transaction Lock Contention (Day 3) เข้าด้วยกันเป็น Capstone Pipeline พร้อมสร้างกรอบการวัดผล Benchmark (EXPLAIN (ANALYZE, BUFFERS)) และ Presentation Defense Framework สำหรับโต้แย้งทางสถาปัตยกรรมได้อย่างสมบูรณ์แบบ

🚩 ก้าวต่อไปสู่ Phase 2: Deep Dive into the 4 Pillars

ในวันถัดไป เราจะเริ่มต้นที่ Day 5 (Pillar 1: User-Defined Functions & Inlining Mechanics) เจาะลึกการสร้าง Stored Functions, ฟังก์ชันแบบ IMMUTABLE / STABLE / VOLATILE และกลไก Function Inlining ของ Query Planner เพื่อเพิ่มความเร็วระดับนวัตกรรมครับ!