FBMonLogger
FBMonLogger hiện là một phần của HQbird Standard!
FBMonLogger là công cụ phân tích dữ liệu đầu ra của các bảng giám sát trong Firebird và tìm ra các vấn đề với truy vấn SQL chậm, các transaction được thiết kế sai (transaction chạy lâu, transaction có mức cô lập không chính xác, v.v.) và xác định các ứng dụng có vấn đề.
FBMonLogger có thể kết nối đến cơ sở dữ liệu Firebird có vấn đề về hiệu suất và xác định nguyên nhân gây chậm: đó là do một attachment người dùng nào đó, truy vấn SQL chậm hay transaction chạy lâu?
FBMonLogger hỗ trợ Firebird 2.1, 2.5 và 3.0 - đối với các phiên bản Firebird cũ hơn hoặc InterBase, vui lòng sử dụng FBScanner.
FBMonLogger có thể hiển thị cho bạn:
- Các attachment hàng đầu có số lượng thao tác IO cao nhất, đọc có chỉ mục và không có chỉ mục
- Các câu lệnh SQL hàng đầu có số lượng thao tác IO cao nhất, đọc có chỉ mục và không có chỉ mục
- Các transaction có vấn đề: transaction chạy lâu, transaction có mức cô lập sai, transaction đọc/ghi, và thông tin liên quan: thời điểm chúng bắt đầu, ứng dụng nào đã khởi tạo các transaction này, từ địa chỉ IP nào, v.v.
- Các attachment và câu lệnh có hoạt động dọn dẹp (garbage collection) nhiều nhất
- Tỷ lệ đọc/ghi, tỷ lệ INSERT/UPDATE/DELETE, và nhiều thông tin khác.
Sau khi kết nối đến cơ sở dữ liệu nơi bạn muốn tìm vấn đề về hiệu suất, cần thực hiện một số snapshot của các bảng giám sát - nhấp vào «Get Snapshot» để chụp snapshot.
Thống kê hiệu suất tổng hợp cho các attachment của người dùng
Ở màn hình đầu tiên, chúng ta có thể thấy thống kê tổng hợp cho các kết nối cơ sở dữ liệu và xác định các kết nối có vấn đề lớn nhất:
Đọc tuần tự / Đọc có chỉ mục
“Đọc tuần tự / Đọc có chỉ mục” hiển thị cho chúng ta tỷ lệ tổng thể giữa đọc tuần tự (không có chỉ mục) và đọc có chỉ mục trong ứng dụng. Thông thường, số lần đọc không có chỉ mục nên ở mức thấp, vì vậy tỷ lệ phần trăm lớn của đọc tuần tự là dấu hiệu cho thấy nhiều truy vấn SQL có kế hoạch thực thi NATURAL và chúng có thể là nguyên nhân gây ra thời gian phản hồi chậm.
Nhấp vào bản ghi trong «TOP attachments: sequential/indexed reads» sẽ đưa bạn đến tab «Attachments», nơi bạn có thể xem chi tiết hơn về Attachment, sau đó chuyển đến tab «Transactions» hoặc «Statements», nơi bạn sẽ thấy các transaction và attachment được liên kết với attachment đã chọn (nếu dấu kiểm «Link to selected attachment» được bật, nếu không, tất cả transaction/câu lệnh cho tất cả attachment sẽ được hiển thị).
Chi tiết ghi
«Write details» cung cấp cho bạn tổng quan về các thao tác ghi: tỷ lệ giữa INSERT/UPDATE/DELETE trong tất cả các attachment của cơ sở dữ liệu. Trong bảng các ứng dụng ghi nhiều nhất, bạn có thể thấy các attachment có số lượng thao tác ghi lớn nhất. Điều này hữu ích để xác định các ứng dụng hoặc mô-đun phần mềm thực hiện quá nhiều thao tác update hoặc delete (là các thao tác nguy hiểm nhất về mặt dọn dẹp garbage collection).
Chi tiết dọn dẹp garbage collection
Các thao tác dọn dẹp garbage collection có nghĩa là gì?
- Purge - engine loại bỏ các backversion, chỉ còn phiên bản chính trong cơ sở dữ liệu.
- Expunge - cả phiên bản chính và tất cả backversion đều bị xóa.
- Backout - chỉ xóa phiên bản chính (do rollback).
Thông thường, chúng ta có thể liên kết purge với thao tác UPDATE, Expunge với DELETE và Backout với rollback của INSERT hoặc UPDATE. Nhiều backout có thể có nghĩa là có vấn đề với việc quản lý transaction trong ứng dụng.
Sử dụng bộ nhớ
Biểu đồ «Memory usage» hiển thị tổng bộ nhớ được sử dụng bởi tất cả các attachment đang hoạt động hiện tại và mức đỉnh bộ nhớ được cấp phát cho chúng trong quá khứ.
Danh sách các attachment hàng đầu theo mức sử dụng bộ nhớ hiển thị cho chúng ta những ứng dụng tiêu thụ bộ nhớ lớn nhất trong số các attachment của bạn. Điều này hữu ích để tìm các ứng dụng hoặc mô-đun phần mềm sử dụng bộ nhớ quá mức.
Thống kê hiệu suất tổng hợp cho các câu lệnh
Ở tab thứ hai, bạn có thể tìm thấy thống kê hiệu suất tổng hợp cho các câu lệnh. Thống kê này phản ánh tốt hơn tình trạng tức thời trong cơ sở dữ liệu - vì các bảng giám sát thu thập thông tin từ khi bắt đầu vòng đời của mỗi đối tượng, các câu lệnh bạn thấy ở đây là những câu lệnh đang chạy tại thời điểm snapshot được chụp.
Đọc tuần tự / Đọc có chỉ mục
Trong danh sách này, chúng ta có thể thấy các câu lệnh hàng đầu thực hiện nhiều thao tác đọc tuần tự từ cơ sở dữ liệu. Thông thường, các câu lệnh như vậy cần được tinh chỉnh SQL - thông qua việc tinh chỉnh chỉ mục hoặc thiết kế lại truy vấn SQL.
Để tinh chỉnh truy vấn, hãy kiểm tra kế hoạch thực thi của nó: thông thường có thể cải thiện tốc độ truy vấn bằng cách loại bỏ NATURAL trong các kế hoạch với chỉ mục mới hoặc thiết kế lại truy vấn. Nhấp vào câu lệnh trong danh sách này để mở tab «Statements», nơi bạn có thể tìm thấy thêm chi tiết về câu lệnh đã chọn và chuyển đến transaction hoặc attachment liên quan.
Đọc trang/ghi trang
Biểu đồ và danh sách này hiển thị thông tin ngắn gọn về các câu lệnh hàng đầu thực hiện nhiều thao tác đọc - điều này có nghĩa là chúng tiêu thụ IO đáng kể và có thể ảnh hưởng đến hiệu suất của các truy vấn khác. Các câu lệnh SQL có giá trị đỉnh cần được kiểm tra cẩn thận để đảm bảo hiệu suất tối ưu.
Chi tiết ghi cho các câu lệnh
Trong biểu đồ này, bạn có thể thấy các câu lệnh ghi đang thực hiện điều gì tại thời điểm snapshot của các bảng giám sát được chụp và xác định các UPDATE và DELETE đã tạo ra nhiều thay đổi trong cơ sở dữ liệu.
Chi tiết dọn dẹp garbage collection cho các câu lệnh
Trong biểu đồ này, chúng ta có thể thấy có bao nhiêu thao tác dọn dẹp garbage collection đã được thực hiện bởi các câu lệnh đang chạy tại thời điểm snapshot.
Sử dụng bộ nhớ cho các câu lệnh
Không giống như thống kê sử dụng bộ nhớ tổng hợp cho attachment, mức sử dụng bộ nhớ của câu lệnh có thể hiển thị cho chúng ta danh sách các câu lệnh cụ thể đang tiêu thụ nhiều bộ nhớ tại thời điểm đó.
Attachments
Tab thứ ba là «Attachments». Bạn có thể mở tab này trực tiếp để chuyển đến đó bằng cách nhấp vào một trong các bản ghi tại «Aggregated performance statistics».
Attachments hiển thị danh sách người dùng kết nối đến cơ sở dữ liệu Firebird, với nhiều chi tiết hữu ích: USER và ROLE của attachment, thời gian bắt đầu và ID của attachment, có bật dọn dẹp garbage collection cho attachment hay không, tên của tiến trình từ xa đã thiết lập attachment, và một số bộ đếm hiệu suất tích lũy cho attachment: số lần đọc tuần tự [được thực hiện bởi attachment kể từ khi bắt đầu], số lần đọc có chỉ mục, số lần insert, update và delete, cũng như số lần backout, purge và expunge của bản ghi.
Theo mặc định, một số cột của attachment bị tắt để chỉ hiển thị thông tin quan trọng nhất.
Tất nhiên, mỗi khi bạn nhấp vào attachment, bạn có thể chuyển đến các transaction đang chạy bên trong nó, sau đó đến các câu lệnh. Có một hộp kiểm ở góc trên bên trái của tab Transactions và Statements, điều khiển hành vi này - khi được chọn, chỉ các transaction và câu lệnh được đánh dấu bởi ID attachment đã chọn mới được hiển thị.
Transactions
Tab «Transactions» hiển thị các transaction đang hoạt động tại thời điểm snapshot được chụp. Nếu hộp kiểm «Link to selected attachment» được bật, chỉ các transaction cho attachment đã chọn mới được hiển thị, nếu không, tất cả các transaction đều được hiển thị.
Một trong những đặc điểm quan trọng nhất là vòng đời của transaction: vì Firebird được thiết kế để hoạt động với các transaction ghi ngắn, điều quan trọng là phải giữ chúng càng ngắn càng tốt. FBMonLogger làm nổi bật các transaction có chế độ cô lập và cài đặt đọc-ghi giữ Oldest Active transaction và do đó khiến các phiên bản bản ghi quá mức không được xóa. Nếu bạn thấy một transaction như vậy và nó đã bắt đầu từ lâu, điều đó có nghĩa là nó có thể chịu trách nhiệm cho việc giữ quá nhiều phiên bản bản ghi.
Sắp xếp theo cột «started at» và tìm các transaction cũ, được đánh dấu màu đỏ: tất cả các transaction ghi được và các snapshot chỉ đọc đều giữ Oldest Active Transaction và khiến các phiên bản bản ghi quá mức bị giữ lại. Xác định nơi các transaction này bắt đầu (nhấp chuột phải và chọn «View parent attachment») và sửa mã của bạn để commit transaction này sớm hơn.
Statements
Tab «Statements» hiển thị các câu lệnh đang hoạt động tại thời điểm snapshot: nếu bạn cần bắt tất cả các câu lệnh, nên sử dụng FBPerfMon hoặc FBScanner (tất cả các công cụ này đều là một phần của IBSurgeon Optimization Pack).
Nếu «Link to selected attachment» được bật, chỉ các câu lệnh cho attachment cụ thể mới được hiển thị, nếu không, tất cả các câu lệnh đang hoạt động đều có trong danh sách.
Một số câu lệnh không có ID transaction liên quan (=0): các truy vấn này đã được chuẩn bị nhưng chưa được thực thi.




