首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> SQL Server 資料庫 >> 關於SqlServer

SQL 面試題精選與深度解析:從硬體規劃到備份策略

     編輯:關於SqlServer

精選 7 道高頻 SQL DBA/開發面試題,涵蓋儲存規劃、叢集維運、複寫策略、索引優化、備份設計、監控自動化、程式物件選擇。

題目 1:磁碟櫃 14 塊 73GB,資料庫 200GB (含日誌),如何規劃 RAID?

核心考點

  • RAID 等級選擇取決於**效能 vs 容量 vs 可用性**權衡
  • 是否需存放備份檔案、讀寫特徵 (OLTP/OLAP)

參考答案

策略RAID 等級可用容量適用場景
極致效能、無備份需求RAID 0+1 (RAID 10)14 × 73 × 50% = 511 GB核心交易庫、高 IOPS、可承受單顆磁碟故障
平衡效能與容量RAID 513 × 73 = 949 GB讀多寫少、備份存別處、容忍重建時間
大容量、順序寫入 (日誌/備份)RAID 6 或 RAID 5012 × 73 = 876 GB歸檔庫、備份目標、雙磁碟容錯

檔案分離原則:Data、Log、TempDB、Backup 盡可能分置不同物理磁碟組,減少 IO 爭用。現代條帶化磁碟陣列通常由控制器自動分散,人工干預邊際效益遞減。

題目 2:雙節點叢集打作業系統補丁,需重啟,如何零停機作業?

標準滾動更新流程

  1. 確認當前擁有者節點 (Node A Active, Node B Passive)
  2. 透過 Node B 專用管理 IP (心跳/私有網路) 遠端登入 Node B
  3. 在 Node B 安裝補丁 → 重啟 Node B
  4. 驗證 Node B 服務正常、叢集資源上線
  5. 叢集管理器 → 將資源群組**手動移動**至 Node B (或 cluster group /move)
  6. 同樣流程修補 Node A → 重啟 → 移回 (或保持 Node B Active)

關鍵術語

  • Failover / Failback:資源群組移動
  • Quorum:仲裁磁碟/見證檔案,確保單節點存活時仍能決策
  • Heartbeat / Private Network:節點間健康檢查專用網路

題目 3:資料庫 A 複寫至 B (即時) 與 C (每日一次),如何制定策略?

A → B (即時)

  • 交易式複寫:發行者 A → 散發者 (可同機) → 訂閱者 B,延遲秒級
  • 替代:Linked Server + Distributed Transaction + 觸發器 (表少、延遲極低要求)

A → C (每日)

  • 快照式複寫**:排程每日生成快照、傳輸、套用至 C
  • 替代:BACKUP DATABASE → FTP/網路複製 → RESTORE (維護窗口允許時)

題目 4:Order 表 90 欄位、20 個索引、15 個複合索引、3 個索引超過 10 欄位,如何優化?

問題剖析

  • 題目缺失關鍵語境:讀寫比例、查詢模式、資料量、業務容忍度
  • 「超過 10 欄位」索引:B-tree 深度大、鍵值長、維護成本高、統計資訊不準

優化方向

  1. 審查索引必要性:sys.dm_db_index_usage_stats 找出未使用/低使用索引 → 刪除
  2. 壓縮寬索引:SQL Server 2008+ INCLUDE 欄位移至非鍵欄位 (覆蓋索引);2012+ 可用 FILTERED INDEX
  3. 垂直拆表:熱欄位 (常查詢/更新) 置主表,冷欄位 (大物件/稽核/歷史) 移至副表,1:1 關聯
  4. 鎖升級對策:大表高併發易觸發表鎖 → 分區表、啟用 ALLOW_ROW_LOCKS/ALLOW_PAGE_LOCKS 微調、樂觀鎖
  5. 統計資訊維護:寬索引統計採樣率低 → FULLSCAN 或增大採樣

題目 5:200GB 資料庫,日增 50MB,7×24 存取,制定備份策略

推薦策略

  • 完整備份:每週日 02:00 (維護窗口)
  • 差異備份:週一至週六 02:00 (僅備份自上次完整備份後變更)
  • 交易日誌備份:每 **15-30 分鐘** 一次 (RPO ≤ 30 分鐘)
  • 備份驗證:RESTORE VERIFYONLY 每次備份後自動執行
  • 異地備份:備份檔案異地複製 (異地機房/雲端),每週測試還原

恢復時間目標 (RTO/RPO) 量化

指標目標實現方式
RPO≤ 30 分鐘日誌備份頻率 15-30 分鐘
RTO≤ 4 小時預先規劃還原腳本、壓縮備份、並行還原、Instant File Initialization

題目 6:管理 50 台資料庫,每日檢查作業完成狀態,如何自動化?

集中監控架構

  1. 在每台伺服器建立 Linked Server** 指向中央管理庫 (或反向)
  2. 中央庫建立 分散式檢視 聚合作業歷史:
    CREATE VIEW dbo.vw_AllJobs AS
    SELECT 'Server01' AS ServerName, * FROM [Server01].msdb.dbo.sysjobactivity
    UNION ALL
    SELECT 'Server02', * FROM [Server02].msdb.dbo.sysjobactivity
    -- ... 50 台
    UNION ALL
    SELECT 'Server50', * FROM [Server50].msdb.dbo.sysjobactivity;
  3. 排程查詢檢視,失敗作業郵件/簡訊告警 (配合 sp_send_dbmail)
  4. 進階:部署 SQL Server 代理程式多伺服器管理 (MSX/TSX)**,中央下發作業、集中收集歷史

題目 7:自訂函數 vs 預存程序:差異、唯一適用場景、選擇準則

核心差異對照

特性純量/表值函數預存程序
可在 SELECT/WHERE/JOIN 中直接呼叫✅❌
可執行動態 SQL (EXEC/sp_executesql)❌✅
可修改資料表資料 (INSERT/UPDATE/DELETE)❌ (除非 CLR)✅
可建立/刪除資料庫物件 (DDL)❌✅
支援 OUTPUT 參數 / 多結果集❌ / ❌✅ / ✅
支援 TRY...CATCH / 交易控制❌✅
計畫緩存/參數嗅探行為內聯展開 (TVF) / 獨立獨立計畫

唯一必須用函數場景

SELECT dbo.CalculateTax(Amount, Region) FROM Orders;
WHERE dbo.IsValidCustomer(CustID) = 1;
CROSS APPLY dbo.GetOrderDetails(OrderID);

唯一必須用預存程序場景

  • 動態 SQL 建構/執行
  • 複雜業務流程含 DML/DDL/交易/錯誤處理
  • 需回傳多結果集或 OUTPUT 參數
  • 排程作業步驟 (Agent Job Step)

選擇決策樹

  1. 需在查詢運算式中使用?→ 函數
  2. 需修改資料/執行 DDL/動態 SQL/交易控制?→ 預存程序
  3. 單純計算/轉換/查詢封裝?→ 函數 (優先 TVF 內聯效能)
  4. 業務流程協調/批次處理/報表資料準備?→ 預存程序

面試不僅考知識點,更考**結構化思維、權衡分析、落地細節**。將每題拆解為「核心考點 → 標準答案 → 進階延伸 → 實戰避坑」四層作答,展現專業深度。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved