Những system database mặc định

Mặc định sau khi cài đặt SQL Server luôn có 4 cơ sở dữ liệu hệ thống (system databases) đi kèm gồm master, tempdb, model, msdb. Ngoài ra còn có một database khác luôn trong trạng thái ẩn kể cả khi bạn query từ các catalog views cũng không nhìn thấy nó được. Database này gọi là resource database và có tên là mssqlsystemresource. Hoặc nếu bạn có sử dụng SQL Server replication thì trên distributor server có thêm một system database là distribution. Hôm nay chúng ta sẽ tìm hiểu kiến thức cơ bản về những databases này để biết công dụng của từng databases là gì, cần thực hiện công việc bảo trì như thế nào, cái nào cần backup, cái nào không.

master database

Mỗi database trong SQL Server đều có những catalog lưu trữ thông tin về các objects của database đó. Master database cũng như vậy, ngoài ra nó còn chứa các thông tin ở cấp độ hệ thống như thông tin dung lượng đĩa cứng, danh sách các database trong hệ thống, danh sách các files đã cấp phát và dung lượng đã dùng, thông số cấu hình SQL Server, endpoints, các tài khoản login, quyền hạn được gán trên các login này. Chính vì vậy mà các hành động nhưng tạo mới databases, thay đổi cấu hình hệ thống, thay đổi các tài khoản logins đều làm thay đổi nội dung master database. Đây là database quan trọng của hệ thống và có nhiều lý do để ta nên backup định kì, và có thể khôi phục khi cần.

model database

Đây được xem là database mẫu trong SQL Server, tất cả những databases mới tạo ra đều được copy từ những objects và thuộc tính của model database này. Chẳng hạn bạn muốn database mới nào cũng có user A với permission xyz và có recovery model là simple thì hãy tạo user A trong database model, set permission xyz tương ứng và đổi recovery model về simple. Tất cả những databases tạo ra sau đó (kể cả system database như tempdb) sẽ thừa hưởng những cài đặt này ở model database. Việc backup database này cũng tương đối cần thiết và chỉ cần thực hiện full backup sau mỗi lần bạn thay đổi những cấu hình liên quan đến model database.

msdb database

msdb được sử dụng bởi rất nhiều dịch vụ như SQL Server Agent, backup, replication tasks, service broker, log shipping, database mail. Bạn có thể truy cập thông tin về các SQL Agent job như job steps, job command, job schedule được lưu trong msdb dưới dạng bảng. Hoặc thông tin về các thành phần tham gia log shipping database nào tham gia, đường dẫn chứa backup, danh sách secondary servers,… Hoặc lịch sử backup/restore của các databases trong SQL Server. Tất cả những thông tin này bạn đều có thể truy cập thông qua T-SQL nhưng Microsoft không khuyến khích các bạn thêm xóa sửa data những bảng này băng T-SQL. Thay vào đó mỗi dịch vụ đều có thể thao tác bằng giao diện trên SSMS hoặc thông qua các system stored procedures tương ứng được cung cấp bởi MS (ví dụ các procedures cấu hình database mail server, hoặc log shipping). Bởi vì msdb chứa rất nhiều thông tin của nhiều service nên được khuyến khích thực hiện backup thường xuyên, đặc biệt sau mỗi lần có những thay đổi trên msdb.

tempdb database

Được mệnh danh là “toilet công cộng”, tempdb được xem là không gian làm việc của các user connections, nơi chứa những dữ liệu tạm trong quá trình xử lý câu truy vấn cũng như các thao tác sort, hash. Ngoài ra những system process như DBCC CheckDB, index online operations đều cần sử dụng tempdb. Thêm vào đó là những objects các bạn tạo như bảng tạm, biến bảng cũng được lưu trong tempdb. Vì nó là nơi lưu trữ data trong quá trình xử lý của một process nên khi có nhiều processes đồng thời xảy ra việc cấp phát không gian lưu trữ trên tempdb là cực kỳ bận rộn, dễ tranh chấp nhau và ảnh hưởng hiệu suất chung của server. Do đó việc chọn kích thước data file size và cấu hình tempdb rất quan trọng cho việc tối ưu hiệu suất SQL Server. Một điều hết sức đáng chú ý khác là tempdb được tạo mới mỗi khi SQL Server service khởi động, và bản thân tempdb cũng được copy từ model database khi tạo mới. Vì luôn được tạo mới nên những objects bạn tạo trước đó trong tempdb sẽ bị mất mỗi khi SQL Server shutdown hoặc restart. Bạn không cần thực hiện việc backup database này vì những data lưu trữ trong tempdb chỉ có giá trị đối với một process trong lần thực thi đó.

resource database

Chính vì mssqlsystemresource là một database ẩn nên chúng ta cũng không cần thực hiện việc bảo trì gì liên quan đến database này. Bản thân mình cũng không tương tác nhiều với database này trong quá trình làm việc với SQL Server từ trước tới nay. Bạn có thể tìm hiểu thêm về database này ở đây.

distribution database

Đây là database được sử dụng bởi SQL Server replication, nơi chứa các meta data của các loại replication. Đối với transactional replication, đây là nơi chứa các transactions và commands trước khi chúng được replicated qua các subcriber servers. Bởi vì tình nhất quán của dữ liệu nên việc bạn restore distribution database có thể gây thiếu transactions trên subcribers nên tùy thuộc vào chiến lược recovery của bạn mà xem xét kế hoạch backup. Bạn có thể tham khảo khuyến khích của Microsoft ở link này.