Database compatibility level (mức tương thích cơ sở dữ liệu) là một trong các cài đặt cấp database, ảnh hưởng đến cách database hoạt động. Mỗi phiên bản mới của Microsoft® SQL Server® giới thiệu nhiều tính năng mới, hầu hết trong đó yêu cầu từ khóa mới và thay đổi hành vi nhất định tồn tại trong các phiên bản trước. Để cung cấp khả năng tương thích ngược tối đa, Microsoft cho phép chúng ta thiết lập compatibility level theo nhu cầu.
Mặc định của Database compatibility level
Mặc định, mọi database đều kế thừa compatibility level của database model mà từ đó nó được tạo. Ví dụ, compatibility level của database SQL Server 2012 mặc định là 110 trừ khi bạn thay đổi nó.
Compatibility level sau khi restore
Khi bạn restore một database backup được lấy trên phiên bản SQL cũ hơn, database compatibility level vẫn giữ nguyên như trên instance mà bạn lấy backup, trừ khi compatibility level nguồn thấp hơn mức tối thiểu được hỗ trợ. Trong trường hợp đó, database compatibility level sẽ thay đổi thành phiên bản thấp nhất được hỗ trợ. Ví dụ, nếu restore backup SQL Server 2005 lên SQL Server 2017, compatibility level của database restored sẽ được đặt là 100 vì đó là mức tối thiểu SQL 2017 hỗ trợ.
Compatibility level sau khi upgrade
Compatibility level của các database tempdb, model, msdb, và resource được đặt thành compatibility level hiện tại sau khi upgrade. Database hệ thống master giữ nguyên compatibility level mà nó có trước khi upgrade.
Xác định compatibility level
Để xác định compatibility level hiện tại, truy vấn cột compatibility_level của sys.databases.
Để thay đổi sang compatibility level khác, sử dụng lệnh ALTER DATABASE như ví dụ sau:
Use Master Go ALTER DATABASE <database name>SET COMPATIBILITY_LEVEL = <compatibility-level>;
Nếu bạn thích, có thể dùng wizard để thay đổi compatibility level. Tuy nhiên, nếu database đang được truy cập online bởi người dùng, bạn nên chuyển database sang chế độ single-user trước. Sau đó, sau khi dùng wizard thay đổi level, bạn chuyển database trở lại multi-user mode.
Để thay đổi compatibility level với wizard, chuột phải database –> property –> options –> Database compatibility level như hình sau:
(https://vn.wsxdn.com/UploadFiles_2724/202207/2022070812110977.png)
Default và supported compatibility levels
Bảng sau hiển thị các phiên bản SQL Server với compatibility level mặc định và danh sách các mức được hỗ trợ:
(https://vn.wsxdn.com/UploadFiles_2724/202207/2022070812110959.png)
Nguồn:https://www.sqlskills.com/blogs/glenn/database-compatibility-level-in-sql-server/
Database compatibility level và hiệu suất
Trong các phiên bản SQL Server trước SQL 2014, các database administrator không bao giờ lo lắng về database compatibility level từ góc độ hiệu suất. Compatibility level chủ yếu được dùng như cơ chế kiểm soát xem các tính năng mới giới thiệu trong phiên bản đó có thể sử dụng được hay không, hoặc vô hiệu hóa các tính năng không được hỗ trợ. Nó cũng được dùng để kiểm soát tương thích ngược.
Bây giờ, khi bạn migrate từ phiên bản này sang phiên bản khác, bạn nên làm full regression test để hiểu sự thay đổi về hiệu suất. Đôi khi, một query chạy tốt hơn với compatibility level cũ ngay cả sau khi migrate. Tuy nhiên, trong các trường hợp khác, có thể ngược lại, vì vậy hãy chắc chắn làm full regression testing.
Kể từ SQL Server 2014, bất kỳ database nào chạy ở compatibility level 120 trở lên có thể tận dụng hàm cardinality estimate mới. Cardinality estimation là logic diễn ra để xác định SQL Server thực thi query như thế nào, dựa trên chi phí ước lượng của nó. Ước lượng được tính bằng cách sử dụng đầu vào từ statistics liên quan đến các object tham gia vào query đó. Thực tế, ở mức cao, cardinality estimates là ước lượng số hàng (row-count estimates) kết hợp với thông tin về phân phối giá trị, số giá trị distinct, và số lượng bản sao chứa trong các bảng và object được tham chiếu trong query. Sai lệch ước lượng này có thể dẫn đến disk I/O không cần thiết do memory grants không đủ (như TempDB spills) hoặc chọn serial plan execution thay vì parallel plan execution, chỉ nêu một vài khả năng. Tôi dự định thảo luận thêm về cardinality estimation trong bài blog tiếp theo.
Tác động của việc thay đổi compatibility level
Việc thay đổi compatibility level báo cho database thay đổi feature set của nó. Đó là, một số tính năng được thêm vào, và cùng lúc, một số tính năng cũ bị loại bỏ. Ví dụ, mệnh đề FOR BROWSE không được phép trong câu lệnh INSERT và SELECT INTO ở compatibility level 100, và được phép nhưng bị bỏ qua ở compatibility level 90. Nếu ứng dụng của bạn sử dụng tính năng này, thay đổi này có thể gây ra kết quả bất ngờ.
Khi bạn chuyển database từ compatibility level thấp sang cao hơn, bạn có thể kỳ vọng rằng không thể dùng tính năng mới nếu không thay đổi compatibility. Tuy nhiên, điều đó không hoàn toàn đúng. Điều này chỉ đúng cho tính năng cấp database. Bạn có thể sử dụng các tính năng cấp instance ngay cả khi không thay đổi compatibility level.
Kết luận
Database compatibility level định nghĩa cách SQL Server sử dụng các tính năng nhất định. Cụ thể, nó khiến chúng hoạt động như một phiên bản SQL Server cho trước, thường được làm để cung cấp mức độ tương thích ngược nào đó. Vì đây là thuộc tính của database, compatibility chỉ ảnh hưởng đến các tính năng cấp database cho database cụ thể đó.
Nếu bạn upgrade database bằng cách chuyển nó sang server phiên bản cao hơn hoặc làm in-place instance upgrade, compatibility level vẫn giữ nguyên miễn là mức đó được hỗ trợ.
Nếu compatibility level được đặt là SQL 2014 hoặc cao hơn, SQL Server sử dụng tính năng cardinality estimation mới. Nếu compatibility level được đặt là 2012 hoặc thấp hơn, optimizer cũ được sử dụng.
Sử dụng tab Feedback để đưa ra bình luận hoặc đặt câu hỏi.
Tối ưu môi trường của bạn với quản trị, quản lý và cấu hình chuyên nghiệp
Các chuyên gia Dịch vụ ứng dụng của Rackspace (RAS) cung cấp các dịch vụ chuyên nghiệp và được quản lý sau đây trên danh mục ứng dụng rộng:
- Nền tảng eCommerce và Trải nghiệm số
- Quản trị nguồn lực doanh nghiệp (ERP)
- Business Intelligence
- Salesforce Quản trị quan hệ khách hàng (CRM)
- Databases
- Lưu trữ Email và Năng suất
Chúng tôi cung cấp:
- Chuyên môn khách quan: Chúng tôi đơn giản hóa và hướng dẫn hành trình hiện đại hóa của bạn, tập trung vào các khả năng mang lại giá trị ngay lập tức.
- Fanatical Experience™: Chúng tôi kết hợp phương pháp Process first. Technology second.® với hỗ trợ kỹ thuật chuyên dụng để cung cấp giải pháp toàn diện.
- Danh mục không đối thủ: Chúng tôi áp dụng kinh nghiệm đám mây rộng lớn để giúp bạn chọn và triển khai công nghệ phù hợp trên đám mây phù hợp.
- Giao hàng Agile: Chúng tôi gặp gỡ bạn ở bất kỳ đâu trong hành trình của bạn và điều chỉnh thành công của chúng tôi với của bạn.
Chat ngay để bắt đầu.