07 July 2025

อย่าปล่อยให้ power query ดึงข้อมูลสดจาก server แล้วทำระบบล่ม


เรื่องระบบแฮงค์นี่ได้ยินบ่อยมากครับ เพราะความอยากจะได้ข้อมูลสดล่าสุดนี่เอง

ที่ผมสอนจะแนะนำให้ connect ไปดึงข้อมูลที่อยู่ในโฟลเดอร์ที่ฝ่ายระบบจัดการส่งแฟ้มมาให้ แม้ไม่สดแต่ปลอดภัยกับระบบมากกว่า

ด้านผู้ใช้ Excel ผมสอนจบแค่ตรงนี้ ส่วนฝ่ายที่ทำหน้าที่ดูแลระบบข้อมูลยังต้องมีหน้าที่อีกหลายอย่าง

Copilot แนะนำมาตามนี้

ปัญหา: พนักงานดึงข้อมูลจากเซิร์ฟเวอร์จนระบบแฮงค์

หลายครั้งที่การดึงข้อมูลตรงจากเซิร์ฟเวอร์ด้วย Power Query หรือเครื่องมือ BI อื่นๆ โดยไม่จำกัดเงื่อนไข (เช่น WHERE บน SQL) ทำให้เกิดโหลดสูง เกิด blocking หรือแม้แต่เซิร์ฟเวอร์ล่ม

---

สาเหตุหลัก

- ไม่มีการจำกัดช่วงข้อมูล (no filter/paging) ทำให้ดึง row จำนวนมากในครั้งเดียว

- Concurrent request จากหลายคนพร้อมกัน

- Query ซับซ้อน (JOIN/aggregation ขนาดใหญ่)

- ไม่มี caching หรือ read-replica ทำให้ทุก request ไปที่ primary database

---

ทางเลือกในการแก้ไข

| แนวทาง | ข้อดี | ข้อจำกัด |

| 1. ใช้ Data Extract (Snapshot) | ลดโหลดบนเซิร์ฟเวอร์หลัก<br>ใช้ไฟล์ CSV/Parquet ให้ Power Query อ่านแทน | ข้อมูลไม่สด 100% ต้องรัน schedule |

| 2. สร้าง Read Replica / Reporting DB | แยกโหลดอ่านกับโหลดเขียน<br>ลดผลกระทบต่อระบบหลัก | ต้องจัดการ replication latency และ infrastructure เพิ่ม |

| 3. สร้าง API หรือ View ที่มี paging | บังคับ limit/offset ทุก request<br>ควบคุมเงื่อนไขได้ชัดเจน | ต้องพัฒนา API หรือ view เพิ่ม |

| 4. ใช้ Data Gateway + Throttling | ควบคุม concurrent connections<br>ผูกสิทธิ์ service account | ต้องติดตั้ง and configure gateway
|
| 5. Pre-aggregated Summary Tables | สร้างตารางสรุปรายวัน/รายเดือน<br>ลดงานคำนวณหนักๆ | อาจต้องออกแบบ ETL ล่วงหน้า |

---

แนวทางปฏิบัติแนะนำ

1. สร้าง Reporting Database หรือ Read Replica สำหรับการดึงข้อมูล heavy read

2. ตั้ง Data Extract Schedule ที่เตรียมไฟล์รายวันให้ฝั่ง Users นำไปใช้ โดยไม่ connect ตรง

3. พัฒน API/View ที่รับ parameter กรองข้อมูล (เช่น วันที่, รหัสลูกค้า) เพื่อบังคับให้ทุก request ต้องใส่เงื่อนไข

4. ติดตั้ง On-premises Data Gateway (ถ้าใช้ Power Query ผ่าน cloud) พร้อมกำหนด throttling และ least-privilege

5. จัดทำ Governance:
- อบรมพนักงานให้ใช้ filter/paging
- กำหนด policy ห้าม query แบบ full table scan
- มอนิเตอร์ log และแจ้งเตือนเมื่อเกิด query heavy load

---

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

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.