Ngân hàng đề — Microsoft Administering Azure SQL

Tìm thấy 100 câu.

Câu 31 Plan and implement data platform resources (20–25%)
If you wanted to keep two Azure SQL databases in sync, which service would you employ?
  1. A Azure Blob Sync
  2. B Azure File Sync
  3. C SQL Data Sync
  4. D Azure Data Factory
Xem giải thích

Đáp án

C — SQL Data Sync.

Ghi nhớ về chất lượng câu hỏi

⚠ Câu này GẦN TRÙNG với #17418 trong cùng lô.

Câu Hỏi gì
⚠ #17418 ⚠ SQL Data Sync LÀM ĐƯỢC những việc gì (chọn nhiều)
⚠ #17427 (câu này) ⚠ dịch vụ nào giữ hai CSDL đồng bộ
⚠ Cùng khoá ⚠ SQL Data Sync

Vì sao đúng

⚠ SQL Data Sync đúng tên gọi và đúng mục đích:

⚠ CSDL A ↔ ⚠ HUB ↔ ⚠ CSDL B
        ↓
⚠ Đồng bộ HAI CHIỀU theo lịch
        ↓
⚠ Chọn được từng bảng, từng cột

⚠ Hub bắt buộc là Azure SQL Database; ⚠ member có thể là Azure SQL Database khác hoặc SQL Server tại chỗ.

Vì sao các phương án khác sai

  • D (Azure Data Factory) — ⚠ công cụ ETL/tích hợp dữ liệu: ⚠ chép và biến đổi dữ liệu theo đường ống ⚠ MỘT CHIỀU; ⚠ dùng được nhưng ⚠ không phải "giữ hai CSDL đồng bộ" theo nghĩa hai chiều.

  • B (Azure File Sync) — ⚠ đồng bộ THƯ MỤC TỆP giữa máy chủ file Windows và Azure Files.

  • A ("Azure Blob Sync") — ⚠ dịch vụ KHÔNG TỒN TẠI.

Ghi nhớ

⚠ Các cách sao chép dữ liệu trong Azure — bảng phải thuộc: | Cách | Chiều | Ca dùng | |---|---|---| | ⚠ SQL Data Sync | ⚠ HAI chiều | ⚠ phân phối dữ liệu, lai tại chỗ | | ⚠ Active Geo-Replication | ⚠ MỘT chiều | ⚠ DR, bản sao đọc | | ⚠ Data Factory | ⚠ MỘT chiều, có biến đổi | ⚠ ETL, kho dữ liệu | | ⚠ Transactional Replication | ⚠ MỘT chiều | ⚠ phân phối theo thời gian gần thực | | ⚠ Azure File Sync | ⚠ hai chiều | ⚠ TỆP, không phải CSDL |

Từ khoá nhận diện:

"giữ hai CSDL đồng bộ hai chiều" → ⚠ SQL Data Sync "ETL, biến đổi dữ liệu" → ⚠ Data Factory "bản sao dự phòng ở vùng khác" → ⚠ Geo-Replication "đồng bộ thư mục tệp" → ⚠ Azure File Sync

⚠ Azure Data Factory — biết để phân biệt Đặc điểm
⚠ Đường ống ETL/ELT được quản
⚠ Hơn 90 connector ⚠ CSDL, SaaS, tệp
⚠ Biến đổi dữ liệu bằng data flow hoặc gọi dịch vụ khác
⚠ Lập lịch và điều phối
⚠ Đối chiếu Google Cloud ⚠ gần với Data Fusion và Cloud Composer
⚠ Chọn công cụ theo mục đích Mục đích
⚠ Hai nơi cùng GHI và cùng cần dữ liệu mới ⚠ Data Sync
⚠ Một nơi ghi, nơi khác chỉ đọc ⚠ Geo-Replication hoặc replication
⚠ Chuyển dữ liệu có biến đổi vào kho phân tích ⚠ Data Factory
⚠ Di trú một lần ⚠ DMS
⚠ Rủi ro của đồng bộ hai chiều Rủi ro
⚠ XUNG ĐỘT khi hai bên cùng sửa một dòng
⚠ Phải chọn quy tắc: hub thắng hay member thắng
⚠ Xoá nhầm lan đi mọi nơi
⚠ Nguyên tắc thiết kế ⚠ hạn chế số nơi được GHI cùng một dữ liệu

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Có thật sự cần ghi ở nhiều nơi không | ⚠ nếu không, một chiều đơn giản hơn nhiều | | Quy tắc xử lý xung đột đã chọn chưa | | | Độ trễ đồng bộ có chấp nhận được không | ⚠ tối thiểu 5 phút |

Và câu hỏi nên đặt trước khi dựng bất kỳ hệ thống đồng bộ hai chiều nào: có thể thiết kế lại để chỉ MỘT nơi được ghi không?. Đồng bộ một chiều đơn giản hơn, ít lỗi hơn, và không bao giờ có xung đột.

Câu 32 Implement a secure environment (15–20%)
When setting up encryption in Azure SQL Database, which encryption method encrypts sensitive data before it leaves a client's system and it remains encrypted in the database?
  1. A Transparent Data Encryption
  2. B Object-Level Encryption
  3. C Always Encrypted
  4. D Row-Level Security
Xem giải thích

Đáp án

C — Always Encrypted.

Vì sao đúng

⚠ Always Encrypted mã hoá TẠI MÁY KHÁCH:

⚠ Ứng dụng (driver client)
   ⚠ MÃ HOÁ dữ liệu tại đây
        ↓ ⚠ gửi đi đã mã hoá
