續接上集,聚焦程序監控、鎖/死鎖分析、效能分析工具、資料庫修復與日誌縮減實戰指令。
-- 所有使用者與程序
EXEC sp_who;
-- 僅作用中程序
EXEC sp_who 'active';
-- 鎖資訊(spid 1-50 為系統,>50 為使用者)
EXEC sp_lock;
-- 查看特定程序正在執行的 SQL 陳述式
DBCC INPUTBUFFER (spid);
-- 推薦:改良版 sp_who3 直接顯示 SQL 文字
EXEC sp_who3;
-- 死鎖分析專用
EXEC sp_who_lock;
-- 截斷日誌並收縮至 5 MB
BACKUP LOG DatabaseName WITH NO_LOG;
DBCC SHRINKFILE (DatabaseName_Log, 5);
注意:完整復原模式請先執行日誌備份再收縮,否則會中斷備份鏈。
-- 時間統計
SET STATISTICS TIME ON; -- OFF 關閉
-- I/O 統計
SET STATISTICS IO ON; -- OFF 關閉
-- 圖形化執行計畫(查詢分析器 Ctrl+L 或工具列圖示)
-- 文字版執行計畫
SET SHOWPLAN_ALL ON; -- 詳細
SET SHOWPLAN_TEXT ON; -- 簡潔
SET STATISTICS PROFILE ON; -- 執行後含實際統計
-- 切換單一使用者模式
ALTER DATABASE [ErrorDB] SET SINGLE_USER;
-- 修復特定資料表(允許資料遺失)
DBCC CHECKTABLE ('ErrorTable', REPAIR_ALLOW_DATA_LOSS);
-- 或修復整個資料庫(小型資料庫適用)
DBCC CHECKDB ('ErrorDB', REPAIR_ALLOW_DATA_LOSS);
-- 恢復多使用者模式
ALTER DATABASE [ErrorDB] SET MULTI_USER;
| 選項 | 行為 | 資料遺失風險 |
|---|---|---|
| REPAIR_ALLOW_DATA_LOSS | 配置/取消配置頁、修復結構錯誤、刪除損壞文字物件 | 高 |
| REPAIR_FAST | 輕量修復(如非叢集索引鍵值) | 無 |
| REPAIR_REBUILD | 包含 FAST 所有動作 + 重建索引等耗時操作 | 無 |
建議:修復完成後**立即完整備份**。若可能,優先從乾淨備份還原。
SELECT OBJECT_NAME(id) AS TableName, COUNT(*) AS AutoStatsCount
FROM sysindexes
WHERE OBJECTPROPERTY(id, 'IsUserTable') = 1
AND INDEXPROPERTY(id, name, 'IsAutoStatistics') = 1
GROUP BY OBJECT_NAME(id)
ORDER BY COUNT(*) DESC;
自動統計過多 = 索引不足,優先調校前幾名資料表。