Ubuntu環境下SQL Server性能優化指南
在Ubuntu上優化SQL Server性能需從系統配置、查詢優化、索引管理、硬件升級、監控維護五大維度綜合施策,以下是具體策略:
sudo sysctl vm.swappiness=10降低交換分區使用(避免頻繁換頁到硬盤),設置vm.dirty_background_ratio=10(臟頁寫入閾值)和vm.dirty_ratio=20(強制寫入閾值),優化內存與磁盤的同步效率。sudo systemctl disable/uninstall service_name禁用PostgreSQL、Redis等非必需服務,釋放CPU、內存資源,減少系統負載。mssql-conf工具合理分配內存,避免SQL Server占用過多內存導致系統卡頓。例如,設置最大內存為服務器總內存的70%-80%(如sudo /opt/mssql/bin/mssql-conf set memory.memorylimitmb 8192設置8GB上限),并為操作系統預留足夠內存。ALTER DATABASE dbname SET RECOVERY SIMPLE),減少事務日志的生成與占用,提升寫入性能。/mnt/ssd/data,日志文件放在/mnt/ssd/logs。SELECT column1, column2 FROM table替代SELECT *,減少不必要的數據傳輸;在WHERE子句中使用索引列(如WHERE id = 1而非WHERE YEAR(create_time) = 2025),避免對列進行函數操作導致的索引失效。SELECT t1.name, t2.order_count FROM users t1 JOIN (SELECT user_id, COUNT(*) AS order_count FROM orders GROUP BY user_id) t2 ON t1.id = t2.user_id),減少臨時表創建;將嵌套子查詢轉換為EXISTS/NOT EXISTS(如SELECT * FROM users WHERE EXISTS (SELECT 1 FROM orders WHERE orders.user_id = users.id)),提升查詢效率。LIMIT 10000, 10),使用書簽分頁(記錄上一頁最后一條記錄的ID,查詢WHERE id > last_id ORDER BY id LIMIT 10),避免OFFSET導致的性能下降。WHERE、JOIN、ORDER BY中的列)、外鍵列創建索引;對于復合查詢,創建復合索引(如CREATE INDEX idx_customer_date ON orders(customer_id, order_date)),并遵循最左前綴原則(查詢時優先使用復合索引的前幾列)。UPDATE STATISTICS tablename更新索引統計信息(幫助查詢優化器選擇最優執行計劃);使用ALTER INDEX ALL ON tablename REBUILD(重建索引,解決碎片問題)或ALTER INDEX ALL ON tablename REORGANIZE(重組索引,適用于輕度碎片)維護索引性能。top(查看CPU、內存占用)、htop(可視化監控)、vmstat 1(查看系統級I/O、CPU使用)、iostat -x 1(查看磁盤I/O詳情)等工具,實時監控系統資源使用情況,及時發現瓶頸(如CPU占用率持續超過80%、磁盤I/O等待時間超過20ms)。sys.dm_exec_query_stats查看查詢性能統計、sys.dm_os_wait_stats查看等待類型)分析性能瓶頸,針對性優化。