⚠ Đường truyền: đã mã hoá
        ↓
⚠ SQL Server: LƯU dạng mã hoá
   ⚠ server KHÔNG có khoá
        ↓
⚠ Đọc về: client tự GIẢI MÃ
Ai KHÔNG đọc được Nội dung
⚠ DBA ⚠ dù có toàn quyền trên CSDL
⚠ Người quản hạ tầng đám mây
⚠ Ai lấy được file dữ liệu hoặc bản sao lưu
⚠ Chỉ ứng dụng có KHOÁ ⚠ mới đọc được

Vì sao các phương án khác sai

  • A (TDE) — ⚠ mã hoá ở tầng SERVER khi ghi xuống đĩa: ⚠ dữ liệu đi tới server ở dạng THƯỜNG, ⚠ và ⚠ DBA đọc được bình thường.

  • D (Row-Level Security) — ⚠ kiểm soát truy cập DÒNG, không mã hoá.

  • B ("Object-Level Encryption") — ⚠ không phải thuật ngữ của SQL Server.

Ghi nhớ

⚠ TDE so với Always Encrypted — bảng phải thuộc: | Tiêu chí | ⚠ TDE | ⚠ Always Encrypted | |---|---|---| | ⚠ Mã hoá ở đâu | ⚠ SERVER, khi ghi đĩa | ⚠ CLIENT, trước khi gửi | | ⚠ Phạm vi | ⚠ cả CSDL | ⚠ từng CỘT | | ⚠ DBA đọc được | ⚠ CÓ | ⚠ KHÔNG | | ⚠ Ứng dụng cần sửa | ⚠ KHÔNG | ⚠ CÓ — driver và chuỗi kết nối | | ⚠ Truy vấn | ⚠ bình thường | ⚠ HẠN CHẾ nhiều |

Từ khoá nhận diện:

"mã hoá trước khi rời máy khách" → ⚠ Always Encrypted "mã hoá tệp dữ liệu, trong suốt" → ⚠ TDE "che khi hiển thị" → ⚠ Dynamic Data Masking "DBA không được đọc" → ⚠ Always Encrypted

⚠ Hai loại mã hoá của Always Encrypted Loại
⚠ Deterministic ⚠ cùng giá trị → cùng bản mã; CHO PHÉP so sánh bằng, JOIN, GROUP BY
⚠ Randomized ⚠ an toàn hơn; KHÔNG so sánh, KHÔNG index được
⚠ Đánh đổi ⚠ deterministic có thể bị suy đoán qua phân tích tần suất
⚠ Chọn ⚠ randomized cho cột chỉ đọc ra hiển thị; deterministic khi cần tra cứu
⚠ Hai loại khoá Khoá
⚠ Column Encryption Key (CEK) ⚠ mã hoá dữ liệu, LƯU trong CSDL ở dạng đã mã hoá
⚠ Column Master Key (CMK) ⚠ mã hoá CEK, nằm NGOÀI CSDL
⚠ CMK ở đâu ⚠ Windows Certificate Store, Azure Key Vault, HSM
⚠ CSDL chỉ lưu ⚠ ĐƯỜNG DẪN tới CMK, không lưu chính nó
⚠ Hạn chế truy vấn của Always Encrypted Hạn chế
⚠ KHÔNG dùng LIKE
⚠ KHÔNG so sánh khoảng (>, <)
⚠ KHÔNG dùng hàm tính toán trên cột mã hoá
⚠ KHÔNG sắp xếp theo giá trị thật
⚠ Giải pháp mở rộng ⚠ Always Encrypted with secure enclaves — cho phép LIKE và so sánh khoảng

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Truy vấn hiện tại có dùng LIKE trên cột đó không | ⚠ sẽ hỏng | | CMK lưu ở đâu, ai truy cập được | | | Ứng dụng đã dùng driver hỗ trợ chưa | |

Và cái giá thật của Always Encrypted không nằm ở hiệu năng: nó nằm ở việc bạn mất gần hết khả năng truy vấn trên cột đó. Hãy chắc chắn rằng cột nhạy cảm đó chỉ cần đọc ra và hiển thị, chứ không phải để tìm kiếm hay lọc.

Câu 33 Implement a secure environment (15–20%)
If a database administrator wants to hide specific data in a column, ensuring unauthorized users see "XXXX" instead of the actual data, what feature should they use?
  1. A Data Compression
  2. B Transparent Data Encryption
  3. C Data Classification
  4. D Dynamic Data Masking
Xem giải thích

Đáp án

D — Dynamic Data Masking (DDM).

Vì sao đúng

⚠ DDM che GIÁ TRỊ ở tầng hiển thị, theo quyền của người truy vấn:

⚠ Cùng một câu SELECT
        ↓
⚠ Người có quyền UNMASK
   → ⚠ thấy 4111-1111-1111-1234
⚠ Người KHÔNG có quyền
   → ⚠ thấy XXXX-XXXX-XXXX-1234
        ↓
⚠ Dữ liệu THẬT vẫn nguyên trong CSDL
Kiểu mặt nạ Kết quả
⚠ Default ⚠ XXXX cho chuỗi, 0 cho số
⚠ Email ⚠ aXX@XXXX.com
⚠ Random ⚠ số ngẫu nhiên trong khoảng
⚠ Custom string ⚠ giữ N ký tự đầu và cuối
⚠ Đề nói "thấy XXXX" ⚠ chính là mặt nạ mặc định

