บั๊ก SQLite อายุ 16 ปี ทำให้ Tailscale ขัดข้องหลายครั้งในปีที่ผ่านมา

ที่มาภาพ: The Register

Software-อ่าน 6 นาทีThe Register

บั๊ก SQLite อายุ 16 ปี ทำให้ Tailscale ขัดข้องหลายครั้งในปีที่ผ่านมา

⚡ สรุป 30 วิ

ทีมวิศวกรของ Tailscale ค้นพบว่าข้อบกพร่อง WAL‑Reset ของ SQLite ที่ซ่อนอยู่กว่า 16 ปีก่อให้เกิดการหยุดทำงานหลายครั้งในปีที่ผ่านมา การอัปเดต SQLite…

การให้บริการเครือข่ายแบบ peer‑to‑peer ของ Tailscale ต้องเผชิญกับการหยุดทำงานหลายครั้งตั้งแต่ปลายปีที่ผ่านมา หลังจากสอบสวนเป็นเวลาเกือบหกเดือน ทีมวิศวกรเปิดเผยว่าเหตุหลักคือข้อบกพร่องในระบบจัดการฐานข้อมูล SQLite ที่ซ่อนอยู่มานานกว่า 16 ปี การค้นพบนี้ไม่เพียงอธิบายสาเหตุของความขัดข้อง แต่ยังชี้ให้เห็นถึงความเสี่ยงที่อาจเกิดขึ้นเมื่อใช้งานซอฟต์แวร์ระดับพื้นฐานในลักษณะการกำหนดค่าที่ไม่ได้มาตรฐาน

Overview

Tailscale ทำงานบนโปรโตคอล WireGuard VPN เพื่อเชื่อมต่ออุปกรณ์ต่าง ๆ เข้าเป็นเครือข่ายเมชเสมือนที่เรียกว่า “tailnet” ระบบจัดเก็บข้อมูลของ tailnet ทั้งหมดอยู่ในไฟล์ฐานข้อมูล SQLite หนึ่งไฟล์ซึ่งทำหน้าที่บันทึกสถานะและการกำหนดค่าแต่ละอุปกรณ์ การเลือกใช้ SQLite มาจากความนิยม ความเชื่อถือได้สูง และความง่ายต่อการปรับใช้งาน ซึ่งทีมวิศวกรของ Tailscale ได้เริ่มใช้ตั้งแต่ปี 2022

ฐานข้อมูลนี้ถูกสำรองเป็น “snapshot” ทุกหลายนาทีโดยทำการคัดลอกไฟล์ SQLite ทั้งหมดแล้วอัปโหลดไปยัง S3 bucket ของ Amazon Web Services การออกแบบนี้ช่วยให้การกู้คืนข้อมูลทำได้อย่างรวดเร็วเมื่อต้องเผชิญกับเหตุขัดข้องใด ๆ

Incident Timeline

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

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

จนกระทั่งเมื่อทำงานร่วมกับทีมดูแล SQLite พวกเขาใช้ “virtual file system shim” ที่พัฒนาขึ้นใหม่เพื่อบันทึกกิจกรรมของระบบไฟล์เสมือนอย่างละเอียด ซึ่งเป็นเครื่องมือที่ได้รับเงินทุนสนับสนุนจาก Tailscale เอง

Technical Root Cause

ผลการวิเคราะห์เผยว่า ปัญหามาจากข้อบกพร่องที่เรียกว่า WAL‑Reset bug ในโหมด **Write‑Ahead Log (WAL) ของ SQLite ซึ่งทำงานเป็น “hopper” ชั่วคราวสำหรับข้อมูลใหม่ ก่อนที่จะถ่ายโอนไปยังไฟล์ฐานข้อมูลหลัก

เมื่อมีหลายการเชื่อมต่อเปิดอยู่บนไฟล์เดียวกันและกระบวนการ checkpoint พยายามคัดลอกหน้า (pages) จาก WAL ไปยังฐานข้อมูลหลัก หากมีการเขียนข้อมูลเกิดขึ้นในช่วงเวลาที่ checkpoint กำลังทำงาน หน้าที่ของ checkpoint จะสับสนคิดว่าหน้าเหล่านั้นได้ถูกคัดลอกแล้วแม้ว่ายังไม่ได้ ทำให้หน้าดังกล่าวหายไปโดยถาวรและทำให้ฐานข้อมูลเสียรูปแบบต่อเนื่อง

ข้อบกพร่องนี้มีเงื่อนไขเฉพาะที่ต้องเปิดใช้งาน WAL mode และมีการเชื่อมต่อหลายอันพร้อมกัน จึงเป็นเหตุผลที่เกิดขึ้นได้ยากในสภาพแวดล้อมปกติ แต่การที่ Tailscale ควบคุมกระบวนการ checkpoint ด้วยตนเองเพื่อให้สำรองข้อมูลทำงานเร็วและสม่ำเสมอ ทำให้ระบบเข้าสู่เงื่อนไขที่หายากนี้

