Hệ thống cơ sở dữ liệu là thành phần quan trọng trong chu kỳ của bất kỳ ứng dụng chạy thành công nào. Do đó, mọi tổ chức liên quan đến họ đều có nhiệm vụ đảm bảo hoạt động trơn tru của các DBM này thông qua việc giám sát nhất quán và xử lý những trở ngại nhỏ trước khi chúng leo thang thành những phức tạp lớn có thể dẫn đến thời gian ngừng hoạt động của ứng dụng hoặc hiệu suất chậm.
Bạn có thể hỏi làm thế nào bạn có thể biết liệu cơ sở dữ liệu có thực sự gặp sự cố trong khi nó đang hoạt động bình thường hay không? Đó là những gì chúng ta sẽ thảo luận trong bài viết này và chúng tôi gọi nó là điểm chuẩn. Đo điểm chuẩn về cơ bản là chạy một số tập hợp truy vấn với một số dữ liệu thử nghiệm cùng với một số cung cấp tài nguyên để xác định xem các thông số này có đáp ứng mức hiệu suất mong đợi hay không.
MongoDB không có phương pháp đo điểm chuẩn tiêu chuẩn, do đó chúng tôi cần giải quyết trong các truy vấn thử nghiệm trên phần cứng của riêng mình. Dù bạn cũng có thể nhận được những con số ấn tượng từ quá trình điểm chuẩn, bạn cần phải thận trọng vì đây có thể là một trường hợp khác khi chạy cơ sở dữ liệu của bạn với các truy vấn thực.
Ý tưởng đằng sau việc đo điểm chuẩn là để có được ý tưởng chung về cách các tùy chọn cấu hình khác nhau ảnh hưởng đến hiệu suất, cách bạn có thể điều chỉnh một số cấu hình này để có được hiệu suất tối đa và ước tính chi phí cải thiện việc triển khai này. Bên cạnh đó, các ứng dụng phát triển theo thời gian về lượng người dùng và có lẽ lượng dữ liệu được cung cấp do đó cần phải lập kế hoạch dung lượng trước thời điểm này. Sau khi nhận ra xu hướng gia tăng của dữ liệu, bạn cần thực hiện một số đo điểm chuẩn về cách bạn sẽ đáp ứng các yêu cầu của dữ liệu đang phát triển rộng lớn này.
Cân nhắc khi đo điểm chuẩn MongoDB
- Chọn khối lượng công việc là đại diện điển hình của các ứng dụng hiện đại ngày nay. Các ứng dụng hiện đại đang trở nên phức tạp hơn mỗi ngày và điều này được truyền xuống các cấu trúc dữ liệu. Điều này có nghĩa là, cách trình bày dữ liệu cũng đã thay đổi theo thời gian, chẳng hạn như lưu trữ các trường đơn giản vào các đối tượng và mảng. Không hoàn toàn dễ dàng để làm việc với dữ liệu này với các cấu hình cơ sở dữ liệu mặc định hoặc đúng hơn là dưới tiêu chuẩn vì nó có thể dẫn đến các vấn đề như độ trễ kém và các hoạt động thông lượng kém liên quan đến dữ liệu phức tạp. Do đó, khi chạy điểm chuẩn, bạn nên sử dụng dữ liệu thể hiện rõ ràng ứng dụng của bạn.
- Kiểm tra kỹ khi ghi. Luôn đảm bảo rằng tất cả các ghi dữ liệu được thực hiện theo cách không cho phép mất dữ liệu. Điều này nhằm cải thiện tính toàn vẹn của dữ liệu bằng cách đảm bảo dữ liệu nhất quán và có thể áp dụng được nhất là trong môi trường sản xuất.
- Sử dụng khối lượng dữ liệu đại diện cho bộ dữ liệu “dữ liệu lớn” chắc chắn sẽ vượt quá dung lượng RAM cho một nút riêng lẻ. Khi khối lượng công việc kiểm tra lớn, nó sẽ giúp bạn dự đoán được những kỳ vọng trong tương lai về hiệu suất cơ sở dữ liệu của mình, do đó hãy bắt đầu lập kế hoạch năng lực đủ sớm.
Phương pháp luận
Bài kiểm tra điểm chuẩn của chúng tôi sẽ liên quan đến một số dữ liệu vị trí lớn có thể được tải xuống từ đây và chúng tôi sẽ sử dụng phần mềm Robo3t để thao tác dữ liệu và thu thập thông tin chúng tôi cần. Tệp có hơn 500 tài liệu khá đủ cho thử nghiệm của chúng tôi. Chúng tôi đang sử dụng MongoDB phiên bản 4.0 trên máy chủ chuyên dụng Ubuntu Linux 12.04 Intel Xeon-SandyBridge E3-1270-Quadcore 3.4GHz với RAM 32 GB, đĩa quay Western Digital WD Caviar RE4 1TB và SSD Smart XceedIOPS 256 GB. Chúng tôi đã chèn 500 tài liệu đầu tiên.
Chúng tôi đã chạy các lệnh chèn bên dưới
db.getCollection('location').insertMany([<document1, <document2>…<document500>],{w:0})
db.getCollection('location').insertMany([<document1, <document2>…<document500>],{w:1})
Viết quan tâm
Mối quan tâm ghi mô tả mức xác nhận được yêu cầu từ MongoDB cho các hoạt động ghi trong trường hợp này vào MongoDB độc lập. Đối với hoạt động thông lượng cao, nếu giá trị này được đặt thành thấp thì các cuộc gọi ghi sẽ rất nhanh do đó giảm độ trễ của yêu cầu. Mặt khác, nếu giá trị được đặt cao, thì lệnh ghi sẽ chậm và do đó tăng độ trễ truy vấn. Một lời giải thích đơn giản cho điều này là khi giá trị thấp thì bạn không lo lắng về khả năng mất một số ghi trong trường hợp lỗi mongod, lỗi mạng hoặc lỗi hệ thống ẩn danh. Một hạn chế trong trường hợp này là bạn sẽ không chắc liệu những lần viết này có thành công hay không. Mặt khác, nếu mối quan tâm về việc ghi cao, sẽ có một lời nhắc xử lý lỗi và do đó việc ghi sẽ được ghi nhận. Xác nhận chỉ đơn giản là một biên nhận mà máy chủ đã chấp nhận ghi để xử lý.
Khi mối quan tâm về ghi được đặt cao Khi mối quan tâm về ghi được đặt ở mức thấpTrong thử nghiệm của chúng tôi, mối quan tâm ghi được đặt thành thấp dẫn đến truy vấn được thực thi trong thời gian tối thiểu là 0,013 mili giây và tối đa là 0,017 mili giây. Trong trường hợp này, tính năng ghi nhận cơ bản bị vô hiệu hóa nhưng người ta vẫn có thể nhận được thông tin về các ngoại lệ ổ cắm và bất kỳ lỗi mạng nào có thể đã được kích hoạt.
Khi mối quan tâm ghi được đặt cao, gần như mất gấp đôi thời gian để quay lại với thời gian thực hiện là tối thiểu 0,027ms và tối đa là 0,031ms. Việc xác nhận trong trường hợp này được đảm bảo nhưng không phải 100% nó đã đạt đến tạp chí đĩa. Trong trường hợp này, khả năng mất ghi là 50% do cửa sổ 100ms nơi tạp chí có thể không được lưu vào đĩa.
Viết nhật ký
Đây là một kỹ thuật đảm bảo không mất dữ liệu bằng cách cung cấp độ bền trong trường hợp hỏng hóc. Điều này đạt được thông qua ghi nhật ký ghi trước vào các tệp tạp chí trên đĩa. Nó hiệu quả nhất khi mối quan tâm ghi được đặt cao.
Đối với đĩa quay, thời gian thực hiện khi bật tính năng ghi nhật ký hơi cao, ví dụ:trong thử nghiệm của chúng tôi, khoảng 0,251 mili giây cho cùng một thao tác ở trên.
Tuy nhiên, thời gian thực thi đối với SSD thấp hơn một chút đối với cùng một lệnh. Trong thử nghiệm của chúng tôi, tốc độ đó là khoảng 0,207ms nhưng tùy thuộc vào bản chất của dữ liệu, đôi khi tốc độ này có thể nhanh hơn gấp 3 lần so với đĩa quay.
Khi tính năng ghi nhật ký được bật, nó xác nhận rằng các bài viết đã được thực hiện vào nhật ký và do đó đảm bảo độ bền của dữ liệu. Do đó, hoạt động ghi sẽ tồn tại sau khi tắt máy mongod và đảm bảo rằng hoạt động ghi được lâu bền.
Đối với hoạt động thông lượng cao, bạn có thể giảm một nửa thời gian truy vấn bằng cách đặt w =0. Ngược lại, nếu bạn cần chắc chắn rằng dữ liệu đã được ghi lại hoặc đúng hơn là trong trường hợp hoạt động trở lại sau khi bị lỗi, thì bạn cần đặt w =1.
Một số người trở thành DBA MongoDB - Đưa MongoDB vào Sản xuất Tìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và scale MongoDBTải xuống miễn phíNhân rộng
Việc xác nhận mối quan tâm về ghi có thể được kích hoạt cho nhiều nút là nút chính và một số nút phụ trong một tập hợp bản sao. Điều này sẽ được đặc trưng bởi số nguyên nào có giá trị đối với tham số ghi. Ví dụ, nếu w =3, Mongod phải đảm bảo rằng truy vấn nhận được một xác nhận từ nút chính và 2 nô lệ. Nếu bạn cố gắng đặt một giá trị lớn hơn một và nút vẫn chưa được sao chép, nó sẽ gây ra lỗi rằng máy chủ phải được sao chép.
Việc sao chép đi kèm với một khoảng lùi độ trễ để thời gian thực thi sẽ được tăng lên. Đối với truy vấn đơn giản ở trên nếu w =3, thì thời gian thực hiện trung bình tăng lên 270 mili giây. Yếu tố thúc đẩy điều này là phạm vi thời gian phản hồi giữa các nút bị ảnh hưởng bởi độ trễ mạng, chi phí liên lạc giữa 3 nút và tắc nghẽn. Bên cạnh đó, cả ba nút đều đợi nhau hoàn thành trước khi trả về kết quả. Do đó, trong triển khai sản xuất, bạn sẽ không cần phải liên quan đến quá nhiều nút nếu bạn muốn cải thiện hiệu suất. MongoDB chịu trách nhiệm chọn những nút nào sẽ được thừa nhận trừ khi có thông số kỹ thuật trong tệp cấu hình bằng cách sử dụng thẻ.
Đĩa quay so với Đĩa trạng thái rắn
Như đã đề cập ở trên, đĩa SSD khá nhanh hơn đĩa quay tùy thuộc vào dữ liệu liên quan. Đôi khi nó có thể nhanh hơn gấp 3 lần do đó xứng đáng được trả nếu cần. Tuy nhiên, sẽ đắt hơn khi sử dụng SSD, đặc biệt là khi xử lý dữ liệu lớn. MongoDB có điểm đáng khen là nó hỗ trợ lưu trữ cơ sở dữ liệu trong các thư mục có thể được gắn kết do đó có cơ hội sử dụng SSD. Sử dụng SSD và cho phép ghi nhật ký là một cách tối ưu hóa tuyệt vời.
Kết luận
Thử nghiệm chắc chắn rằng việc ghi lo ngại bị vô hiệu hóa dẫn đến giảm thời gian thực hiện truy vấn với rủi ro mất dữ liệu. Mặt khác, khi tính năng ghi được bật, thời gian thực thi gần như gấp 2 lần khi nó bị vô hiệu hóa nhưng có một khả năng đảm bảo rằng dữ liệu sẽ không bị mất. Bên cạnh đó, chúng tôi có thể biện minh rằng SSD nhanh hơn đĩa Spinning. Tuy nhiên, để đảm bảo độ bền của dữ liệu trong trường hợp hệ thống bị lỗi, bạn nên kích hoạt tính năng ghi. Khi bật mối quan tâm ghi cho một tập hợp bản sao, không đặt số lượng quá lớn để có thể dẫn đến một số hiệu suất bị giảm từ phần cuối ứng dụng.