Vì sao các phương án khác sai

  • B (TDE) — ⚠ mã hoá TỆP khi lưu: ⚠ người dùng hợp lệ vẫn thấy giá trị thật.

  • C (Data Classification) — ⚠ GẮN NHÃN mức nhạy cảm: ⚠ chỉ để biết và báo cáo, ⚠ không che gì.

  • A (Data Compression) — ⚠ nén dữ liệu để tiết kiệm chỗ, không liên quan bảo mật.

Ghi nhớ

⚠ Dynamic Data Masking — điều phải thuộc: | Đặc điểm | Nội dung | |---|---| | ⚠ Che ở tầng HIỂN THỊ | ⚠ dữ liệu thật không đổi | | ⚠ Quyền UNMASK | ⚠ ai có thì thấy giá trị thật | | ⚠ Thành viên db_owner luôn thấy thật | | | ⚠ Không cần sửa ứng dụng | | | ⚠ Cấu hình ở mức CỘT | |

Từ khoá nhận diện:

"thấy XXXX thay vì giá trị thật" → ⚠ Dynamic Data Masking "mã hoá file dữ liệu" → ⚠ TDE "chỉ thấy dòng của mình" → ⚠ Row-Level Security "gắn nhãn nhạy cảm" → ⚠ Data Classification

⚠ GIỚI HẠN QUAN TRỌNG của DDM Giới hạn
⚠ Người dùng có thể SUY RA giá trị ⚠ WHERE Luong > 50000 vẫn lọc được
⚠ Chỉ che kết quả hiển thị, KHÔNG chặn tính toán
⚠ SELECT ... INTO bảng mới có thể lộ dữ liệu ⚠ tuỳ phiên bản
⚠ Kết luận ⚠ DDM là lớp giảm lộ TÌNH CỜ, KHÔNG phải rào cản bảo mật
⚠ Cần bảo mật thật ⚠ quyền cấp cột, Always Encrypted, hoặc RLS
⚠ Kết hợp các lớp cho dữ liệu nhạy cảm Kết hợp
⚠ Classification để BIẾT cột nào nhạy cảm
⚠ DDM để giảm lộ tình cờ khi xem
⚠ Quyền cấp cột để chặn thật sự
⚠ Auditing để có bằng chứng ai đã đọc
⚠ Always Encrypted cho cột cực nhạy cảm
⚠ Ca dùng phù hợp của DDM Ca dùng
⚠ Nhân viên hỗ trợ chỉ cần 4 số cuối thẻ
⚠ Môi trường phát triển dùng bản sao dữ liệu thật
⚠ Giảm rủi ro khi ai đó vô tình chụp màn hình
⚠ KHÔNG dùng cho ⚠ chống lại người cố ý moi dữ liệu

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Ai đang có quyền UNMASK | | | Có ai là db_owner không cần thiết không | ⚠ họ thấy hết | | Cột nhạy cảm nhất có cần biện pháp mạnh hơn không | |

Và điều phải nói rõ mỗi khi giới thiệu Dynamic Data Masking: nó không phải một biện pháp bảo mật, mà là một lớp giảm rủi ro hiển thị. Ai kiên nhẫn viết vài câu truy vấn vẫn suy ra được giá trị bị che.

Câu 34 Chọn nhiều đáp án Monitor, configure, and optimize database resources (20–25%)
Which of the following tools can be used to monitor query performance in Azure SQL Database? (Choose two)
  1. A SQL Insights
  2. B Azure Logic Apps
  3. C Query Store
  4. D Azure Monitor
Xem giải thích

Đáp án

A và C — SQL Insights và Query Store.

Ghi nhớ về chất lượng câu hỏi

⚠ Azure Monitor (phương án D) cũng giám sát được, nhưng ở mức khác.

Công cụ Mức giám sát
⚠ Query Store ⚠ TRUY VẤN — lịch sử kế hoạch và số liệu
⚠ SQL Insights ⚠ WORKLOAD SQL — thu từ DMV, phân tích sâu
⚠ Azure Monitor ⚠ HẠ TẦNG — CPU, DTU, IO, kết nối

⚠ Đề hỏi "hiệu năng TRUY VẤN" → ⚠ hai công cụ đầu; ⚠ Azure Monitor thiên về chỉ số tài nguyên.

Vì sao đúng

⚠ Hai công cụ, hai góc nhìn bổ sung nhau:

⚠ Query Store
   ⚠ "truy vấn nào tốn nhất?"
   ⚠ "kế hoạch có đổi không?"
   ⚠ NẰM TRONG chính CSDL

⚠ SQL Insights
   ⚠ "workload tổng thể thế nào?"
   ⚠ "so sánh nhiều CSDL"
   ⚠ Thu vào Log Analytics

Vì sao các phương án khác sai

  • D (Azure Monitor) — ⚠ giám sát chỉ số hạ tầng: ⚠ cho biết CSDL có bị nghẽn tài nguyên không, ⚠ nhưng ⚠ không chỉ ra truy vấn nào gây ra.

  • B (Azure Logic Apps) — ⚠ nền tảng quy trình nghiệp vụ, ⚠ hoàn toàn không phải công cụ giám sát.

Ghi nhớ

⚠ Bốn tầng giám sát Azure SQL — bảng phải thuộc: | Tầng | Công cụ | Trả lời | |---|---|---| | ⚠ Tài nguyên | ⚠ Azure Monitor | ⚠ CPU/IO có đầy không | | ⚠ Workload | ⚠ SQL Insights | ⚠ tổng thể thế nào, chờ ở đâu | | ⚠ Truy vấn | ⚠ Query Store | ⚠ câu nào tốn, kế hoạch đổi ra sao | | ⚠ Sự kiện | ⚠ Extended Events | ⚠ bắt deadlock, lỗi cụ thể |

