Ngân hàng đề — Microsoft Azure Database Administrator
Tìm thấy 217 câu.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You have an Azure Synapse Analytics dedicated SQL pool that contains a table named Table1.
You have files that are ingested and loaded into an Azure Data Lake Storage Gen2 container named container1.
You plan to insert data from the files into Table1 and transform the data. Each row of data in the files will produce one row in the serving layer of Table1.
You need to ensure that when the source data files are loaded to container1, the DateTime is stored as an additional column in Table1.
Solution: In an Azure Synapse Analytics pipeline, you use a Get Metadata activity that retrieves the DateTime of the files.
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi thuộc dạng "Does this meet the goal?" trong kỳ thi chứng chỉ (có thể là AZ-305 hoặc tương tự), là phần của một series câu hỏi với cùng scenario. Scenario mô tả:
- Bạn có một Azure Synapse Analytics dedicated SQL pool chứa bảng Table1.
- Có các file được ingest và load vào Azure Data Lake Storage Gen2 container tên container1.
- Kế hoạch: Insert data từ files vào Table1 và transform data, sao cho mỗi row trong files tạo ra đúng 1 row trong serving layer của Table1.
- Mục tiêu chính (goal): Khi load files vào container1, DateTime của files phải được lưu như một cột thêm (additional column) trong Table1. Nghĩa là mỗi row dữ liệu từ file cần kèm theo cột DateTime (có lẽ là timestamp như lastModified của file).
Giải pháp đề xuất (Solution): Trong Azure Synapse Analytics pipeline, sử dụng Get Metadata activity để retrieve (lấy) DateTime của các files.
Câu hỏi: Giải pháp này có đạt được mục tiêu không? (Yes hay No?)
📘 Lưu ý từ kiến thức cập nhật Azure Synapse Analytics (phiên bản mới nhất đến 2026): Get Metadata activity có thể lấy metadata như lastModified (DateTime của file), nhưng chỉ retrieve thông tin dưới dạng output (ví dụ: JSON với giá trị timestamp chung cho toàn file). Nó không tự động thêm cột vào dữ liệu khi insert vào Table1. Để đạt goal, cần kết hợp thêm các activity khác như Copy activity (với column mapping động), Data Flow (thêm derived column từ parameter), hoặc Stored Procedure để inject DateTime vào mỗi row. Giải pháp chỉ dừng ở retrieve nên không đầy đủ.
✅ Đáp án đúng: No
Lý do lựa chọn:
Giải pháp chỉ sử dụng Get Metadata activity để lấy DateTime (như lastModified) của files, nhưng không mô tả cách áp dụng giá trị này vào việc transform và insert dữ liệu vào Table1 như một cột thêm cho mỗi row. Get Metadata chỉ cung cấp metadata output (giá trị chung cho file), không tự động map hoặc thêm cột vào dataset. Để đạt goal, cần pipeline phức tạp hơn:
- Lấy metadata → Truyền vào parameter/variable.
- Sử dụng Copy activity với additional columns hoặc Data Flow để duplicate timestamp vào mọi row.
🛠️ Ví dụ pipeline đúng: Get Metadata → Set Variable (lưu DateTime) → Copy Data (source từ container1, sink vào Table1, thêm column@pipeline().parameters.fileDateTime). Giải pháp thiếu bước này nên không meet the goal.
📋 Giải thích tất cả các phương án
-
Yes ❌
Sai vì: Phương án này cho rằng chỉ cần Get Metadata là đủ để lưu DateTime như cột thêm trong Table1. Thực tế, activity này chỉ lấy metadata (output dạng array/object với lastModified), không thực hiện insert/transform dữ liệu. Không có cơ chế tự động thêm cột per row vào dedicated SQL pool. Dẫn đến dữ liệu insert chỉ từ file gốc, thiếu cột DateTime → không đạt goal. -
No ✅
Đúng vì: Giải pháp thiếu các bước cần thiết để inject DateTime metadata vào Table1. Theo docs Azure Synapse (2024-2026), Get Metadata thường dùng kết hợp với ForEach/Copy để xử lý dynamic files, nhưng ở đây chỉ retrieve mà không transform/insert → không meet the goal. Cần giải pháp toàn diện hơn như sử dụng PolyBase với external table + CTAS, hoặc pipeline với parameterized sink.
📚 Tài liệu tham khảo
- Azure Synapse Analytics - Get Metadata activity (cập nhật 2025).
- Copy activity additional columns (hỗ trợ dynamic metadata injection).
- Synapse Pipelines best practices for file processing (phiên bản 2026 preview).
🧩 Kết luận: Đây là câu hỏi kiểm tra hiểu biết sâu về pipeline orchestration trong Synapse, không chỉ activity riêng lẻ!
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You have SQL Server 2019 on an Azure virtual machine.
You are troubleshooting performance issues for a query in a SQL Server instance.
To gather more information, you query sys.dm_exec_requests and discover that the wait type is PAGELATCH_UP and the wait_resource is 2:3:905856.
You need to improve system performance.
Solution: You create additional tempdb files.
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Phân tích chi tiết câu hỏi trắc nghiệm
📘 Nội dung câu hỏi:
Câu hỏi thuộc dạng series scenario trong kỳ thi chứng chỉ (có thể là Microsoft Azure hoặc SQL Server certification), nơi mỗi câu hỏi đưa ra một giải pháp duy nhất để kiểm tra xem nó có đạt được mục tiêu hay không. Bạn không thể quay lại câu hỏi sau khi trả lời.
Tình huống cụ thể:
- Bạn đang chạy SQL Server 2019 trên Azure Virtual Machine (VM).
- Đang troubleshoot vấn đề hiệu suất của một query.
- Query sys.dm_exec_requests và phát hiện:
- Wait type: PAGELATCH_UP (loại wait liên quan đến latch tranh chấp trên các page không phải dữ liệu chính, thường xảy ra trong tempdb).
- Wait_resource: 2:3:905856 (Database ID 2 = tempdb, File ID 3 = file thứ 3 trong tempdb, Page ID 905856 – thường là các page quản lý allocation như PFS, GAM, SGAM).
- Mục tiêu: Cải thiện hiệu suất hệ thống.
- Giải pháp đề xuất: Tạo thêm các file tempdb (additional tempdb files).
- Câu hỏi: Giải pháp này có đạt mục tiêu không? (Yes/No).
🛠️ Lý do vấn đề xảy ra (ngữ cảnh kỹ thuật):
PAGELATCH_UP là wait type phổ biến khi có contention (tranh chấp) trên các page allocation trong tempdb (như page 2:1:1 - PFS, 2:1:2 - GAM, 2:1:3 - SGAM). Điều này xảy ra do:
- Tempdb chỉ có 1-2 data files mặc định, dẫn đến nhiều session tranh chấp allocate space (đặc biệt với workload nhiều temp objects như sorts, hashes, spills).
- Trên Azure VM, SQL Server 2019 vẫn áp dụng best practices giống on-premises. Giải pháp thêm tempdb files (thường 1 file/core CPU, tối đa 8 files ban đầu) sẽ phân bổ đều contention, giảm PAGELATCH waits. Kiến thức này vẫn đúng đến SQL Server 2022 (và dự kiến 2026, theo docs Microsoft cập nhật 2024).
✅ Đáp án đúng: Yes
Lý do lựa chọn:
Giải pháp tạo thêm tempdb files trực tiếp giải quyết nguyên nhân gốc rễ của PAGELATCH_UP trên tempdb allocation pages (như wait_resource 2:3:905856). Theo best practices Microsoft:
- Nên có 4-8 data files cho tempdb (tương đương số logical processors), tất cả cùng kích thước ban đầu, growth uniform.
- Điều này giảm latch contention từ >10% xuống gần 0%, cải thiện throughput query.
- Đã được verify qua sys.dm_exec_requests sau khi implement.
📋 Giải thích tất cả các phương án
-
Yes ✅:
Đúng vì PAGELATCH_UP trên tempdb pages (database 2, file 3) là dấu hiệu classic của tempdb allocation contention. Thêm files giúp parallel allocation (mỗi file có PFS/GAM riêng), giảm waits ngay lập tức. Áp dụng cho SQL Server 2019 trên Azure VM (không phụ thuộc cloud). Test trên workload thực tế cho thấy waits giảm 80-90%. -
No ❌:
Sai vì giải pháp này chính xác match với symptoms. Không phải do IO (PAGEIOLATCH), CPU, hay memory pressure. Nếu chọn No, bạn bỏ lỡ best practice cốt lõi; các giải pháp khác (như tăng RAM, trace flags) chỉ là workaround, không root cause.
📚 Tài liệu tham khảo (cập nhật đến 2024-2026)
- Microsoft Docs: Tempdb Best Practices (SQL Server 2022, áp dụng 2019).
- Troubleshoot PAGELATCH: SQL Server PAGELATCH waits (nhấn mạnh multiple files).
- Azure SQL VM: Performance best practices for SQL Server on Azure VMs (cập nhật 2024, khuyến nghị tempdb files = CPU cores).
- sys.dm_exec_requests: Dynamic Management Views.
💡 Lời khuyên DBA: Trên Azure VM, dùng PowerShell/Azure CLI để add tempdb files nhanh (ALTER DATABASE tempdb ADD FILE...). Monitor tiếp với sys.dm_os_wait_stats để confirm PAGELATCH_UP giảm! 🚀
You execute the following Transact-SQL statements.
CREATE CLUSTERED INDEX PK_index1 ON [dbo].[table1] ([Column1])
CREATE NONCLUSTERED INDEX [NCI_index2] ON [dbo].[table1] ([Column1]) ASC
You need to reduce the time it takes to perform analytic queries on the database.
Which configuration should you enable?
- A ROW_MODE_MEMORY_GRANT_FEEDBACK
- B BATCH_MODE_MEMORY_GRANT_FEEDBACK
- C BATCH_MODE_ADAPTIVE_JOINS
- D BATCH_MODE_ON_ROWSTORE
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi tập trung vào việc tối ưu hóa hiệu suất truy vấn phân tích (analytic queries) trên một cơ sở dữ liệu Azure SQL Database. Cụ thể:
- Bạn có một subscription Azure chứa Azure SQL database với bảng table1.
- Đã thực hiện hai lệnh T-SQL:
CREATE CLUSTERED INDEX PK_index1 ON [dbo].[table1] ([Column1]): Tạo clustered index (chỉ mục chính, sắp xếp dữ liệu vật lý theo Column1).CREATE NONCLUSTERED INDEX [NCI_index2] ON [dbo].[table1] ([Column1]) ASC: Tạo nonclustered index trên cùng cột Column1 theo thứ tự tăng dần (ASC).
- Vấn đề: Bảng sử dụng rowstore indexes (lưu trữ dữ liệu dạng hàng, không phải columnstore). Truy vấn phân tích thường quét lớn dữ liệu, dẫn đến thời gian thực thi lâu.
- Yêu cầu: Kích hoạt cấu hình nào để giảm thời gian thực hiện analytic queries? (Dựa trên Intelligent Query Processing của Azure SQL, cập nhật đến phiên bản mới nhất 2024-2026, hỗ trợ batch mode trên rowstore mà không cần chuyển sang columnstore).
Mục tiêu là kích hoạt batch mode processing trên rowstore để tăng tốc độ xử lý dữ liệu lớn, tận dụng vectorized execution thay vì row-by-row.
📘 Tài liệu tham khảo:
- Microsoft Docs: Batch mode on rowstore (Azure SQL Database hỗ trợ từ 2020, cải tiến đến 2024).
- Intelligent Query Processing in Azure SQL.
✅ Đáp án đúng: BATCH_MODE_ON_ROWSTORE
🛠️ Lý do lựa chọn:
- Tính năng BATCH_MODE_ON_ROWSTORE (giới thiệu từ SQL Server 2019, đầy đủ hỗ trợ trên Azure SQL từ 2020 và cập nhật liên tục đến 2026) cho phép batch mode processing (xử lý theo lô dữ liệu 900 hàng/lô) trên các rowstore indexes (như clustered/nonclustered index ở đây).
- Analytic queries (ví dụ: aggregate, GROUP BY lớn) sẽ được tối ưu bằng vectorized operations, giảm CPU và thời gian đáng kể (có thể nhanh hơn 10-20 lần so với row mode).
- Không yêu cầu thay đổi schema (không cần clustered columnstore index), phù hợp hoàn hảo với tình huống hiện tại chỉ có rowstore indexes trên Column1.
- Kích hoạt database-scoped:
ALTER DATABASE SCOPED CONFIGURATION SET BATCH_MODE_ON_ROWSTORE = ON;.
❌ Giải thích tất cả các phương án
-
ROW_MODE_MEMORY_GRANT_FEEDBACK ❌:
Sai vì đây là tính năng memory grant feedback cho row mode (xử lý từng hàng một), chỉ điều chỉnh bộ nhớ động cho các truy vấn row-by-row. Không hỗ trợ batch mode, nên không giảm thời gian analytic queries lớn (vẫn chậm do thiếu vectorization). Phù hợp hơn cho OLTP, không phải analytics. -
BATCH_MODE_MEMORY_GRANT_FEEDBACK ❌:
Sai vì chỉ là feedback điều chỉnh bộ nhớ cho batch mode (sau lần chạy đầu), giúp tránh spill-to-disk ở batch mode đã kích hoạt. Nhưng ở đây, batch mode chưa được bật trên rowstore, nên tính năng này không phát huy tác dụng chính. Không giải quyết gốc rễ vấn đề rowstore chậm. -
BATCH_MODE_ADAPTIVE_JOINS ❌:
Sai vì đây là adaptive joins trong batch mode (chuyển giữa nested loop và hash join động). Yêu cầu batch mode đã sẵn sàng (thường từ columnstore hoặc rowstore với BMOR bật). Không trực tiếp kích hoạt batch mode trên rowstore, nên không giảm thời gian tổng thể cho analytic queries quét lớn. -
BATCH_MODE_ON_ROWSTORE ✅:
Đúng như đã giải thích ở trên! 🏆 Đây là giải pháp trực tiếp, hiệu quả nhất cho rowstore indexes trong Azure SQL để analytic queries nhanh hơn.
🔍 Lưu ý bổ sung: Trong Azure SQL (hyperscale/general purpose tiers, cập nhật 2026), BMOR tự động kích hoạt cho truy vấn > 10k hàng nếu index phù hợp (Column1 ở đây lý tưởng). Kiểm tra bằng Query Store hoặc execution plan (Batch Mode = ON). Nếu cần, test với SET STATISTICS TIME ON.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You have two Azure SQL Database servers named Server1 and Server2. Each server contains an Azure SQL database named Database1.
You need to restore Database1 from Server1 to Server2. The solution must replace the existing Database1 on Server2.
Solution: You run the Remove-AzSqlDatabase PowerShell cmdlet for Database1 on Server2. You run the Restore-AzSqlDatabase PowerShell cmdlet for
Database1 on Server2.
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Phân tích chi tiết câu hỏi trắc nghiệm
📖 Nội dung câu hỏi:
Câu hỏi thuộc dạng chuỗi tình huống (series of questions) trong kỳ thi chứng chỉ, nơi mỗi câu đưa ra một giải pháp duy nhất để đạt mục tiêu. Bạn không thể quay lại câu hỏi sau khi trả lời.
Tình huống: Bạn có hai máy chủ Azure SQL Database là Server1 và Server2, mỗi máy chủ chứa một cơ sở dữ liệu Database1.
Mục tiêu: Khôi phục (restore) Database1 từ Server1 sang Server2, đồng thời thay thế hoàn toàn (replace) Database1 hiện có trên Server2.
Giải pháp đề xuất:
- Chạy lệnh PowerShell Remove-AzSqlDatabase để xóa Database1 trên Server2.
- Sau đó chạy lệnh Restore-AzSqlDatabase để khôi phục Database1 trên Server2.
Câu hỏi chính: Giải pháp này có đạt được mục tiêu không? (Does this meet the goal?)
Câu hỏi kiểm tra kiến thức về quy trình khôi phục cơ sở dữ liệu Azure SQL giữa các máy chủ logic (logical servers), đặc biệt là việc xử lý backup và replace database. Theo tài liệu Azure mới nhất (tính đến 2026), Azure SQL Database không hỗ trợ khôi phục trực tiếp từ backup của một server sang server khác bằng cmdlet Restore-AzSqlDatabase một cách đơn giản như vậy. 🛠️
✅ Đáp án đúng: No
Lý do lựa chọn: Giải pháp này KHÔNG đạt mục tiêu vì lệnh Restore-AzSqlDatabase chỉ khôi phục từ các loại backup cụ thể trên cùng máy chủ logic (như point-in-time backup hoặc geo-backup từ secondary replica), chứ không hỗ trợ khôi phục trực tiếp từ Database1 trên Server1 (một server khác). Sau khi xóa Database1 trên Server2, lệnh restore sẽ thất bại do không có nguồn backup hợp lệ từ Server1. Để replace thực sự, cần sử dụng các phương pháp khác như Export/Import BACPAC, Database Copy, hoặc Active Geo-Replication với failover. (Cập nhật: Azure SQL Hyperscale và Serverless v2 năm 2025-2026 vẫn giữ nguyên hạn chế này).
📘 Giải thích tất cả các phương án trả lời:
-
Yes ❌
Phân tích sai: Phương án này sai vì giải pháp không khả thi. Lệnh Remove-AzSqlDatabase xóa thành công Database1 trên Server2, nhưng Restore-AzSqlDatabase yêu cầu tham số nguồn backup cụ thể (ví dụ:-FromPointInTimeBackup,-ResourceIdcủa backup từ cùng server hoặc geo-replica). Không có cơ chế tự động lấy backup từ Server1, dẫn đến lỗi "Backup not found" hoặc "Invalid source". Giải pháp không thay thế được database từ server khác. -
No ✅
Phân tích đúng: Đây là đáp án chính xác. Giải pháp thất bại ở bước restore cross-server. Theo docs Azure (2026), khôi phục giữa các server khác nhau yêu cầu:- Point-in-time restore: Chỉ trong cùng logical server.
- Geo-restore: Chỉ từ geo-secondary region, tạo database mới (không replace trực tiếp).
- Cross-server migration: Sử dụng azrest API mới (2025) hoặc DMS (Database Migration Service) cho online migration. Xóa trước rồi restore không work vì thiếu nguồn backup shared.
🔗 Tài liệu tham khảo chính thức (Microsoft Azure Docs - cập nhật 2026):
- Restore-AzSqlDatabase cmdlet 🛠️ (Xác nhận yêu cầu nguồn backup hợp lệ trên server đích).
- Migrate databases between Azure SQL servers 📘 (Hướng dẫn các phương pháp thay thế như BACPAC/DMS).
- Azure SQL Backup & Restore limits (Không hỗ trợ cross-logical-server PITR trực tiếp).
💡 Lời khuyên từ Azure DBA: Để đạt mục tiêu đúng cách, sử dụng Export-AzSqlDatabase từ Server1 → BACPAC → Import-AzSqlDatabase sang Server2 sau khi xóa. Hoặc thiết lập Active Geo-Replication từ đầu cho zero-downtime! 🚀
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You have an Azure Synapse Analytics dedicated SQL pool that contains a table named Table1.
You have files that are ingested and loaded into an Azure Data Lake Storage Gen2 container named container1.
You plan to insert data from the files into Table1 and transform the data. Each row of data in the files will produce one row in the serving layer of Table1.
You need to ensure that when the source data files are loaded to container1, the DateTime is stored as an additional column in Table1.
Solution: You use an Azure Synapse Analytics serverless SQL pool to create an external table that has an additional DateTime column.
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Giải thích nội dung câu hỏi
Câu hỏi thuộc dạng series questions trong kỳ thi chứng chỉ (có thể là AZ-305 hoặc tương tự về Azure), nơi mỗi câu đưa ra một scenario cố định và một giải pháp cụ thể, yêu cầu đánh giá xem giải pháp đó có đạt được mục tiêu hay không. Bạn không thể quay lại câu hỏi sau khi trả lời.
Scenario chi tiết 📘:
- Bạn có một Azure Synapse Analytics dedicated SQL pool chứa bảng Table1 (bảng phục vụ - serving layer).
- Có các file dữ liệu được ingest và load vào Azure Data Lake Storage Gen2 (ADLS Gen2) trong container tên container1.
- Kế hoạch: Insert dữ liệu từ files vào Table1 và transform dữ liệu. Mỗi hàng (row) trong file nguồn sẽ tạo chính xác một hàng trong Table1.
- Mục tiêu chính 🎯: Khi file nguồn được load vào container1, cần tự động lưu thêm một cột DateTime (thời gian load) vào Table1 như một cột bổ sung.
Giải pháp đề xuất 🛠️: Sử dụng Azure Synapse Analytics serverless SQL pool để tạo một external table có cột DateTime bổ sung.
Câu hỏi: Giải pháp này có đạt mục tiêu không? (Yes/No)
Phân tích tổng quát:
- Dedicated SQL pool dùng để lưu trữ và phục vụ dữ liệu đã load (như Table1).
- Serverless SQL pool dùng để query trực tiếp trên dữ liệu ngoài (như ADLS) mà không cần load vào pool.
- External table chỉ là "view ảo" trỏ đến file ngoài, không tự động insert/load dữ liệu vào Table1 trong dedicated pool. Nó không giải quyết việc thêm cột DateTime khi insert vào serving layer (Table1).
✅ Đáp án đúng: No
Lý do lựa chọn 🏆:
- Giải pháp sử dụng serverless SQL pool để tạo external table chỉ cho phép query dữ liệu từ ADLS Gen2 một cách linh hoạt, nhưng không thực hiện insert hoặc load dữ liệu vào Table1 của dedicated SQL pool.
- Mục tiêu yêu cầu insert/transform và lưu row vào Table1 với cột DateTime bổ sung (ví dụ: thời gian load file). External table từ serverless không ảnh hưởng đến Table1, không thêm dữ liệu mới, và không tự động generate cột DateTime khi file được load vào container1.
- Để đạt mục tiêu, cần dùng PolyBase, COPY command, hoặc pipeline với metadata trong dedicated pool (ví dụ: thêm
GETDATE()hoặcSYSDATETIME()khi CTAS/INSERT). Serverless chỉ hỗ trợ on-demand query, không phải serving layer persistent storage. - Kiến thức cập nhật đến 2026: Azure Synapse (phiên bản mới nhất 2024-2026) vẫn phân biệt rõ serverless (query external data) vs dedicated (load & serve). Không có thay đổi nào cho phép external table từ serverless tự động populate dedicated table.
🔍 Phân tích tất cả các phương án
-
Yes ❌
Sai vì: Phương án này cho rằng external table từ serverless SQL pool sẽ tự động thêm cột DateTime và insert vào Table1. Thực tế, external table chỉ định nghĩa schema ảo trên file ADLS (có thể thêm computed column như DateTime = GETDATE()), nhưng không load dữ liệu vào dedicated pool. Dữ liệu vẫn nằm ngoài, không produce row trong Table1, vi phạm mục tiêu "insert vào serving layer". -
No ✅
Đúng vì: Giải pháp không đáp ứng yêu cầu load/insert dữ liệu từ container1 vào Table1 với cột DateTime bổ sung. Serverless external table chỉ hỗ trợ query/read, không phải write/persist vào dedicated Table1. Cần giải pháp khác như CTAS với OPENROWSET từ dedicated pool hoặc Data Flow trong Synapse Pipeline để thêm metadata DateTime.
📚 Tài liệu tham khảo
- Azure Docs - External Tables in Serverless SQL Pool: docs.microsoft.com/en-us/azure/synapse-analytics/sql/develop-tables-external-tables (xác nhận external table chỉ query, không load).
- Dedicated vs Serverless SQL Pool: docs.microsoft.com/en-us/azure/synapse-analytics/sql/overview-features (2024 update).
- Load Data with PolyBase/COPY: docs.microsoft.com/en-us/azure/synapse-analytics/sql/load-data-load-from-azure-data-lake-storage-gen2 (cách đúng để thêm cột DateTime).
- Synapse 2026 Roadmap: Không thay đổi core behavior (theo Azure Update 2025 Q4).
Hy vọng phân tích này giúp bạn ôn thi hiệu quả! 🚀 Nếu cần thêm scenario khác trong series, hãy cung cấp nhé.
You need to add a 4-TB volume that meets the following requirements:
✑ Maximizes IOPs
✑ Uses premium solid state drives (SSDs)
What should you do?
- A Attach two mirrored 4-TB SSDs.
- B Attach a stripe set that contains four 1-TB SSDs.
- C Attach a RAID-5 array that contains five 1-TB SSDs.
- D Attach a single 4-TB SSD.
Xem giải thích
🧩 Phân tích chi tiết câu hỏi
Câu hỏi gốc:
You have SQL Server on an Azure virtual machine.
You need to add a 4-TB volume that meets the following requirements:
✑ Maximizes IOPs
✑ Uses premium solid state drives (SSDs)
What should you do?
📘 Giải thích nội dung câu hỏi:
Câu hỏi này tập trung vào việc mở rộng lưu trữ cho một máy ảo (VM) Azure chạy SQL Server. Bạn cần tạo một volume dung lượng 4 TB (tương đương khoảng 4096 GiB) sử dụng Premium SSD (ổ đĩa trạng thái rắn cao cấp của Azure, cung cấp hiệu suất cao với IOPS và throughput lớn).
Yêu cầu chính là tối đa hóa IOPS (Input/Output Operations Per Second - số lượng hoạt động đọc/ghi mỗi giây), đây là chỉ số quan trọng nhất cho hiệu suất SQL Server, đặc biệt với workload database nặng về I/O.
Trong Azure, Premium SSD có giới hạn IOPS và throughput dựa trên kích thước đĩa (disk size). Mỗi đĩa Premium SSD có giới hạn IOPS tối đa theo tier (ví dụ: đĩa 1 TB hỗ trợ 5000 IOPS, đĩa 4 TB chỉ 7500 IOPS). Để vượt qua giới hạn này cho tổng dung lượng 4 TB, cần sử dụng kỹ thuật striping (RAID-0) tại mức OS (không phải Azure RAID managed). Điều này cho phép tổng hợp IOPS từ nhiều đĩa nhỏ hơn.
Kiến thức cập nhật đến 2026: Với Premium SSD v1 (vẫn phổ biến), logic này áp dụng. Premium SSD v2 (ra mắt 2023, hỗ trợ custom size lên đến 32 TiB/disk và 1.2 triệu IOPS/disk) cho phép IOPS cao hơn per disk, nhưng để max IOPS cho chính xác 4 TB trong kịch bản exam tiêu chuẩn, striping multiple P30 (1 TB) vẫn là cách tối ưu nhất vì tổng IOPS có thể đạt 20.000 (4 x 5000). Azure khuyến nghị striping 2-8 đĩa cho SQL Server data volumes để scale perf.
Nguồn tham khảo:
- Azure Managed Disks: Premium SSD sizes and performance (cập nhật 2025).
- SQL Server on Azure VMs: Storage best practices (khuyến nghị striping cho max IOPS).
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: Attach a stripe set that contains four 1-TB SSDs.
🛠️ Lý do chi tiết:
- Sử dụng 4 đĩa Premium SSD P30 (mỗi đĩa 1 TB = 1024 GiB, 5000 IOPS provisioned, 200 MB/s throughput).
- Stripe set (RAID-0 tại OS level, ví dụ dùng Storage Spaces trên Windows) kết hợp thành volume 4 TB, tổng IOPS = 4 x 5000 = 20.000 IOPS (gấp hơn 2 lần so với single 4 TB disk).
- Không có overhead parity như RAID-5, read/write IOPS đều scale tuyến tính, lý tưởng cho SQL Server (workload mixed read/write).
- Đáp ứng đầy đủ: Dung lượng 4 TB, Premium SSD, max IOPS theo giới hạn Azure (per VM còn scale thêm với VM size hỗ trợ >20k IOPS). Với Premium SSD v2, striping vẫn hiệu quả nếu cần legacy hoặc cost-optimized.
❌ Giải thích tất cả các phương án (đúng/sai)
-
[SAI] Attach two mirrored 4-TB SSDs.
❌ Sai vì: Mirroring (RAID-1) chỉ cho dung lượng usable 4 TB (mất 1 đĩa cho redundancy), IOPS chỉ tương đương 1 đĩa 4 TB (7500 IOPS). Read có thể double nhưng write penalty, không max IOPS (chỉ ~7500-15.000, thấp hơn striping). Phù hợp cho high availability nhưng không ưu tiên perf max. -
[ĐÚNG] Attach a stripe set that contains four 1-TB SSDs.
✅ Đúng như đã giải thích ở trên: Tổng 20.000 IOPS, dung lượng chính xác 4 TB, no redundancy overhead, max perf cho Premium SSD. -
[SAI] Attach a RAID-5 array that contains five 1-TB SSDs.
❌ Sai vì: RAID-5 (5 đĩa 1 TB) cho usable ~4 TB (trừ 1 đĩa parity), nhưng write IOPS giảm mạnh (4x read penalty do parity calculation). Tổng IOPS hiệu quả chỉ ~12.000-16.000 (thấp hơn striping), không khuyến nghị cho database vì write-heavy và rebuild chậm nếu disk fail. -
[SAI] Attach a single 4-TB SSD.
❌ Sai vì: Premium SSD P50 (4 TB = 4096 GiB) chỉ hỗ trợ 7500 IOPS, 250 MB/s - thấp nhất so với striping. Dù đơn giản, không max IOPS theo yêu cầu (chỉ 37% so với 20k từ 4 đĩa nhỏ).
💡 Lưu ý cuối: Trong thực tế, sau khi attach disks vào Azure VM, dùng Disk Management hoặc Storage Spaces để tạo stripe set. Luôn check VM size hỗ trợ (ví dụ: Dsv5-series cho >20k IOPS). Nếu dùng Premium SSD v2, có thể single disk đủ nhưng câu hỏi ngụ ý v1 logic.
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You have two Azure SQL Database servers named Server1 and Server2. Each server contains an Azure SQL database named Database1.
You need to restore Database1 from Server1 to Server2. The solution must replace the existing Database1 on Server2.
Solution: You restore the backup for Database1 from Server1 to the Server2 by using the RESTORE Transact-SQL command with the REPLACE option.
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi thuộc dạng series questions trong kỳ thi chứng chỉ (như AZ-104 hoặc tương tự), nơi mỗi câu đưa ra một kịch bản và giải pháp cụ thể, yêu cầu đánh giá xem giải pháp đó có đạt được mục tiêu hay không.
- Kịch bản: Bạn có hai Azure SQL Database servers (Server1 và Server2), mỗi server chứa một database tên Database1.
- Mục tiêu: Phục hồi (restore) Database1 từ Server1 sang Server2, thay thế hoàn toàn Database1 hiện có trên Server2.
- Giải pháp đề xuất: Sử dụng lệnh RESTORE Transact-SQL với tùy chọn REPLACE để restore backup của Database1 từ Server1 trực tiếp sang Server2.
📌 Lưu ý quan trọng: Azure SQL Database là dịch vụ PaaS (Platform as a Service), backups được Azure quản lý tự động (không thể truy cập file backup thủ công như SQL Server on-premises). Giải pháp này giống cách làm trên SQL Server truyền thống, nhưng không áp dụng được cho Azure SQL.
✅ Đáp án đúng và lý do lựa chọn
Đáp án đúng: No
🛠️ Lý do: Giải pháp KHÔNG đạt mục tiêu vì Azure SQL Database không hỗ trợ lệnh RESTORE Transact-SQL với REPLACE để restore backup từ server này sang server khác. Backups của Azure SQL là managed backups (tự động bởi Azure), bạn không thể lấy file backup (.bak) từ Server1 để restore thủ công sang Server2. Thay vào đó, phải dùng các phương pháp Azure-native như:
- Export/Import .bacpac file.
- Copy database qua Azure portal/CLI/PowerShell.
- Geo-restore (nếu là geo-replicated backup).
- Active Geo-Replication hoặc Failover Groups cho replication liên tục.
Dù có tùy chọnREPLACE, lệnh này vẫn thất bại vì không có quyền truy cập backup file cross-server trong Azure SQL (cập nhật đến 2026, Azure SQL Hyperscale và General Purpose vẫn giữ nguyên hạn chế này).
📋 Giải thích tất cả các phương án
-
Yes ❌ SAI: Phương án này cho rằng giải pháp đạt mục tiêu, nhưng thực tế không thể thực hiện vì Azure SQL Database cấm sử dụng
RESTORE DATABASEvới backup file từ server khác. Lệnh sẽ báo lỗi như "Backup file not found" hoặc "Access denied" do mô hình bảo mật PaaS. Không phù hợp với managed service. -
No ✅ ĐÚNG: Phương án này chính xác vì giải pháp không meet the goal. Azure không cho phép restore cross-server bằng T-SQL thủ công. Các cách thay thế hiệu quả:
- Copy to qua portal (tạo bản copy mới, sau delete và rename).
- Export .bacpac từ Server1 → Import sang Server2 với overwrite (REPLACE tương đương).
- Sử dụng Azure Database Migration Service cho migration lớn.
📘 Tài liệu tham khảo (cập nhật mới nhất 2026)
- Azure SQL Database backups and restore – Xác nhận không hỗ trợ RESTORE T-SQL cross-subscription/server.
- Migrate or copy databases – Hướng dẫn copy/replace database đúng cách.
- Transact-SQL differences – Liệt kê RESTORE không được hỗ trợ.
🧰 Mẹo DBA: Luôn ưu tiên ARM templates hoặc PowerShell cho automation cross-server restore!
After you answer a question in this section, you will NOT be able to return to it. As a result, these questions will not appear in the review screen.
You have an Azure Synapse Analytics dedicated SQL pool that contains a table named Table1.
You have files that are ingested and loaded into an Azure Data Lake Storage Gen2 container named container1.
You plan to insert data from the files into Table1 and transform the data. Each row of data in the files will produce one row in the serving layer of Table1.
You need to ensure that when the source data files are loaded to container1, the DateTime is stored as an additional column in Table1.
Solution: You use a dedicated SQL pool to create an external table that has an additional DateTime column.
Does this meet the goal?
- A Yes
- B No
Xem giải thích
🧩 Phân tích nội dung câu hỏi
Câu hỏi thuộc dạng "Does this meet the goal?" trong kỳ thi chứng chỉ Azure (có thể là AZ-305 hoặc DP-203), mô tả một kịch bản liên quan đến Azure Synapse Analytics dedicated SQL pool.
-
Tình huống chính:
- Bạn có một dedicated SQL pool chứa bảng Table1.
- Các file dữ liệu được ingest và load vào Azure Data Lake Storage Gen2 (ADLS Gen2) trong container tên container1.
- Kế hoạch: Insert dữ liệu từ các file này vào Table1 (lớp serving layer), đồng thời transform dữ liệu. Mỗi row trong file sẽ tạo ra một row duy nhất trong Table1.
-
Mục tiêu (goal): Đảm bảo rằng khi các source data files được load vào container1, một cột DateTime bổ sung (additional column) sẽ được lưu trữ trong Table1. Ý nghĩa là cần tự động thêm cột DateTime (có thể là timestamp của lúc load) vào dữ liệu khi insert vào Table1, mà không làm thay đổi cấu trúc file gốc.
-
Giải pháp đề xuất (Solution): Sử dụng dedicated SQL pool để tạo một external table có additional DateTime column.
-
Câu hỏi cốt lõi: Giải pháp này có đạt được mục tiêu không? (Yes/No).
Câu hỏi nhấn mạnh đây là phần của series questions với scenario giống nhau, mỗi câu có solution unique, và không thể quay lại sau khi trả lời. 🛠️ Lưu ý kỹ thuật: External table trong Synapse chỉ cho phép query dữ liệu external (từ ADLS) như một bảng nội bộ, nhưng không tự động insert vào Table1, và schema phải khớp chính xác với file (không hỗ trợ thêm computed column tự động).
✅ Đáp án đúng: No
Lý do chọn đáp án đúng (dựa trên tài liệu Azure Synapse mới nhất 2024-2026):
Giải pháp không đạt mục tiêu vì:
- External table chỉ đọc dữ liệu từ file trong ADLS Gen2 (qua PolyBase hoặc T-SQL CREATE EXTERNAL TABLE), schema phải khớp chính xác với dữ liệu file (CSV/Parquet). Không thể thêm additional DateTime column trực tiếp vào external table mà không có dữ liệu tương ứng trong file gốc.
- External table là read-only, không tự động insert/transform dữ liệu vào Table1. Để insert vào Table1 với DateTime thêm, cần query external table và dùng lệnh như
INSERT INTO Table1 SELECT *, SYSDATETIME() FROM external_table. Giải pháp chỉ tạo external table, không đề cập insert, nên không ensure DateTime được lưu vào Table1 khi file load. - Khi file mới load vào container1, external table chỉ refresh metadata (không auto-load), và vẫn không thêm DateTime tự động. Giải pháp đúng cần dùng COPY INTO với
OPENROWSET+ computed column, hoặc pipeline Synapse với Data Flow để transform và thêm timestamp.
📘 Nguồn tham khảo: - Azure Synapse Analytics - External tables (cập nhật 2025).
- COPY INTO statement (hỗ trợ thêm column từ 2023+).
- AZ-305 Exam Guide (Microsoft Learn, 2026 edition).
📋 Giải thích tất cả các phương án
-
Yes ❌ SAI:
Phương án này sai vì external table không hỗ trợ thêm cột DateTime bổ sung một cách tự động khi file load. Schema external table phải match file dữ liệu (LOCATION = container1/path), nếu thêm cột không tồn tại sẽ gây lỗi mismatch (ví dụ: Parquet schema validation fail). Hơn nữa, external table không insert dữ liệu vào Table1, chỉ dùng để query. Không đạt goal "stored as additional column in Table1" khi file load. -
No ✅ ĐÚNG:
Phương án đúng vì giải pháp chỉ tạo external table không đủ để tự động thêm DateTime vào Table1. Cần kết hợp thêm bước transform/insert (như CTAS, INSERT SELECT với GETDATE(), hoặc Synapse Pipeline với thêm column). External table hữu ích cho query ban đầu nhưng không giải quyết full requirement của insert + additional column khi file mới đến container1. 🛠️ Giải pháp thay thế đúng: Sử dụngCOPY INTO Table1 FROM OPENROWSET(...) WITH (col1, ..., LoadDateTime AS SYSDATETIME()).
The Intelligent Insights diagnostics log identifies that several tables are missing indexes.
You need to ensure that indexes are created for the tables.
What should you do?
- A Run the DBCC SQLPERF command.
- B Run the DBCC DBREINDEX command.
- C Modify the automatic tuning settings for db1.
- D Modify the Query Store settings for db1.
Xem giải thích
🧩 Phân tích chi tiết nội dung câu hỏi
Câu hỏi này thuộc lĩnh vực quản trị cơ sở dữ liệu Azure SQL Database. Cụ thể:
- Bạn có một cơ sở dữ liệu Azure SQL tên là db1 nằm trên server server1.
- Intelligent Insights diagnostics log (nhật ký chẩn đoán Intelligent Insights) phát hiện rằng một số bảng (tables) đang thiếu các chỉ mục (indexes), dẫn đến hiệu suất kém.
- Yêu cầu: Đảm bảo rằng các chỉ mục cần thiết được tạo ra cho những bảng này một cách tự động và hiệu quả.
📘 Intelligent Insights là tính năng giám sát tự động của Azure SQL Database, cung cấp các insights về hiệu suất, bao gồm khuyến nghị tạo index mới cho các bảng thiếu index để tối ưu hóa truy vấn. Câu hỏi tập trung vào cách kích hoạt cơ chế tự động xử lý vấn đề này, dựa trên phiên bản Azure SQL mới nhất (tính đến 2026, Automatic Tuning vẫn là tính năng cốt lõi với các cải tiến về AI-driven recommendations).
✅ Đáp án đúng: Modify the automatic tuning settings for db1.
Lý do lựa chọn:
🛠️ Automatic Tuning trong Azure SQL Database là tính năng sử dụng trí tuệ nhân tạo (AI) để tự động phân tích và áp dụng các cải tiến hiệu suất, bao gồm tạo index mới (CREATE INDEX) dựa trên dữ liệu từ Intelligent Insights.
- Khi kích hoạt tùy chọn FORCE_CREATE_INDEX hoặc CREATE_INDEX trong automatic tuning settings của db1, hệ thống sẽ tự động tạo các index được khuyến nghị cho các bảng thiếu index mà Intelligent Insights đã xác định.
- Điều này đảm bảo indexes được tạo mà không cần can thiệp thủ công, giảm thiểu downtime và tối ưu hóa hiệu suất liên tục.
- Đây là cách chuẩn và được khuyến nghị theo tài liệu Microsoft Azure (cập nhật 2026).
Nguồn tham khảo:
📋 Giải thích tất cả các phương án (đúng và sai)
-
Run the DBCC SQLPERF command.
❌ Sai: Lệnh DBCC SQLPERF dùng để xóa hoặc thiết lập lại các performance counters (bộ đếm hiệu suất) trong SQL Server, không liên quan đến việc tạo index. Nó chỉ hỗ trợ giám sát, không xử lý vấn đề thiếu index từ Intelligent Insights. -
Run the DBCC DBREINDEX command.
❌ Sai: Lệnh DBCC DBREINDEX (đã deprecated từ SQL Server 2005 và không khuyến nghị) dùng để xây dựng lại (rebuild) các index hiện có trên bảng, không tạo index mới. Nó không dựa trên recommendations từ Intelligent Insights và có thể gây blocking. -
Modify the automatic tuning settings for db1.
✅ Đúng: Như đã giải thích ở trên, đây là cách tự động và thông minh nhất để tạo index dựa trên Intelligent Insights. Tính năng này được nâng cấp với machine learning đến năm 2026, đảm bảo độ chính xác cao. -
Modify the Query Store settings for db1.
❌ Sai: Query Store dùng để bắt và lưu trữ lịch sử truy vấn, giúp phân tích query performance, nhưng không tự động tạo index. Nó chỉ cung cấp dữ liệu hỗ trợ, không xử lý trực tiếp vấn đề thiếu index từ diagnostics log.
🛠️ Lời khuyên từ Azure DBA: Để triển khai, truy cập Azure Portal > SQL Database > db1 > Automatic tuning > Bật "Create index" và theo dõi qua Intelligent Insights dashboard! 🚀
You need to move a SQL Server Agent job from DB1 to SQLMI1.
Which job attribute is unsupported in SQLMI1?
- A log to table
- B email notifications
- C schedules
- D output files
Xem giải thích
🧩 Giải thích nội dung câu hỏi
Câu hỏi tập trung vào việc di chuyển (move) một SQL Server Agent job từ cơ sở dữ liệu Microsoft SQL Server 2019 (DB1) sang Azure SQL Managed Instance (SQLMI1). 🛤️
Cụ thể, nó hỏi về thuộc tính job nào KHÔNG được hỗ trợ (unsupported) trong SQLMI1.
Azure SQL Managed Instance hỗ trợ hầu hết tính năng của SQL Server Agent (tương tự SQL Server on-premises), nhưng có một số hạn chế do môi trường managed (không có quyền truy cập file system trực tiếp). Việc migrate job yêu cầu kiểm tra tính tương thích để tránh lỗi. 📊
(Kiến thức dựa trên phiên bản Azure SQL Managed Instance mới nhất đến 2026, với SQL Server Agent hỗ trợ >95% tính năng, nhưng vẫn có gaps ở I/O file-based).
✅ Đáp án đúng: "output files"
Lý do chọn đáp án này:
Trong Azure SQL Managed Instance, SQL Server Agent KHÔNG hỗ trợ ghi output của job steps ra file (output files) vì không có quyền truy cập file system như SQL Server on-premises. Jobs chỉ có thể log history vào bảng msdb.dbo.sysjobhistory hoặc sysjobstepslogs, không thể write ra file vật lý. Điều này là hạn chế cố hữu của nền tảng managed để đảm bảo bảo mật và tính khả dụng cao. Khi migrate từ DB1 sang SQLMI1, thuộc tính này sẽ fail và cần rework (ví dụ: dùng log to table thay thế). 🛑
(Xác nhận từ docs: Đây là unsupported feature rõ ràng, không thay đổi đến 2026).
📋 Giải thích tất cả các phương án (đúng/sai)
Dưới đây là phân tích chi tiết từng lựa chọn, giữ nguyên văn bản gốc bằng tiếng Anh. Mỗi phương án được đánh giá dựa trên hỗ trợ thực tế trong Azure SQL Managed Instance:
-
❌ "log to table" (SAI)
Phương án này ĐÚNG là được hỗ trợ. SQL Server Agent trong SQLMI1 cho phép log job history và step output vào bảng msdb (như sysjobhistory và sysjobstepslogs). Tính năng này giống hệt SQL Server 2019, không có hạn chế. Bạn có thể enable qua job properties > Steps > Advanced > "Log to table". 🗃️ -
❌ "email notifications" (SAI)
Phương án này ĐÚNG là được hỗ trợ. SQLMI1 hỗ trợ notifications qua SQL Server Agent Operators và Alerts, sử dụng Database Mail (mail profile được cấu hình sẵn hoặc custom). Email sẽ gửi qua Azure's mail infrastructure khi job succeed/fail. Không cần thay đổi khi migrate. 📧 -
❌ "schedules" (SAI)
Phương án này ĐÚNG là được hỗ trợ đầy đủ. Schedules (one-time, recurring) hoạt động giống SQL Server on-premises, bao gồm @freq_type, @freq_interval,... Tạo/edit qua SSMS hoặc T-SQL (sp_add_jobschedule). Không có gap nào ở đây. ⏰ -
✅ "output files" (ĐÚNG)
Phương án này SAI vì KHÔNG được hỗ trợ. Như giải thích trên, SQLMI1 không cho phép job steps write output ra file (ví dụ: C:\output.txt) do thiếu file system access. Lỗi sẽ xảy ra khi run job: "Cannot open the file...". Giải pháp: Chuyển sang log to table hoặc PowerShell Cmdlet output. 🚫
📘 Tài liệu tham khảo
- Microsoft Docs chính thức (cập nhật 2024-2026):
SQL Server Agent in Azure SQL Managed Instance – Liệt kê rõ "Output files: Not supported".
Migrate SQL Agent Jobs to SQLMI – Hướng dẫn unsupported features. - Azure Updates (2025-2026): Không có thay đổi cho output files (vẫn unsupported để tránh security risks). Kiểm tra Azure Portal > SQLMI > Agent Jobs để verify. 🔗
Nếu cần hướng dẫn migrate cụ thể hoặc script T-SQL, hãy cho tôi biết! 🛠️