在Ubuntu上進行SQL Server性能調優的完整指南
mssql-server、mssql-tools、unixodbc-dev),確保系統為最新版本以獲取安全補丁和性能改進。配置mssql-conf工具設置SA密碼、選擇版本(如Enterprise/Standard),并通過systemctl status mssql-server驗證服務狀態。開啟TCP端口1433(sudo ufw allow 1433)以允許遠程連接。/etc/security/limits.d/mssql-server.conf文件,增加文件描述符和進程數限制(如mssql soft nofile 1048576、mssql hard nofile 1048576、mssql soft nproc 131072、mssql hard nproc 131072),防止因資源不足導致查詢中斷。tuned工具創建自定義配置文件(如/usr/lib/tuned/mssql/tuned.conf),調整內存管理(如vm.swappiness=10減少交換分區依賴)、I/O調度(如vm.dirty_background_ratio=5優化臟頁寫入),選擇“throughput-performance”或“latency-performance” profile優化系統性能。mssql-conf命令設置內存目標(如sudo /opt/mssql/bin/mssql-conf set memory.target 4G),根據服務器內存大小合理分配(建議為物理內存的70%-80%,保留足夠內存給系統和其他應用)。對于大型數據庫,可調整max server memory參數避免內存耗盡。ALTER DATABASE dbname SET RECOVERY SIMPLE WITH NO_WAIT;切換至簡單恢復模式,減少事務日志文件的占用空間,提升寫入性能。SELECT *,只查詢所需列(如SELECT column1, column2 FROM table),減少數據傳輸量;JOIN代替子查詢(如SELECT t1.col1, t2.col2 FROM table1 t1 JOIN table2 t2 ON t1.id = t2.id),避免臨時表創建;WHERE子句,避免使用!=、<>、OR連接條件(如用BETWEEN代替IN),防止全表掃描;LIKE 'abc%'),避免通配符%開頭(無法利用索引)。WHERE、JOIN、ORDER BY的列創建索引(如CREATE INDEX idx_column ON table(column));CREATE INDEX idx_covered ON Employees(DepartmentID) INCLUDE (FirstName, LastName)),包含查詢所需的所有列,避免回表操作;UPDATE STATISTICS dbname.table更新統計信息,使用ALTER INDEX ALL ON table REBUILD或REORGANIZE重建/重組碎片化索引(碎片率>30%時重建,10%-30%時重組);top/htop實時查看SQL Server進程的CPU、內存占用;vmstat 1監控系統級資源(CPU、內存、I/O);iostat -x 1查看磁盤I/O負載(關注await、%util指標);netstat -an | grep mssql檢查網絡連接狀態。BACKUP DATABASE dbname TO DISK = '/path/backup.bak');sys.dm_db_index_physical_stats視圖);DBCC SHRINKFILE (dbname_log, 1),謹慎使用,避免頻繁收縮)、清理無用數據(如舊日志表)。ALTER DATABASE dbname SET ALLOW_SNAPSHOT_ISOLATION ON;、ALTER DATABASE dbname SET READ_COMMITTED_SNAPSHOT ON;),減少鎖爭用,提高并發性能。