Từ khoá nhận diện:

"hiệu năng truy vấn" → ⚠ Query Store, SQL Insights "CPU, DTU, kết nối" → ⚠ Azure Monitor "deadlock, timeout" → ⚠ Extended Events "ai truy cập dữ liệu" → ⚠ Auditing

⚠ Query Store — bốn báo cáo hay dùng Báo cáo
⚠ Top Resource Consuming Queries ⚠ truy vấn tốn nhất
⚠ Regressed Queries ⚠ truy vấn CHẬM ĐI so với trước
⚠ Queries With High Variation ⚠ hiệu năng dao động mạnh
⚠ Tracked Queries ⚠ theo dõi một truy vấn cụ thể
⚠ Báo cáo quan trọng nhất ⚠ Regressed Queries — tìm nguyên nhân "tự nhiên chậm"
⚠ Quy trình chẩn đoán hoàn chỉnh Bước
⚠ 1. Azure Monitor: tài nguyên có đầy không
⚠ 2. Nếu đầy: SQL Insights xem chờ ở đâu
⚠ 3. Query Store: truy vấn nào gây ra
⚠ 4. Execution plan: bước nào trong truy vấn đó
⚠ 5. Sửa rồi ĐO LẠI bằng Query Store
⚠ Từ tổng quan tới chi tiết ⚠ đừng bắt đầu từ execution plan
⚠ Cấu hình Query Store Cấu hình
⚠ Azure SQL Database: bật MẶC ĐỊNH
⚠ SQL Server trên VM: phải BẬT thủ công
⚠ Đặt dung lượng tối đa và chế độ thu thập
⚠ Query Store đầy ⚠ chuyển sang chỉ đọc, ngừng thu — nhớ theo dõi

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Query Store có đang ở chế độ READ_WRITE không | ⚠ đầy thì tự chuyển READ_ONLY | | Báo cáo Regressed Queries có gì | | | Có cảnh báo trên chỉ số tài nguyên không | |

Và trạng thái âm thầm khiến Query Store ngừng có ích: nó bị đầy và tự chuyển sang chỉ đọc. Từ lúc đó nó không ghi thêm gì nữa, và không ai biết cho tới khi cần điều tra một sự cố mới.

Câu 35 Monitor, configure, and optimize database resources (20–25%)
Which feature allows you to identify expensive queries that have been executed recently?
  1. A Extended Events
  2. B Query Store
  3. C SQL Data Sync
Xem giải thích

Đáp án

B — Query Store.

Ghi nhớ về chất lượng câu hỏi

⚠ Câu này chỉ có BA phương án (A, B, C) thay vì bốn — ⚠ dấu hiệu đề bị cắt mất một dòng khi nhập.

⚠ Ngoài ra ⚠ cùng chủ đề với #17430 trong lô này (Query Store là công cụ giám sát hiệu năng truy vấn).

Vì sao đúng

⚠ Query Store lưu lịch sử và xếp hạng truy vấn theo tài nguyên tiêu thụ:

⚠ Mọi truy vấn thực thi
        ↓ ⚠ Query Store ghi lại
   ⚠ văn bản truy vấn
   ⚠ kế hoạch thực thi
   ⚠ thời gian, CPU, đọc đĩa, bộ nhớ
        ↓
⚠ Báo cáo "Top Resource Consuming Queries"
        ↓
⚠ Xếp hạng theo CPU, thời gian,
   số lần đọc, bộ nhớ

⚠ Đúng cụm từ trong đề: ⚠ "expensive queries executed RECENTLY" — ⚠ Query Store có dữ liệu lịch sử gần đây.

Vì sao các phương án khác sai

  • A (Extended Events) — ⚠ bắt được truy vấn tốn kém nhưng phải CẤU HÌNH TRƯỚC: ⚠ nếu chưa dựng session từ trước thì ⚠ không có dữ liệu về quá khứ; ⚠ Query Store thì luôn ghi sẵn.

  • C (SQL Data Sync) — ⚠ đồng bộ dữ liệu giữa các CSDL: ⚠ hoàn toàn không liên quan tới hiệu năng.

Ghi nhớ

⚠ Query Store so với Extended Events — bảng phải thuộc: | Tiêu chí | ⚠ Query Store | ⚠ Extended Events | |---|---|---| | ⚠ Cần cấu hình trước | ⚠ KHÔNG (đã bật sẵn) | ⚠ CÓ | | ⚠ Dữ liệu quá khứ | ⚠ CÓ sẵn | ⚠ chỉ từ lúc bật session | | ⚠ Phạm vi | ⚠ truy vấn và kế hoạch | ⚠ mọi loại sự kiện | | ⚠ Ca dùng | ⚠ điều tra hiệu năng thường ngày | ⚠ điều tra sự kiện cụ thể |

Từ khoá nhận diện:

"truy vấn tốn kém gần đây" → ⚠ Query Store "bắt deadlock, sự kiện cụ thể" → ⚠ Extended Events "trạng thái NGAY BÂY GIỜ" → ⚠ DMV "tại sao truy vấn này chậm" → ⚠ execution plan