Fix and Mitigation

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

สำหรับ Tailscale ทีมงานได้ยุติการควบคุม checkpoint ด้วยตนเองและกลับไปใช้กลไกอัตโนมัติของ SQLite อีกครั้ง นอกจากนี้ยังปรับกระบวนการสำรองให้ทำในโหมดที่ไม่เปิดใช้งาน WAL หรือจำกัดจำนวนการเชื่อมต่อพร้อมกันบนไฟล์ฐานข้อมูลเดียว

  • อัปเดต SQLite เป็นเวอร์ชันที่แก้ไขแล้ว
  • ปิดการใช้ manual checkpoint ในระบบ Tailscale
  • ตรวจสอบให้แน่ใจว่าไม่มีหลาย connection เปิดพร้อมกันในโหมด WAL

Implications for Developers

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

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

Summary

การหยุดทำงานของ Tailscale ในปีที่ผ่านมาได้รับสาเหตุจากข้อบกพร่อง WAL‑Reset ของ SQLite ที่ซ่อนอยู่มานานกว่า 16 ปี การอัปเดตฐานข้อมูลและการเปลี่ยนแปลงวิธีจัดการ checkpoint ทำให้ระบบกลับสู่ภาวะปกติ บทเรียนสำคัญคือควรหลีกเลี่ยงการปรับแต่งพารามิเตอร์พื้นฐานของซอฟต์แวร์โดยไม่เข้าใจผลกระทบอย่างละเอียด.

แชร์บทความนี้:

ชอบบทความแบบนี้?

สมัคร AI Automate Weekly Newsletter — รับเคล็ดลับ AI + how-to ใหม่
ทุกสัปดาห์ตรงถึง inbox ฟรี ไม่มีสแปม

แหล่งข่าวต้นฉบับ

ชื่อต้นฉบับ
Tailscale says deeply buried 16-year-old SQLite bug caused last year's outages
ผู้เขียน
Unknown
แหล่ง
The Register
วันที่เผยแพร่
13 สิงหาคม 2569 เวลา 04:29

Related

บทความที่เกี่ยวข้อง

ย้ายฐานข้อมูล Home Assistant จาก SQLite ไป PostgreSQL ทำให้ระบบสมาร์ทโฮมเร็วขึ้นSoftware
-

ย้ายฐานข้อมูล Home Assistant จาก SQLite ไป PostgreSQL ทำให้ระบบสมาร์ทโฮมเร็วขึ้น

ผู้ใช้ Home Assistant หลายพันคนประสบปัญหาความล่าช้าเมื่อต้องบันทึกข้อมูลจำนวนมาก การเปลี่ยนจาก SQLite ไป PostgreSQL ลดเวลาโหลด Logbook เหลือ 1‑2 วินาที…

XDA Developers6 นาที
ทดสอบฟีเจอร์ Direct‑LAN ของ Pangolin 1.21 พบสองอุปกรณ์ล้มเหลวSoftware
-

ทดสอบฟีเจอร์ Direct‑LAN ของ Pangolin 1.21 พบสองอุปกรณ์ล้มเหลว

การทดสอบ Pangolin 1.21 พบว่าแม้จะอ้างว่ามีฟีเจอร์ Direct‑LAN แต่ในสามอุปกรณ์สองเครื่องต้องส่งผ่าน DERP ของ Tailscale ทำให้ latency เพิ่มจาก 5‑19 ms เป็น…

XDA Developers6 นาที
ชมคอนเซ็ปต์ Windows 7 Remastered: การผสมผสานดีไซน์คลาสสิกกับฟีเจอร์ยุคใหม่Software
13 สิงหาคม 2569 เวลา 08:30

ชมคอนเซ็ปต์ Windows 7 Remastered: การผสมผสานดีไซน์คลาสสิกกับฟีเจอร์ยุคใหม่

Windows 7 Remastered คือคอนเซ็ปต์จาก AR 4789 ที่ผสมผสานดีไซน์คลาสสิกของ Windows 7 เข้ากับฟีเจอร์ยุคใหม่ เช่น Fluent Design และ Semantic Search…

DroidSans9 นาที
MATLAB ตกจากอันดับ 20 ของ Tiobe ครั้งแรกในรอบสิบปี สาเหตุค่าลิขสิทธิ์และอัปเดตช้าSoftware
13 สิงหาคม 2569 เวลา 05:30

MATLAB ตกจากอันดับ 20 ของ Tiobe ครั้งแรกในรอบสิบปี สาเหตุค่าลิขสิทธิ์และอัปเดตช้า

Tiobe Index สิงหา 2026 แสดง MATLAB อยู่อันดับ 25 หลังจากตกออกจากท็อป 20 เป็นครั้งแรกในสิบปี สาเหตุหลักคือต้นทุนลิขสิทธิ์สูงและการพัฒนาแบบช้า…

InfoWorld5 นาที
คัดลอกลิงก์แล้ว!