ตอนได้ยินครั้งแรกแปลกใจมากว่า SQL Server database ตัวที่ดีที่สุดของ microsoft มัน run linux ได้ด้วย โดย เค้าเขียนว่า SQL Server runs on Linux, starting with SQL Server 2017 (14.x) . It’s the same SQL Server Database Engine, with many similar features and services regardless of your operating system. คือ สามารถ run ได้ในการใช้งานจริง ๆ ไม่ใช่แต่บน windows นะ
สิ่งที่ “เหมือนกัน” (The Same Engine)
หัวใจหลักหรือ Database Engine เป็นตัวเดียวกันครับ
- T-SQL: คำสั่ง Query, Stored Procedures, Views, Triggers ทำงานเหมือนกัน 100%
- Features: ฟีเจอร์หลักอย่าง Columnstore, In-memory OLTP, Query Store, Data Compression มีให้ใช้เหมือนกัน
- Tools: คุณยังใช้ SQL Server Management Studio (SSMS) จาก Windows หรือ Azure Data Studio จาก Mac เชื่อมต่อเข้าไปจัดการได้ตามปกติ
ความแตกต่างที่สำคัญ (Key Differences)
ฟีเจอร์ที่ “หายไป” หรือ “ยังไม่รองรับ” บน Linux นี่คือจุดตัดสินใจสำคัญครับ ถ้างานของคุณต้องใช้สิ่งเหล่านี้ Linux อาจยังไม่ใช่คำตอบ
| หัวข้อ | Windows Version | Linux Version (Ubuntu/RHEL/Docker) |
| OS Framework | รันบน Windows OS โดยตรง | รันผ่าน SQLPAL (Abstraction Layer) |
| Case Sensitivity | ปกติจะไม่สนตัวเล็ก/ใหญ่ (CI) | Paths/File Names บน Linux สนตัวเล็ก/ใหญ่ (CS) |
| Active Directory | รองรับแบบ Native ง่ายมาก | รองรับผ่าน Kerberos (ตั้งค่าซับซ้อนกว่า) |
| File System | C:\Program Files\... | /var/opt/mssql/... |
| Management | GUI (Services.msc / Configuration Manager) | Command Line (systemctl / mssql-conf) |
- SQL Server Analysis Services (SSAS) : ยังไม่รองรับ
- SQL Server Reporting Services (SSRS) : ยังไม่รองรับ
- SQL Server Management Studio (SSMS) : ไม่มีบน linux สามารถใช้ DBEaver แทนได้ แต่มันไม่รับคำสั่ง GO
- Filestream / FileTable: ยังไม่รองรับบน Linux
- Windows PowerShell modules เฉพาะทาง: บางตัวที่ต้องพึ่งพา Windows API จะใช้ไม่ได้ (แต่
sqlservermodule บน PowerShell Core ใช้ได้)
ประสิทธิภาพและการใช้งาน (Performance & Docker)
- ความเร็ว: ในการใช้งานทั่วไป แทบไม่ต่างกัน ครับ บางผลทดสอบพบว่าบน Linux จัดการ Memory ได้นิ่งกว่าในบาง Workload
- บน Mac: หากคุณพัฒนาบน Mac การรัน SQL Server ผ่าน Docker (ซึ่งเป็น Linux base) คือวิธีมาตรฐาน ซึ่งประหยัดทรัพยากรกว่าการเปิด VM Windows เพื่อรัน SQL Server เพียงอย่างเดียวมาก
ข้อควรระวัง (Best Practices)
- Case Sensitivity: เวลาเขียน Code C# เพื่อดึง Metadata จาก System Views บน Linux ต้องระวังเรื่อง Case ของชื่อไฟล์หรือ Path ให้ดี
- Path Mapping: เวลาทำ Backup/Restore ใน Docker/Linux คุณต้องระบุ Path แบบ Linux เช่น
/var/opt/mssql/backup/mydb.bakแทนD:\Backup\... - Identity Columns: ระบบ Identity ทำงานได้เหมือนกันไม่มีปัญหา
สรุป: ถ้าเน้นเป็น Database Server เพื่อเก็บข้อมูลและรัน Query (T-SQL) เป็นหลัก Linux/Docker แทบไม่ต่างจาก Windows และเบากว่ามากครับ แต่ถ้าต้องใช้ Ecosystem พวก BI (SSRS/SSAS) ยังต้องพึ่ง Windows อยู่
อ่านเพิ่มเติม