⚠ Bốn chiều xếp hạng trong Query Store Chiều
⚠ Duration ⚠ thời gian chạy
⚠ CPU time ⚠ thời gian CPU thực dùng
⚠ Logical reads ⚠ số trang đọc — chỉ số I/O quan trọng nhất
⚠ Memory consumption
⚠ Mẹo ⚠ xếp theo TỔNG (không phải trung bình) để tìm truy vấn ảnh hưởng lớn nhất tới hệ thống
⚠ Truy vấn nhanh mà vẫn nguy hiểm Vì sao
⚠ Chạy 50 mili giây nhưng chạy 10.000 lần/phút
⚠ Tổng tài nguyên vượt xa một truy vấn chạy 5 giây
⚠ Bài học ⚠ luôn nhìn TỔNG chứ không chỉ nhìn truy vấn chậm nhất
⚠ Query Store lưu gì và bao lâu Lưu
⚠ STALE_QUERY_THRESHOLD_DAYS ⚠ giữ dữ liệu bao nhiêu ngày, mặc định 30
⚠ MAX_STORAGE_SIZE_MB ⚠ dung lượng tối đa
⚠ QUERY_CAPTURE_MODE ⚠ ALL, AUTO, NONE, CUSTOM
⚠ Chế độ AUTO ⚠ bỏ qua truy vấn không đáng kể — tiết kiệm chỗ

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Query Store giữ dữ liệu bao nhiêu ngày | | | Truy vấn tốn nhất theo TỔNG là câu nào | | | Có truy vấn nào chạy rất nhiều lần không | |

Và sai lầm phổ biến khi tìm nguyên nhân hệ thống chậm: chỉ nhìn truy vấn chạy lâu nhất. Thủ phạm thật thường là một câu truy vấn nhanh nhưng được gọi hàng vạn lần mỗi phút.

Câu 36 Chọn nhiều đáp án Monitor, configure, and optimize database resources (20–25%)
When analyzing an execution plan, what might indicate a potential performance bottleneck in a query? (Choose two)
  1. A Index Scans
  2. B Nested Loops
  3. C Seek Predicate
  4. D Hash Match
Xem giải thích

Đáp án

A và D — Index Scan và Hash Match.

Vì sao đúng

⚠ Hai phép toán này thường báo hiệu vấn đề: | Phép toán | Vì sao đáng nghi | |---|---| | ⚠ Index Scan | ⚠ QUÉT TOÀN BỘ index thay vì tìm trực tiếp — thường do thiếu index phù hợp hoặc điều kiện lọc không dùng được index | | ⚠ Hash Match | ⚠ JOIN hoặc tổng hợp bằng bảng băm trong BỘ NHỚ — tốn RAM, có thể TRÀN sang tempdb |

⚠ Index SEEK
   ⚠ đi thẳng tới dòng cần — TỐT

⚠ Index SCAN
   ⚠ đọc hết rồi lọc — ĐÁNG NGỜ

⚠ Hash Match
   ⚠ dựng bảng băm cho tập lớn
   ⚠ tràn tempdb thì rất chậm

Vì sao các phương án khác sai

  • C (Seek Predicate) — ⚠ là DẤU HIỆU TỐT: ⚠ nghĩa là điều kiện lọc dùng được index để tìm trực tiếp.

  • B (Nested Loops) — ⚠ KHÔNG xấu về bản chất: ⚠ rất hiệu quả với tập dữ liệu NHỎ; ⚠ chỉ thành vấn đề khi số dòng lớn — ⚠ nhưng đề chọn hai phương án rõ ràng hơn.

Ghi nhớ

⚠ Phép toán trong execution plan — bảng phải thuộc: | Phép toán | Đánh giá | |---|---| | ⚠ Index Seek | ⚠ TỐT — tìm trực tiếp | | ⚠ Index Scan / Table Scan | ⚠ đáng ngờ — quét toàn bộ | | ⚠ Key Lookup | ⚠ đáng ngờ — index thiếu cột, cân nhắc INCLUDE | | ⚠ Nested Loops | ⚠ tốt cho tập nhỏ | | ⚠ Merge Join | ⚠ hiệu quả khi cả hai bên đã sắp xếp | | ⚠ Hash Match | ⚠ cho tập lớn, tốn bộ nhớ | | ⚠ Sort | ⚠ tốn kém — cân nhắc index theo thứ tự đó |

Từ khoá nhận diện:

"quét toàn bộ" → ⚠ thiếu index, hoặc điều kiện không dùng được index "key lookup nhiều" → ⚠ thêm cột vào INCLUDE của index "spill to tempdb" → ⚠ ước tính số dòng sai, hoặc thiếu bộ nhớ "warning ép kiểu ngầm" → ⚠ index bị vô hiệu

⚠ Ba kiểu JOIN vật lý Kiểu
⚠ Nested Loops ⚠ một bên nhỏ, bên kia có index — nhanh
⚠ Merge Join ⚠ hai bên đã sắp xếp theo khoá join
⚠ Hash Match ⚠ hai bên lớn, không sắp xếp — cần bộ nhớ
⚠ Bộ tối ưu tự chọn ⚠ dựa trên ƯỚC TÍNH số dòng
⚠ Chọn sai kiểu ⚠ gần như luôn do ước tính số dòng sai — thống kê cũ
⚠ Khi nào Index Scan KHÔNG phải vấn đề Khi nào
⚠ Truy vấn thật sự cần đọc phần lớn bảng ⚠ báo cáo tổng hợp
⚠ Bảng rất nhỏ ⚠ quét còn nhanh hơn seek
⚠ Vì vậy ⚠ đừng thấy scan là vội thêm index
⚠ Hỏi trước ⚠ truy vấn này CẦN bao nhiêu phần trăm số dòng
⚠ Hash Match spill — dấu hiệu và cách chữa Cách
⚠ Cảnh báo tam giác vàng trong execution plan
⚠ Nguyên nhân: ước tính số dòng thấp hơn thực tế nhiều
⚠ Chữa: cập nhật thống kê
⚠ Chữa: viết lại truy vấn để lọc sớm hơn
⚠ Chữa: thêm index để đổi sang kiểu join khác

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Số dòng ước tính có gần thực tế không | ⚠ gốc của phần lớn vấn đề | | Có cảnh báo spill hay ép kiểu ngầm không | | | Truy vấn có thật sự cần đọc nhiều dòng vậy không | |

