Điều quan trọng là có thể xem xét toàn bộ kiến trúc ứng dụng của bạn, không chỉ các khía cạnh cụ thể của nó và hiểu cách các phần khác nhau kết nối với nhau. Khả năng quan sát được đặt lên hàng đầu, tiếp theo là khả năng quan sát.
Trong bài đăng này, chúng tôi sẽ đi sâu vào phần cơ sở dữ liệu trong kiến trúc của bạn để chỉ ra cách bạn có thể theo dõi và tối ưu hóa hiệu suất cơ sở dữ liệu của mình. Hầu hết các nguyên tắc sau đây đều được áp dụng, bất kể ngăn xếp của bạn là gì hoặc bạn có muốn theo dõi và tối ưu hóa hiệu suất cho PostgreSQL, MongoDB hay bất kỳ cơ sở dữ liệu nào khác hay không.
Tại sao nên theo dõi Hiệu suất Cơ sở dữ liệu?
Giả sử truy vấn rất chậm và ứng dụng của bạn phải đợi kết quả - khiến mọi thứ tạm dừng đối với người dùng cuối và / hoặc trong một phần ứng dụng của bạn.
Giống như khi tắc đường, một bộ phận có thể đứng yên do ảnh hưởng của điều gì đó đang diễn ra ở nơi khác. Nếu nhiều truy vấn mất quá nhiều thời gian để giải quyết, điều này có thể là do các truy vấn khác cản trở.
Mục tiêu của bạn là tìm ra nguyên nhân của vấn đề trước khi mọi thứ bắt đầu không thành công trong các phần khác của ứng dụng của bạn.
Bước tiếp theo là chủ động sử dụng giám sát để tối ưu hóa kiến trúc của bạn và xem cách bạn có thể làm cho mọi thứ nhanh hơn. Nhưng chúng ta đang tự làm chủ bản thân - hãy bắt đầu với bước 1:
Bước 1:Đo lường Hiệu suất Cơ sở dữ liệu Dụng cụ AKA
Giám sát cơ sở dữ liệu bắt đầu bằng việc đảm bảo bạn đo lường những điều đúng đắn:
-
Lỗi
-
Hiệu suất
-
phương tiện và phần trăm truy vấn thứ 90 thời lượng
-
tổng thông lượng - cung cấp cho bạn một cách khác để đặt trình kích hoạt / cờ khi thông lượng là vấn đề
May mắn thay, việc lấy dữ liệu đó đã được thực hiện cho bạn:Phần mềm APM của bạn có thể cho phép bạn định cấu hình những gì bạn muốn đo lường và đo lường. Nếu bạn sử dụng AppSignal, việc thu thập và tổng hợp dữ liệu sẽ diễn ra tự động mà không cần thiết lập nhiều. Chúng tôi đã thực hiện những công việc nặng nhọc giúp bạn!
Bước 2:Điểm bắt đầu - Tìm các truy vấn có tác động cao
Sau khi bạn có công cụ ứng dụng của mình và dữ liệu trong thế giới thực bắt đầu xuất hiện, bạn sẽ thấy các mẫu xuất hiện. Trên AppSignal, chúng tôi đã tạo các màn hình cho các yêu cầu API chậm nhất và các truy vấn chậm nhất trong phần 'Cải thiện' trong điều hướng:
Màn hình này sẽ cung cấp cho bạn một điểm khởi đầu tuyệt vời để tối ưu hóa. Theo mặc định, các truy vấn chậm được sắp xếp theo tác động. Chúng là những truy vấn mà bạn thường làm. Tác động là thông lượng x thời gian truy vấn trung bình.
Việc chuyển đổi giữa các cách sắp xếp này sẽ cho bạn ý tưởng về các truy vấn có khối lượng nhiều nhất, những truy vấn chậm nhất (nhưng có lẽ là những công việc nền sau một đêm mà bạn có thể dễ dàng bỏ qua) và những truy vấn có tác động mạnh nhất.
Bước phụ nhanh:Khắc phục một số truy vấn riêng lẻ
Giờ đây, bạn có thể tìm thấy một số truy vấn cần khắc phục.
Nếu bạn nhấp vào một truy vấn chậm, bạn sẽ thấy tất cả các chi tiết của nó ở bên phải, từ thông lượng và thời gian phản hồi cho truy vấn đến chính tên truy vấn:
Di chuột qua thời gian phản hồi ở mức cao nhất và sau đó bạn có thể phóng to bằng cách nhấp vào tùy chọn 'điều gì đã xảy ra ở đây'. Bạn sẽ thấy lỗi nào đã xảy ra tại thời điểm đó, trong mẫu đó và điều gì đã xảy ra trên máy chủ.
Chúng tôi đã làm cho nó hiển thị rất rõ ràng cho một mẫu chống cụ thể:N + 1. Mẫu N + 1 xảy ra khi truy vấn được thực thi cho mọi kết quả của truy vấn trước đó.
Số lượng truy vấn là N + 1, với N là số lượng truy vấn cho kết quả truy vấn đầu tiên. Nếu truy vấn ban đầu đó có một kết quả, N + 1 =2. Nếu nó có 1.000 kết quả, N + 1 =1.001 truy vấn. Bùng nổ.
Nếu các truy vấn tuân theo mô hình chống N + 1 thì đó là một sự tình cờ đáng mừng - chúng được gắn nhãn ở đây để bạn có thể nhanh chóng tìm thấy chúng:
Chúng tôi sẽ không đi sâu vào cách giải quyết chúng ở đây - chúng tôi đã viết một bài đăng trên blog riêng về N + 1 truy vấn.
Được rồi, bây giờ hãy giả sử chúng tôi đã khắc phục một số điều điên rồ và khi sửa lỗi, chúng tôi nhận thấy thời điểm chúng xảy ra và thời gian phản hồi tồi tệ nhất.
Bước 3: Tìm kiếm Quyết định về các mẫu - Điều gì sai?
Giám sát thường là để xem xét khi có sự cố. Nhưng một phần của sự phức tạp xung quanh việc giám sát là xác định những gì nên được coi là 'sai' cho thiết lập của bạn. Ngoài ra, bạn có muốn được cảnh báo bởi một cái bóng sau đó tự giải quyết hay bỏ lỡ một cái bóng không?
Hãy xem trung bình thông lượng và thời lượng truy vấn của bạn. Bạn sẽ có thể thiết lập điều đó trên phần mềm APM của mình. Nếu bạn đang sử dụngAppSignal để theo dõi Node.js và sử dụng PostgreSQL làm cơ sở dữ liệu của mình, hãy tự động tạo trang tổng quan với các chỉ số quan trọng nhất cho bạn.
Trang tổng quan node-postgres sẽ hiển thị dữ liệu như sau:
Nếu bạn muốn thiết lập điều này cho ứng dụng của mình, đây là một số bài đọc thêm.
Khi bạn chuyển đổi giữa các phạm vi thời gian khác nhau, bạn sẽ thấy đỉnh ngắn biến mất trong thời gian trung bình một giờ, cũng như các đỉnh cao nhất luôn tồn tại khi bạn thu nhỏ đến một phạm vi thời gian dài hơn.
Từ kinh nghiệm của chúng tôi khi thấy màn hình truy vấn chậm nhất, giờ đây chúng tôi đã có ý tưởng về thủ phạm chính và thời điểm chúng đạt đến đỉnh điểm.
Một số đỉnh ngắn nhất định về thông lượng có thể ổn - ví dụ:máy chủ có thể chạy các quy trình khác khiến truy vấn chậm.
Bạn sẽ muốn phóng to thời gian truy vấn kéo dài hơn hoặc thông lượng đạt đỉnh. Nhìn vào phân vị thứ 95 so với giá trị trung bình có thể cho bạn biết nếu mọi người hay chỉ một tập hợp nhỏ gặp phải một truy vấn chậm hơn, điều này đôi khi có thể giúp bạn hướng dẫn cách khắc phục.
Bước 4:Điều gì nên Giữ lại Giúp bạn thức dậy vào ban đêm?
Chúng tôi thường khuyên bạn nên bắt đầu từ mặt ồn ào của quang phổ:một số trình kích hoạt thiết lập để cảnh báo bạn trên một kênh không đánh thức bạn, nhưemail hoặc Slack, thay vì PagerDuty.
Tạo trình kích hoạt chỉ số tùy chỉnh trên chỉ số "event_duration" và chọn trường trung bình để nhận thông báo về thời gian truy vấn trung bình trong ứng dụng của bạn. Chọn phân vị thứ 90 hoặc 95 để nhận thông báo về các truy vấn chậm nhất mà bạn gặp phải.
Sau đó, định cấu hình các thẻ "nhóm" và "không gian tên" cho loại sự kiện mà bạn muốn được cảnh báo về và trong không gian tên nào. Ví dụ:"active_record" (Rails) hoặc "postgres" (Node.js) hoặc "ecto" (Elixir) cho nhóm và "web" hoặc "background" cho không gian tên:
Sau một tuần, bạn sẽ bắt đầu nhìn thấy một số mẫu và biết được trường hợp nào cần bạn chú ý và trường hợp nào thường tự giải quyết.
Sau đó, bạn có thể điều chỉnh bộ kích hoạt để bớt ồn ào hơn và thêm kênh khi bạn muốn được đánh thức bằng các cảnh báo cụ thể.
Bước 5:Hoàn tất việc Thiết lập Giám sát Cơ sở dữ liệu
Bây giờ, về lý thuyết, chúng tôi nên có một thiết lập giám sát tốt:các datacomes phù hợp, chúng tôi đã đặt các bộ kích hoạt để cảnh báo chúng tôi trước khi các bit chạm vào quạt và chúng tôi đã tìm ra một số thủ phạm lớn. Chúng ta nên làm, phải không?
Trên thực tế, việc sử dụng ứng dụng của bạn có thể tăng lên và tạo ra những nút thắt mới. Các thay đổi về mã tổ chức có thể ảnh hưởng đến cơ sở dữ liệu của bạn, khiến thời lượng tăng lên. Hoặc trường aparticular với trọng tải lớn sẽ kích hoạt một cái gì đó. Bạn chưa có kinh nghiệm như thế nào, các vấn đề mới và tắc nghẽn sẽ xảy ra.
Nhưng bạn có thể thấy thoải mái trên thực tế rằng, với thiết lập phù hợp, bạn sẽ được cảnh báo và biết cách đi sâu vào kiến trúc của mình để giải quyết các vấn đề này.
Và có lẽ bạn có thể tìm thấy niềm vui trong việc cải thiện các truy vấn lớn 'có tác động' trước khi bất kỳ ốc vít nào khác bị lỏng. Đó là những gì chúng tôi yêu thích nhất - đó, andstroopwafels.
Dùng thử AppSignal, tải Stroopwafels 🍪
Nói về stroopwafels, chúng tôi gửi chúng đến khắp nơi trên thế giới. Hãy dùng thử phần mềmAppSignal APM cho Ruby, Elixir và Node.js. Nếu bạn thiết lập bản dùng thử miễn phí và liên hệ với chúng tôi, chúng tôi sẽ gửi cho bạn một hộpstroopwafels trong nhà.