Bạn có nghĩ về điều gì đó khi bạn tạo một cơ sở dữ liệu mới không? Tôi đoán rằng hầu hết các bạn sẽ nói không, vì tất cả chúng ta đều sử dụng các tham số mặc định, mặc dù chúng còn lâu mới tối ưu. Tuy nhiên, có rất nhiều cài đặt đĩa và chúng thực sự giúp tăng hiệu suất và độ tin cậy của hệ thống.
Chúng tôi sẽ không nói đến tầm quan trọng của hệ thống tệp NTFS đối với độ tin cậy của dữ liệu, mặc dù hệ thống tệp này cho phép MS SQL Server sử dụng đĩa theo cách hiệu quả nhất.
Nếu bạn đang thiếu tài nguyên và thứ gì đó bắt đầu hoạt động chậm chạp, điều đầu tiên bạn nghĩ đến là nâng cấp. Nhưng không phải nâng cấp trong mọi trường hợp. Bạn có thể thực hiện điều chỉnh, mặc dù điều này không nên thực hiện khi máy chủ bắt đầu chạy chậm mà ở giai đoạn thiết kế và cài đặt.
Tối ưu hóa là một quá trình phức tạp và thường không chỉ liên quan đến một chương trình nhất định (trong trường hợp của chúng tôi là một cơ sở dữ liệu nhất định) mà còn liên quan đến hệ điều hành và phần cứng. Mặc dù chúng ta chủ yếu sẽ nói về cơ sở dữ liệu, nhưng chúng ta không thể bỏ qua những điều bên ngoài.
Kiến trúc dữ liệu
SQL Server lưu trữ, đọc và ghi dữ liệu theo khối 8 KB mỗi khối. Các khối này được gọi là các trang. Một cơ sở dữ liệu có thể lưu trữ 128 trang trên mỗi megabyte (1 megabyte hoặc 1048576 byte chia cho 8 kilobyte hoặc 8192 byte). Tất cả các trang được lưu trữ trong một phạm vi. Một phạm vi là 8 trang tuần tự cuối cùng hoặc 64 KB. Như vậy, 1 megabyte lưu trữ được 16 dung lượng.
Các trang và phạm vi là cơ sở của cấu trúc cơ sở dữ liệu vật lý của SQL Server. MS SQL Server sử dụng nhiều loại trang khác nhau, một số theo dõi không gian được cấp phát, một số chứa dữ liệu người dùng và chỉ mục. Các trang theo dõi không gian được phân bổ chứa dữ liệu được nén dày đặc. Nó cho phép MS SQL Server lưu trữ hiệu quả chúng trong bộ nhớ để dễ đọc.
SQL Server sử dụng hai loại phạm vi:
- Phạm vi lưu trữ các trang từ hai đến nhiều đối tượng được gọi là phạm vi hỗn hợp. Mỗi bảng bắt đầu như một phạm vi hỗn hợp. Bạn chủ yếu sử dụng phạm vi hỗn hợp cho các trang chứa không gian và chứa các đối tượng nhỏ.
- Phạm vi có tất cả 8 trang được phân bổ cho một đối tượng được gọi là phạm vi thống nhất. Chúng được sử dụng khi một bảng hoặc chỉ mục yêu cầu hơn 64 KB.
Phạm vi đầu tiên cho mỗi tệp là một tệp thống nhất và chứa các trang của tiêu đề tệp, các phạm vi tiếp theo chứa 3 trang được phân bổ mỗi trang. Máy chủ phân bổ các phạm vi hỗn hợp này khi bạn tạo tệp dữ liệu cơ bản và sử dụng các trang này cho các tác vụ nội bộ của nó. Trang tiêu đề tệp chứa các thuộc tính tệp, chẳng hạn như tên của cơ sở dữ liệu được lưu trữ trong tệp, nhóm tệp, kích thước tối thiểu, kích thước tăng dần. Đây là trang đầu tiên của mỗi tệp (trang 0).
Kế hoạch thực thi truy vấn trong Trình phân tích truy vấn SQL
Dung lượng trống của trang ( PFS ) trong một trang được cấp phát có chứa thông tin về dung lượng trống có sẵn trong tệp. Thông tin này được lưu trữ trên trang 1. Mỗi trang như vậy có thể mở rộng đến 8000 trang liền kề, tương đương 64 Mb dữ liệu.
Nhật ký giao dịch thu thập tất cả thông tin về những thay đổi diễn ra trên máy chủ để khôi phục cơ sở dữ liệu tại thời điểm xảy ra lỗi hệ thống và đảm bảo tính toàn vẹn của dữ liệu.
Lưu ý rằng tất cả các số đều là bội số của 8 hoặc 16. Điều này là do bộ điều khiển đĩa cứng đọc dữ liệu có kích thước này dễ dàng hơn. Dữ liệu được đọc từ đĩa theo trang, tức là 8 kilobyte, đây là một giá trị khá tối ưu.
Bảo vệ trang
Như từ MS SQL Server 2005, máy chủ cơ sở dữ liệu có một tùy chọn mới - điều khiển dữ liệu cấp độ trang. Nếu AGE_VERIFY_CHECKSUM tham số được kích hoạt (nó được kích hoạt theo mặc định), máy chủ sẽ kiểm soát tổng kiểm tra của các trang. Nếu chúng ta xem hướng dẫn sử dụng cho tham số này, chúng ta sẽ thấy rằng tổng kiểm cho phép theo dõi các lỗi đầu vào / đầu ra mà hệ điều hành không thể theo dõi. Đó là những loại lỗi nào? Có vẻ như chúng là vấn đề nội bộ của máy chủ cơ sở dữ liệu.
Kiểm tra tính toàn vẹn của dữ liệu không bao giờ gặp lỗi, vì vậy tốt hơn là bạn nên kích hoạt nó. Đối với điều này, chúng ta cần thực hiện lệnh sau:
ALTER DATABASE имя базы SET PAGE_VERIFY
Nếu có lỗi trên trang, máy chủ sẽ thông báo cho chúng tôi. Nhưng làm thế nào chúng ta có thể sửa chữa nó một cách nhanh chóng? Có một tùy chọn để khôi phục dữ liệu ở cấp độ trang cho việc này.
Kế hoạch thực thi đồ họa
Tăng trưởng tệp
Khi chúng tôi tạo cơ sở dữ liệu, chúng tôi sẽ được nhắc chọn kích thước ban đầu và phương thức gia tăng. Khi chúng tôi thiếu không gian hiện tại, máy chủ sẽ mở rộng dung lượng tương ứng với phương thức gia tăng đặt trước.
Có ba phương pháp tăng dần cho tệp:
- Tăng trưởng tính bằng megabyte.
- Tăng trưởng theo phần trăm.
- Tăng trưởng thủ công.
Hai phương pháp đầu tiên được thực hiện tự động, nhưng chúng chỉ được khuyến nghị cho cơ sở dữ liệu thử nghiệm vì quản trị viên không có quyền kiểm soát kích thước tệp.
Nếu một tệp được tăng thêm một lượng megabyte nhất định, tại một số thời điểm, tốc độ chèn dữ liệu có thể tăng lên và tốc độ tăng tệp có thể trở nên quá thường xuyên và đây là chi phí bổ sung. Tăng trưởng tệp theo phần trăm cũng không có lợi. Bạn nên sử dụng mức tăng trưởng tệp 10% và điều này là OK đối với cơ sở dữ liệu vừa và nhỏ. Nhưng khi đạt đến 1000 gigabyte, nó sẽ yêu cầu 100 gigabyte ở mỗi lần tăng trưởng. Nó sẽ dẫn đến lãng phí dung lượng ổ đĩa một cách vô nghĩa.
Luôn kiểm soát các thay đổi về kích thước của tệp và nhật ký giao dịch. Nó sẽ cho phép bạn sử dụng tài nguyên đĩa một cách hiệu quả nhất.
Thuộc tính cơ sở dữ liệu MS SQL Server
Nén dữ liệu
Ổ cứng vẫn là một điểm hợp lý của máy tính. Hiệu suất của bộ vi xử lý tăng lên đáng kể, trong khi đĩa cứng không thể cung cấp một cái gì đó mới. Để tiết kiệm số lượng hoạt động đầu vào / đầu ra và giảm dữ liệu được lưu trữ trên đĩa cứng, bạn có thể sử dụng đĩa có tính năng nén. Chỉ những đĩa như vậy là tốt để lưu trữ các nhóm tệp chỉ đọc. Có lẽ, đó là bởi vì việc nén là cần thiết cho các bài viết và nó đòi hỏi chi phí xử lý bổ sung.
Nén dữ liệu và trạng thái chỉ đọc rất tốt cho dữ liệu lưu trữ. Ví dụ:dữ liệu kế toán trong những năm qua không cần thiết để ghi và có thể chiếm quá nhiều dung lượng. Bằng cách đặt dữ liệu vào phần lưu trữ của đĩa, bạn sẽ tiết kiệm được rất nhiều dung lượng.
Đĩa cho độ tin cậy
Phương pháp sau cho phép tăng độ tin cậy và hiệu suất cùng một lúc, và một lần nữa, nó liên quan đến ổ cứng. Đó là, cơ học không chỉ chậm nhất mà còn kém đáng tin cậy nhất. Về độ tin cậy, tôi không thu thập số liệu thống kê, nhưng cả ở nhà và ở cơ quan, tôi chủ yếu xử lý ổ cứng.
Vì vậy, để tăng hiệu suất và độ tin cậy, bạn chỉ cần sử dụng hai hoặc nhiều ổ cứng thay vì một. Sẽ tốt hơn nữa nếu chúng được kết nối với các bộ điều khiển riêng biệt. Bạn có thể lưu trữ cơ sở dữ liệu trên một đĩa và nhật ký giao dịch trên đĩa khác. Nếu có đĩa thứ ba, nó có thể lưu trữ hệ thống.
Lưu trữ dữ liệu và nhật ký trên các đĩa riêng biệt cho phép bạn tăng độ tin cậy lên rất nhiều. Giả sử bạn có mọi thứ trên một đĩa và nó bị hỏng. Để làm gì? Bạn có thể liên hệ với một công ty sẽ cố gắng khôi phục mọi thứ hoặc cố gắng tự làm điều tương tự, nhưng cơ hội khôi phục là 100%. Bên cạnh đó, việc đưa máy chủ trở lại hoạt động có thể mất một lượng thời gian đáng kể. Phục hồi nhanh chỉ có thể được thực hiện cho đến thời điểm của bản sao lưu cuối cùng. Phần còn lại là nghi vấn.
Và bây giờ, giả sử bạn có dữ liệu và nhật ký giao dịch trên các đĩa khác nhau. Nếu đĩa có nhật ký bị tắt, dữ liệu sẽ vẫn ở đó. Điều duy nhất là bạn không thể thêm dữ liệu mới, nhưng nếu bạn tạo một nhật ký mới, bạn có thể tiếp tục làm việc.
Nếu đĩa có dữ liệu bị lỗi, chúng tôi vẫn có thể dự trữ nhật ký giao dịch để ngăn ngừa mất mát dữ liệu nhỏ nhất. Sau đó, chúng tôi khôi phục dữ liệu từ bản sao lưu hoàn chỉnh (việc này phải luôn được thực hiện trước, quản trị viên giỏi thực hiện việc này ít nhất một lần mỗi ngày) và thêm các thay đổi từ bản sao lưu của nhật ký.
Đĩa cho Hiệu suất
Nếu dữ liệu và nhật ký nằm trên các đĩa riêng biệt, điều đó không chỉ có nghĩa là an toàn mà còn tăng hiệu suất. Vấn đề là máy chủ cơ sở dữ liệu có thể đồng thời ghi dữ liệu vào nhật ký và tệp dữ liệu.
Chúng tôi có thể đi xa hơn và phân bổ một ổ cứng cho nhật ký giao dịch và một số ổ cứng cho dữ liệu. Máy chủ làm việc với dữ liệu thường xuyên hơn, đó là lý do tại sao nó yêu cầu một số bộ lưu trữ mà bạn có thể làm việc cùng một lúc. Và nếu các bộ lưu trữ này được kết nối với các bộ điều khiển khác nhau, công việc đồng thời được đảm bảo.
Biến thể nhanh nhất và đáng tin cậy nhất là sử dụng RAID . Tuy nhiên, không phải mọi RAID là đáng tin cậy và nhanh chóng cùng một lúc. Đối với các nhóm tệp, bạn nên chọn RAID10 , vì nó chứa các tính năng được cân bằng tốt, nhưng tùy thuộc vào dữ liệu cơ sở dữ liệu, bạn có thể chọn một biến thể khác.
Bạn có thể sử dụng giải pháp phần mềm hoặc phần cứng làm RAID . Một giải pháp phần mềm rẻ hơn, nhưng tốn thêm tài nguyên của CPU. Và một bộ xử lý không có tài nguyên dự phòng. Đó là lý do tại sao tốt hơn nên sử dụng các giải pháp phần cứng trong đó chip chuyên dụng chịu trách nhiệm về RAID .
Chỉ mục
Mọi người đều biết rằng các chỉ mục giúp tăng tốc độ tìm kiếm dữ liệu. Hầu hết chúng ta đều hiểu rằng các chỉ mục ảnh hưởng tiêu cực đến việc chèn và cập nhật dữ liệu, vì vậy bạn càng có nhiều chỉ mục, máy chủ càng khó duy trì chúng. Tại thời điểm đó, không nhiều người thậm chí nghĩ rằng các chỉ mục yêu cầu bảo trì. Các trang cơ sở dữ liệu chứa dữ liệu chỉ mục có thể bị tràn và cuối cùng trở nên mất cân bằng.
Có, chúng tôi có thể bỏ qua các tham số khác nhau và chỉ cần tạo lại các chỉ mục một lần trong một tháng, điều này tương tự như bảo trì. SQL Server bao gồm hai tham số ngăn các chỉ mục vượt trội trong nửa giờ sau khi tạo: FILLFACTOR và PAD_INDEX .
Bạn có thể sử dụng tùy chọn FILLFACTOR để tối ưu hóa hiệu suất của các thao tác chèn và cập nhật có chứa chỉ mục được nhóm hoặc không nhóm. Dữ liệu chỉ mục có thể được lưu trữ trong nhiều trang dữ liệu. Như tôi đã đề cập ở trên, mỗi trang bao gồm 8 KB. Khi một trang chỉ mục đã đầy, máy chủ sẽ tạo một trang mới và chia trang để chèn dữ liệu thành hai.
Máy chủ yêu cầu thời gian để phân chia trang và tạo một trang mới. Để tối ưu hóa việc phân chia trang, hãy sử dụng FILLFACTOR tùy chọn để xác định phần trăm không gian trống trên tất cả các phần của trang chỉ mục. Dung lượng đĩa lớn hơn mà các trang cấp độ lá có, bạn sẽ ít phải chia các trang chỉ mục hơn. Khi đó, cây chỉ mục sẽ quá lớn và việc bỏ qua nó sẽ mất thêm thời gian.
PAD_INDEX tùy chọn cho biết tỷ lệ lấp đầy của các trang không phải là trang. Bạn có thể sử dụng PAD_INDEX chỉ khi FILLFACTOR tùy chọn được chỉ định vì giá trị phần trăm của PAD_INDEX phụ thuộc vào phần trăm được chỉ định trong FILLFACTOR .
Thống kê
Thống kê cho phép máy chủ đưa ra quyết định đúng đắn giữa việc sử dụng chỉ mục và quét toàn bộ bảng. Giả sử bạn có một danh sách nhân viên của một cửa hàng đúc. Danh sách này sẽ bao gồm khoảng 90% nam giới.
Bây giờ, giả sử chúng ta cần tìm tất cả phụ nữ. Vì không có nhiều trong số chúng, lựa chọn hiệu quả nhất sẽ là sử dụng chỉ mục. Nhưng nếu chúng ta cần tìm tất cả những người đàn ông, hiệu quả chỉ số sẽ chậm lại. Số lượng bản ghi đã chọn quá lớn và việc bỏ qua cây chỉ mục cho mỗi bản ghi sẽ là một chi phí. Việc quét toàn bộ bảng đơn giản hơn nhiều - quá trình thực thi sẽ nhanh hơn nhiều vì máy chủ sẽ cần đọc tất cả các lá cấp thấp của chỉ mục một lần mà không cần nhiều lần đọc ở tất cả các cấp.
SQL Server thu thập thống kê bằng cách đọc tất cả các giá trị trường hoặc bằng một mẫu để tạo danh sách giá trị được phân phối và sắp xếp đồng nhất. SQL Server tự động phát hiện phần trăm hàng phải được kiểm tra trên cơ sở số lượng hàng trong bảng. Khi thu thập thống kê, trình tối ưu hóa truy vấn sẽ thực hiện quét toàn bộ hoặc các mẫu hàng.
Để thống kê hoạt động, nó phải được tạo. Trong trường hợp cập nhật dữ liệu lớn, số liệu thống kê có thể chứa dữ liệu không chính xác và máy chủ sẽ đưa ra quyết định sai. Nhưng mọi thứ đều có thể đúng, - bạn cần theo dõi số liệu thống kê. Để biết thêm thông tin chi tiết, hãy tham khảo sách về Transact-SQL hoặc MS SQL Server.
Tóm tắt
Cài đặt mặc định không cho phép sử dụng tất cả tiềm năng của phần cứng và hoạt động với tất cả các loại máy chủ. Trách nhiệm về cài đặt thuộc về quản trị viên. Thực tế là các sản phẩm của Microsoft có các chương trình cài đặt đơn giản, các tiện ích quản trị đồ họa và khả năng làm việc ngoại tuyến không có nghĩa là đây là một biến thể tối ưu.
Chúng tôi không coi các tùy chọn điều chỉnh cơ sở dữ liệu như vậy là tăng tốc phần cứng. Nếu tất cả các tùy chọn điều chỉnh đã hết, tốt hơn là bạn nên nghĩ đến việc nâng cấp, vì tăng tốc phần cứng ảnh hưởng tiêu cực đến độ tin cậy của hệ thống.
Điều quan trọng nhất là mọi tối ưu hóa máy chủ cơ sở dữ liệu hoặc bất kỳ nâng cấp nào sẽ không hữu ích nếu các truy vấn không được tối ưu hóa.