Và nguyên nhân gốc đứng sau phần lớn các phép toán tốn kém trong execution plan: bộ tối ưu ước tính sai số dòng. Sửa thống kê thường hiệu quả hơn nhiều so với việc cố ép một kế hoạch cụ thể.

Câu 37 Monitor, configure, and optimize database resources (20–25%)
What is a common use for Dynamic Management Views (DMVs) in Azure SQL Database?
  1. A Encrypting data
  2. B Identifying performance issues
  3. C Setting up geo-replication
  4. D Configuring data masking
Xem giải thích

Đáp án

B — Phát hiện vấn đề hiệu năng.

Vì sao đúng

⚠ DMV (Dynamic Management View) là cửa sổ nhìn vào trạng thái nội bộ của SQL Server: | Nhóm DMV | Cho biết | |---|---| | ⚠ sys.dm_exec_* | ⚠ truy vấn đang chạy, thống kê thực thi | | ⚠ sys.dm_os_* | ⚠ chờ đợi, bộ nhớ, luồng của hệ điều hành | | ⚠ sys.dm_db_* | ⚠ index, phân mảnh, thống kê CSDL | | ⚠ sys.dm_tran_* | ⚠ giao dịch, khoá | | ⚠ sys.dm_io_* | ⚠ thống kê vào ra đĩa |

⚠ DMV = ⚠ ảnh chụp trạng thái HIỆN TẠI
        ↓
⚠ "Truy vấn nào đang chạy?"
⚠ "Đang chờ cái gì?"
⚠ "Index nào thiếu?"
⚠ "Index nào không ai dùng?"

Vì sao các phương án khác sai

  • A (mã hoá dữ liệu) — ⚠ là việc của TDE và Always Encrypted: ⚠ DMV chỉ ĐỌC, không thay đổi gì.

  • C (thiết lập geo-replication) — ⚠ cấu hình qua Portal, CLI hoặc T-SQL: ⚠ DMV chỉ quan sát.

  • D (cấu hình data masking) — ⚠ dùng lệnh ALTER TABLE ... ADD MASKED WITH.

Ghi nhớ

⚠ DMV quan trọng nhất phải thuộc: | DMV | Cho biết | |---|---| | ⚠ sys.dm_exec_requests | ⚠ truy vấn đang chạy NGAY BÂY GIỜ | | ⚠ sys.dm_exec_query_stats | ⚠ thống kê tích luỹ theo truy vấn | | ⚠ sys.dm_os_wait_stats | ⚠ hệ thống chờ ở đâu — QUAN TRỌNG NHẤT | | ⚠ sys.dm_db_missing_index_details | ⚠ index đang thiếu | | ⚠ sys.dm_db_index_usage_stats | ⚠ index nào không ai dùng | | ⚠ sys.dm_tran_locks | ⚠ khoá đang giữ | | ⚠ sys.dm_db_resource_stats | ⚠ tài nguyên Azure SQL 14 ngày gần đây |

Từ khoá nhận diện:

"trạng thái hiện tại của hệ thống" → ⚠ DMV "lịch sử truy vấn" → ⚠ Query Store "bắt sự kiện cụ thể" → ⚠ Extended Events "chỉ số hạ tầng theo thời gian" → ⚠ Azure Monitor

⚠ Lưu ý về DMV Lưu ý
⚠ Phần lớn RESET khi SQL Server khởi động lại ⚠ hoặc khi CSDL failover
⚠ Với Azure SQL Database, một số DMV mức server không có
⚠ Cần quyền VIEW DATABASE STATE hoặc VIEW SERVER STATE
⚠ Vì hay bị reset ⚠ nên lưu ảnh chụp định kỳ nếu cần so sánh theo thời gian
⚠ Wait statistics — cách đọc Loại chờ
⚠ PAGEIOLATCH_* ⚠ chờ đọc đĩa — thiếu RAM hoặc đĩa chậm
⚠ LCK_M_* ⚠ chờ khoá — tranh chấp giao dịch
⚠ CXPACKET / CXCONSUMER ⚠ song song hoá — xem lại MAXDOP
⚠ RESOURCE_SEMAPHORE ⚠ chờ cấp bộ nhớ cho truy vấn
⚠ WRITELOG ⚠ chờ ghi log — đĩa log chậm
⚠ SOS_SCHEDULER_YIELD ⚠ áp lực CPU
⚠ Bỏ qua ⚠ các loại chờ "vô hại" như SLEEP_*, BROKER_*
⚠ Vì sao wait stats là điểm khởi đầu tốt nhất Lý do
⚠ Nó nói CHÍNH XÁC hệ thống đang bị nghẽn ở đâu
⚠ Không phải đoán từ CPU hay bộ nhớ
⚠ Dẫn thẳng tới nhóm nguyên nhân
⚠ Quy trình ⚠ wait stats → tìm truy vấn liên quan → execution plan

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Loại chờ đợi hàng đầu là gì | | | Có index nào chưa bao giờ được dùng không | ⚠ làm chậm việc ghi vô ích | | DMV có bị reset gần đây không | ⚠ số liệu ngắn thì chưa đại diện |

Và câu truy vấn đáng chạy đầu tiên khi một cơ sở dữ liệu chạy chậm: sys.dm_os_wait_stats xếp theo thời gian chờ. Loại chờ đứng đầu bảng thường thu hẹp phạm vi điều tra từ hàng chục khả năng xuống còn hai ba.

Câu 38 Monitor, configure, and optimize database resources (20–25%)
To optimize resource consumption for different types of workloads in Azure SQL Database, what should you configure?
  1. A SQL Insights
  2. B Resource Governor
  3. C SQL Server Agent
  4. D Dynamic Data Masking
  5. E

    Service Tier and Performance Level

Xem giải thích

Đáp án

E — Service Tier và Performance Level

Vì sao đúng

Trong Azure SQL Database, tài nguyên được cấp phát thông qua service tier (General Purpose, Business Critical, Hyperscale) và performance level (số DTU hoặc số vCore). Đây chính là nút điều chỉnh để mỗi loại khối lượng công việc nhận đúng mức tính toán, bộ nhớ và thông lượng vào ra mà nó cần — và cũng là nơi quyết định chi phí.

Vì sao các phương án khác sai

  • B. Resource Governor — tính năng của SQL Server tại chỗ dùng để chia tài nguyên giữa các nhóm khối lượng công việc; không có trong Azure SQL Database. Đây là bẫy chính của câu.
  • A. SQL Insights — công cụ giám sát, cho biết tình hình chứ không cấp phát tài nguyên.
  • C. SQL Server Agent — bộ lập lịch công việc, và cũng không có trong Azure SQL Database.
  • D. Dynamic Data Masking — tính năng bảo mật che dữ liệu, không liên quan tới tài nguyên.
Câu 39 Chọn nhiều đáp án Configure and manage automation of tasks (15–20%)
Which tools can be used to automate deployment in Azure? (Choose two)
  1. A Azure CLI
  2. B Azure Logic Apps
  3. C ARM templates
  4. D SQL Server Management Studio (SSMS)
Xem giải thích

Đáp án

A và C — Azure CLI và ARM template.

Ghi nhớ về chất lượng câu hỏi

⚠ Câu này và #17406 trong cùng lô có KHOÁ KHÁC NHAU cho câu hỏi gần giống nhau.

Câu Phương án đưa ra Khoá
⚠ #17406 ⚠ CLI, Logic Apps, PowerShell, SSMS ⚠ CLI + PowerShell
⚠ #17435 (câu này) ⚠ CLI, Logic Apps, ARM, SSMS ⚠ CLI + ARM
⚠ Không mâu thuẫn ⚠ bộ phương án KHÁC nhau; PowerShell không có ở câu này, ARM không có ở câu kia

⚠ Bài học: ⚠ với câu "chọn tất cả", ⚠ đọc kỹ danh sách phương án — ⚠ đáp án đúng phụ thuộc vào những gì được đưa ra.

⚠ Ba công cụ CLI, PowerShell, ARM đều tự động hoá triển khai được.

Vì sao đúng

Công cụ Cách hoạt động
⚠ Azure CLI ⚠ mệnh lệnh — chạy lệnh tạo tài nguyên, nhúng vào script và CI/CD
⚠ ARM template ⚠ khai báo — mô tả trạng thái, triển khai một lần

⚠ Cả hai đều lưu được trong Git và chạy được trong pipeline.

Vì sao các phương án khác sai

  • B (Azure Logic Apps) — ⚠ nền tảng QUY TRÌNH nghiệp vụ: ⚠ nối các dịch vụ, xử lý sự kiện; ⚠ không phải công cụ triển khai hạ tầng.

  • D (SQL Server Management Studio) — ⚠ công cụ quản trị CSDL bằng giao diện: ⚠ không triển khai tài nguyên Azure.

Ghi nhớ

⚠ Ba công cụ triển khai — khi nào dùng cái nào: | Công cụ | Dùng khi | |---|---| | ⚠ ARM template / Bicep | ⚠ định nghĩa hạ tầng, triển khai lặp lại nhiều môi trường | | ⚠ Azure CLI | ⚠ script hoá thao tác, nhúng vào bash và CI/CD | | ⚠ Azure PowerShell | ⚠ như CLI, hợp môi trường Windows và xử lý đối tượng | | ⚠ Thực tế | ⚠ thường KẾT HỢP: pipeline dùng CLI để gọi lệnh triển khai template |

Từ khoá nhận diện:

"tự động hoá triển khai" (chọn nhiều) → ⚠ đọc kỹ danh sách phương án "cách CHÍNH để định nghĩa hạ tầng" → ⚠ ARM / Bicep "quy trình nghiệp vụ" → ⚠ Logic Apps "quản trị CSDL" → ⚠ SSMS

⚠ Mẹo làm câu "chọn tất cả" Mẹo
⚠ Xét TỪNG phương án độc lập: đúng hay sai
⚠ Đừng so sánh các phương án với nhau
⚠ Đáp án phụ thuộc vào danh sách được đưa ra
⚠ Với câu "best answer" ⚠ thì mới so sánh và chọn cái phù hợp NHẤT
⚠ Hai kiểu câu ⚠ cần hai cách tư duy khác nhau
⚠ Pipeline triển khai điển hình Pipeline
⚠ Mã hạ tầng (Bicep/ARM) trong Git
⚠ Pull request → chạy what-if để rà soát
⚠ Merge → pipeline chạy az deployment group create
⚠ Dev → Test → Prod dùng CÙNG template, khác file tham số
⚠ Xác thực bằng service principal hoặc OIDC
⚠ Vì sao đừng triển khai bằng tay trên Portal Lý do
⚠ Không lặp lại được
⚠ Không có lịch sử thay đổi
⚠ Không ai rà soát trước
⚠ Ba môi trường sẽ khác nhau dần
⚠ Portal hợp để ⚠ khám phá và xem, không phải để tạo tài nguyên sản xuất

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Tài nguyên sản xuất có được định nghĩa bằng mã không | | | Dev, test, prod có dùng chung template không | | | Pipeline có chạy what-if trước khi triển khai không | |

Và mẹo hữu ích cho mọi câu hỏi "chọn tất cả các đáp án đúng": xét từng phương án một cách độc lập. Câu hỏi này và #17406 chứng minh vì sao — cùng một chủ đề, khác danh sách phương án, và vì thế khác đáp án.

Câu 40 Configure and manage automation of tasks (15–20%)
You are configuring SQL Server Agent jobs. Which of the following can be set up to notify you when a job fails?
  1. A Azure Monitor Alerts
  2. B SQL Server Profiler
  3. C Job Alerts
  4. D Resource Governor
Xem giải thích

Đáp án

C — Job Alerts.

Ghi nhớ về chất lượng câu hỏi

⚠ Câu này GẦN TRÙNG với #17405 trong cùng lô.

Câu Bối cảnh
⚠ #17405 ⚠ job hỏng NGẮT QUÃNG, cần báo ngay
⚠ #17436 (câu này) ⚠ cấu hình job, cái gì báo khi hỏng
⚠ Cùng khoá ⚠ Job alert

Vì sao đúng

⚠ Cơ chế thông báo tích hợp của SQL Server Agent:

⚠ Job thất bại
        ↓
⚠ Job notification / alert kích hoạt
        ↓
⚠ Database Mail gửi tới OPERATOR
        ↓
⚠ Người trực nhận được

⚠ Ba thứ phải cấu hình đủ: ⚠ Database Mail, ⚠ Operator, ⚠ Notification trên job.

Vì sao các phương án khác sai

  • A (Azure Monitor Alerts) — ⚠ giám sát tài nguyên AZURE: ⚠ theo dõi được VM và CSDL, ⚠ nhưng ⚠ không biết trạng thái job của SQL Server Agent trừ khi đẩy log ra ngoài.

  • B (SQL Server Profiler) — ⚠ công cụ theo dõi sự kiện ĐÃ KHAI TỬ: ⚠ không phải cơ chế cảnh báo.

  • D (Resource Governor) — ⚠ GIỚI HẠN tài nguyên theo nhóm workload: ⚠ hoàn toàn khác.

Ghi nhớ

⚠ Cảnh báo theo tầng — bảng phải thuộc: | Tầng | Công cụ | |---|---| | ⚠ Job trong SQL Server Agent | ⚠ Job alert + Operator + Database Mail | | ⚠ Sự kiện SQL Server (mã lỗi) | ⚠ SQL Agent alert | | ⚠ Tài nguyên Azure (CPU, lưu trữ) | ⚠ Azure Monitor alert | | ⚠ Quy trình Logic Apps | ⚠ Azure Monitor alert | | ⚠ Bảo mật | ⚠ Microsoft Defender for SQL |

Từ khoá nhận diện:

"job SQL Agent hỏng" → ⚠ job alert "CPU vượt ngưỡng" → ⚠ Azure Monitor alert "đăng nhập bất thường" → ⚠ Defender for SQL "Azure SQL Database" → ⚠ không có SQL Agent — dùng Elastic Jobs + Monitor

⚠ Thiết kế cảnh báo tốt Nguyên tắc
⚠ Cảnh báo phải HÀNH ĐỘNG ĐƯỢC ⚠ nếu không làm gì thì đừng cảnh báo
⚠ Gửi tới NHÓM, không gửi cá nhân ⚠ người nghỉ việc là mất
⚠ Có mức độ ưu tiên ⚠ không phải cái gì cũng khẩn cấp
⚠ Định kỳ rà soát cảnh báo bị bỏ qua ⚠ dấu hiệu nhiễu
⚠ Quá nhiều cảnh báo ⚠ tương đương không có cảnh báo nào
⚠ Ba lỗi cấu hình khiến cảnh báo im lặng Lỗi
⚠ Database Mail chưa cấu hình hoặc profile sai
⚠ SQL Server Agent chưa bật Mail Profile ⚠ phải bật riêng trong thuộc tính Agent
⚠ Job chưa gán notification
⚠ Kiểm chứng ⚠ cố tình cho một job hỏng để thử
⚠ Với môi trường Azure hiện đại Cách
⚠ Đẩy log SQL Agent vào Log Analytics
⚠ Đặt Azure Monitor alert trên truy vấn KQL
⚠ Gửi tới action group: email, Teams, PagerDuty
⚠ Ưu điểm ⚠ gom mọi cảnh báo về một nơi

Ba việc kiểm chứng: | Việc | Cách | |---|---| | Đã thử cho job hỏng để kiểm chứng chưa | ⚠ cách duy nhất chắc chắn | | Operator có phải nhóm không | | | Mail profile của SQL Agent đã bật chưa | |

Và cách duy nhất để biết một hệ thống cảnh báo có hoạt động: cố tình gây ra sự cố và xem có ai nhận được không. Cấu hình đúng trên màn hình không đảm bảo email thật sự tới nơi.