PostgreSQLCung cấp các cơ sở để hỗ trợ tỷ lệ kèo bóng đá của máy chủ cơ sở dữ liệu. Điều này cho phép một tiện ích bên ngoài được gọi tại các điểm cụ thể trong mã và do đó thực hiện theo dõi.
Một số điểm thăm dò hoặc điểm theo dõi đã được chèn vào mã nguồn. Các đầu dò này được dự định sẽ được sử dụng bởi các nhà phát triển và quản trị viên cơ sở dữ liệu.PostgreSQL; người dùng cần nói rõ ràng với tập tỷ lệ kèo bóng đánh cấu hình để cung cấp các đầu dò.
Hiện tại,DTRACETiện ích được hỗ trợ, tại thời điểm viết bài này, có sẵn trên Solaris, MacOS, FreeBSD, NetBSD và Oracle Linux. TheSystemTapDự án cho Linux cung cấp tương đương DTRACE và cũng có thể được sử dụng. Hỗ trợ các tiện ích theo dõi động khác là về mặt lý thuyết bằng cách thay đổi các định nghĩa cho các macro trongSRC/bao gồm/Utils/Probes.h
.
Theo mặc định, các đầu dò không khả dụng, vì vậy bạn sẽ cần phải nói rõ ràng với tập tỷ lệ kèo bóng đánh cấu hình để cung cấp các đầu dò trongPostgreSQL. Để bao gồm hỗ trợ DTRACE Chỉ định--Enable-dtrace
Để cấu hình. Nhìn thấyPhần 17.3.3.6Để biết thêm thông tin.
Một số đầu dò tiêu chuẩn được cung cấp trong mã nguồn, như trongBảng 28.48;Bảng 28,49Hiển thị các loại được sử dụng trong các đầu dò. Nhiều đầu dò chắc chắn có thể được thêm vào để tăng cườngPostgreSQL
Bảng 28.48. Các đầu dò DTRACE tích hợp
tên | tham số | Mô tả |
---|---|---|
giao dịch-khởi động |
(LocalTransactionId) |
Đầu dò tỷ lệ kèo bóng đá vào đầu một giao dịch mới. arg0 là id giao dịch. |
giao dịch-commit |
(LocalTransactionId) |
Đầu dò bắn tỷ lệ kèo bóng đá giao dịch hoàn thành thành công. arg0 là id giao dịch. |
Giao dịch-Abort |
(LocalTransactionId) |
Đầu dò bắn tỷ lệ kèo bóng đá một giao dịch hoàn thành không thành công. arg0 là id giao dịch. |
Query-Start |
(const char *) |
Đầu dò bắn tỷ lệ kèo bóng đá xử lý truy vấn được bắt đầu. arg0 là chuỗi truy vấn. |
tỷ lệ kèo bóng đá vấn-Done |
(const char *) |
Đầu dò bắn tỷ lệ kèo bóng đá xử lý hoàn tất truy vấn. arg0 là chuỗi truy vấn. |
Query-Parse-Start |
(const char *) |
Đầu dò bắn tỷ lệ kèo bóng đá phân tích cú pháp truy vấn được bắt đầu. arg0 là chuỗi truy vấn. |
Query-parse-Done |
(const char *) |
Đầu dò bắn tỷ lệ kèo bóng đá phân tích cú pháp truy vấn hoàn tất. arg0 là chuỗi truy vấn. |
Query-rewrite-start |
(const char *) |
Đầu dò bắn tỷ lệ kèo bóng đá viết lại truy vấn được bắt đầu. arg0 là chuỗi truy vấn. |
Query-rewrite-Done |
(const char *) |
Đầu dò bắn tỷ lệ kèo bóng đá viết lại truy vấn hoàn tất. arg0 là chuỗi truy vấn. |
Query-Plan-Start |
() |
Đầu dò bắn tỷ lệ kèo bóng đá lập kế hoạch truy vấn được bắt đầu. |
Query-Plan-Done |
() |
Đầu dò bắn tỷ lệ kèo bóng đá lập kế hoạch truy vấn hoàn tất. |
Query-Execute-Start |
() |
Đầu dò bắn tỷ lệ kèo bóng đá thực hiện truy vấn được bắt đầu. |
Query-Execute-Done |
() |
Đầu dò bắn tỷ lệ kèo bóng đá thực hiện truy vấn hoàn tất. |
Statement-Status |
(const char *) |
Đầu dò tỷ lệ kèo bóng đá bất cứ lúc nào quá trình máy chủ cập nhậtpg_stat_activity .trạng thái . arg0 là chuỗi trạng thái mới. |
điểm kiểm tra-khởi đầu |
(int) |
Đầu dò bắn tỷ lệ kèo bóng đá điểm kiểm tra được bắt đầu. Arg0 giữ các cờ bitwise được sử dụng để phân biệt các loại điểm kiểm tra khác nhau, chẳng hạn như tắt máy, ngay lập tức hoặc lực. |
Checkpoint-Done |
(int, int, int, int, int) |
Đầu dò bắn tỷ lệ kèo bóng đá hoàn thành điểm kiểm tra. (Các đầu dò được liệt kê tiếp theo trong chuỗi trong quá trình xử lý điểm kiểm tra.) Arg0 là số lượng bộ đệm được viết. |
CLOG-Checkpoint-Start |
(bool) |
Đầu dò bắn tỷ lệ kèo bóng đá phần tắc của điểm kiểm tra được bắt đầu. arg0 đúng với điểm kiểm tra bình thường, sai cho điểm kiểm tra tắt. |
CLOG-Checkpoint-Done |
(bool) |
Đầu dò bắn tỷ lệ kèo bóng đá phần tắc của điểm kiểm tra hoàn tất. arg0 có cùng ý nghĩa vớiCLOG-Checkpoint-Start . |
Subtrans-Checkpoint-Start |
(bool) |
Đầu dò bắn tỷ lệ kèo bóng đá phần phụ của điểm kiểm tra được bắt đầu. arg0 đúng với điểm kiểm tra bình thường, sai cho điểm kiểm tra tắt. |
Subtrans-Checkpoint-Done |
(bool) |
Đầu dò bắn tỷ lệ kèo bóng đá phần phụ của điểm kiểm tra hoàn tất. arg0 có cùng ý nghĩa vớiSubtrans-Checkpoint-Start . |
Multixact-Checkpoint-Start |
(bool) |
Đầu dò bắn tỷ lệ kèo bóng đá phần multixact của điểm kiểm tra được bắt đầu. arg0 đúng với điểm kiểm tra bình thường, sai cho điểm kiểm tra tắt. |
Multixact-Checkpoint-Done |
(bool) |
Đầu dò bắn tỷ lệ kèo bóng đá phần multixact của điểm kiểm tra hoàn tất. arg0 có cùng ý nghĩa vớiMultixact-Checkpoint-Start . |
Buffer-Checkpoint-Start |
(int) |
Đầu dò bắn tỷ lệ kèo bóng đá phần viết bộ đệm của điểm kiểm tra được bắt đầu. Arg0 giữ các cờ bitwise được sử dụng để phân biệt các loại điểm kiểm tra khác nhau, chẳng hạn như tắt máy, ngay lập tức hoặc lực. |
Buffer-sync-start |
(int, int) |
Đầu dò bắn tỷ lệ kèo bóng đá chúng ta bắt đầu viết bộ đệm bẩn trong quá trình kiểm tra (sau tỷ lệ kèo bóng đá xác định bộ đệm nào phải được viết). Arg0 là tổng số bộ đệm. |
Buffer-sync-written |
(int) |
Đầu dò tỷ lệ kèo bóng đá sau mỗi bộ đệm được viết trong quá trình kiểm tra. arg0 là số ID của bộ đệm. |
Buffer-sync-Done |
(int, int, int) |
Đầu dò bắn tỷ lệ kèo bóng đá tất cả các bộ đệm bẩn đã được viết. Arg0 là tổng số bộ đệm.Buffer-sync-start ); Bất kỳ sự khác biệt nào phản ánh các quá trình khác có bộ đệm trong quá trình kiểm tra. |
Buffer-Checkpoint-Sync-Start |
() |
21954_22070 |
Buffer-Checkpoint-Done |
() |
Đầu dò bắn tỷ lệ kèo bóng đá đồng bộ hóa bộ đệm với đĩa hoàn tất. |
Twophase-Checkpoint-Start |
() |
Đầu dò bắn tỷ lệ kèo bóng đá phần hai pha của điểm kiểm tra được bắt đầu. |
Twophase-Checkpoint-Done |
() |
Đầu dò bắn tỷ lệ kèo bóng đá phần hai pha của điểm kiểm tra hoàn tất. |
Buffer-extend-start |
(forknumber, blocknumber, oid, oid, oid, int, unsign int) |
Đầu dò bắn tỷ lệ kèo bóng đá một phần mở rộng quan hệ bắt đầu. Arg0 chứa nĩa sẽ được mở rộng. (-1) cho bộ đệm được chia sẻ. Arg5 là số khối mà người gọi muốn mở rộng theo. |
Buffer-Extend-Done |
|
Đầu dò bắn tỷ lệ kèo bóng đá hoàn thành phần mở rộng quan hệ. Arg0 chứa nĩa sẽ được mở rộng. (-1) cho bộ đệm được chia sẻ. Arg5 là số khối mà mối quan hệ được mở rộng bởi, con số này có thể nhỏ hơn số trongBuffer-extend-start Do các ràng buộc tài nguyên. Arg6 chứa khối khối của khối mới đầu tiên. |
Buffer-read-start |
(forknumber, blocknumber, oid, oid, oid, int) |
Đầu dò bắn tỷ lệ kèo bóng đá bắt đầu đọc bộ đệm. Arg0 và Arg1 chứa nĩa và số khối của trang. (-1) cho bộ đệm được chia sẻ. |
Buffer-Read-Done |
(forknumber, blocknumber, oid, oid, oid, int, bool) |
Đầu dò bắn tỷ lệ kèo bóng đá bộ đệm đọc hoàn tất. Arg0 và Arg1 chứa nĩa và số khối của trang. (-1) cho bộ đệm được chia sẻ. Arg6 là đúng nếu bộ đệm được tỷ lệ kèo bóng đá thấy trong nhóm, Sai nếu không. |
bộ đệm-flush-start |
(forknumber, blocknumber, oid, oid, oid) |
Đầu dò bắn trước tỷ lệ kèo bóng đá đưa ra bất kỳ yêu cầu ghi nào cho bộ đệm chung. Arg0 và Arg1 chứa nĩa và số khối của trang. |
Buffer-Flush-Done |
(forknumber, blocknumber, oid, oid, oid) |
Đầu dò bắn tỷ lệ kèo bóng đá yêu cầu ghi hoàn tất. (Lưu ý rằng điều này chỉ phản ánh thời gian chuyển dữ liệu cho kernel; nó thường chưa được ghi vào đĩa.) Các đối số giống như đối vớibộ đệm-flush-start . |
Wal-Buffer-Write-Dirty-Start |
() |
26733_26896Wal_buffersquá nhỏ.) |
Wal-Buffer-Write-Dast-Done |
() |
Đầu dò bắn tỷ lệ kèo bóng đá hoàn thành bộ đệm wal bẩn hoàn tất. |
Wal-Insert |
(Char không dấu, Char không dấu) |
Đầu dò bắn tỷ lệ kèo bóng đá bản ghi WAL được chèn. Arg0 là Trình quản lý tài nguyên (RMID) cho hồ sơ. |
Wal-Switch |
() |
Đầu dò bắn tỷ lệ kèo bóng đá yêu cầu chuyển đổi phân đoạn Wal. |
smgr-md-read-start |
(forknumber, blocknumber, oid, oid, oid, int) |
Đầu dò bắn tỷ lệ kèo bóng đá bắt đầu đọc một khối từ một mối quan hệ. Arg0 và Arg1 chứa nĩa và số khối của trang. (-1) cho bộ đệm được chia sẻ. |
smgr-md-read-Done |
(forknumber, blocknumber, oid, oid, oid, int, int, int) |
Đầu dò bắn tỷ lệ kèo bóng đá hoàn tất việc đọc khối. Arg0 và Arg1 chứa nĩa và số khối của trang. (-1) cho bộ đệm được chia sẻ. Arg6 là số byte thực sự đọc, trong tỷ lệ kèo bóng đá Arg7 là số được yêu cầu (nếu những điều này khác nhau, nó chỉ ra sự cố). |
smgr-md-write-start |
(forknumber, blocknumber, oid, oid, oid, int) |
Đầu dò bắn tỷ lệ kèo bóng đá bắt đầu viết một khối vào một mối quan hệ. Arg0 và Arg1 chứa nĩa và số khối của trang.không hợp lệ (-1) cho bộ đệm được chia sẻ. |
smgr-md-write-Done |
(forknumber, blocknumber, oid, oid, oid, int, int, int) |
Đầu dò bắn tỷ lệ kèo bóng đá ghi khối hoàn tất. Arg0 và Arg1 chứa nĩa và số khối của trang.không hợp lệ (-1) cho bộ đệm được chia sẻ. Arg6 là số byte thực sự được viết, trong tỷ lệ kèo bóng đá Arg7 là số được yêu cầu (nếu những điều này khác nhau, nó chỉ ra sự cố). |
Sắp xếp bắt đầu |
(int, bool, int, int, bool, int) |
Đầu dò bắn tỷ lệ kèo bóng đá hoạt động sắp xếp được bắt đầu. Arg0 chỉ ra các loại, chỉ mục hoặc sắp xếp mốc.0 , Công nhân song song tỷ lệ kèo bóng đá1 hoặc lãnh đạo song song tỷ lệ kèo bóng đá2 . |
Sort-Done |
(bool, dài) |
Đầu dò bắn tỷ lệ kèo bóng đá sắp xếp hoàn thành. Arg0 đúng với loại bên ngoài, sai cho loại nội bộ. |
lwlock-acquire |
(char *, lwlockmode) |
Đầu dò bắn tỷ lệ kèo bóng đá có được LWLOCK. Arg0 là đợt của Lwlock. |
LWLOCK-RELEASE |
(char *) |
Đầu dò bắn tỷ lệ kèo bóng đá LWLOCK đã được phát hành (nhưng lưu ý rằng bất kỳ người phục vụ được phát hành nào chưa được đánh thức). arg0 là đợt của lwlock. |
lwlock-wait-start |
(char *, lwlockmode) |
Đầu dò bắn tỷ lệ kèo bóng đá không có LWLOCK ngay lập tức và quy trình máy chủ đã bắt đầu chờ khóa có sẵn. Arg0 là đợt của Lwlock. |
LWLOCK-WAIT-DONE |
(char *, lwlockmode) |
Đầu dò bắn tỷ lệ kèo bóng đá một quy trình máy chủ đã được giải phóng khỏi sự chờ đợi của nó cho một LWLOCK (nó chưa thực sự có khóa). Arg0 là đợt của Lwlock. |
LWLOCK-CONDACQUIRE |
(char *, lwlockmode) |
Đầu dò bắn tỷ lệ kèo bóng đá LWLOCK có được thành công tỷ lệ kèo bóng đá người gọi chỉ định không chờ đợi. Arg0 là đợt của Lwlock. |
LWLOCK-CONDACQUIRE-Fail |
(char *, lwlockmode) |
Đầu dò bắn tỷ lệ kèo bóng đá LWLOCK không có được thành công tỷ lệ kèo bóng đá người gọi chỉ định không chờ đợi. Arg0 là đợt của Lwlock. |
khóa-wait-start |
|
Đầu dò bắn tỷ lệ kèo bóng đá yêu cầu khóa nặng (khóa LMGR) đã bắt đầu chờ vì khóa không có sẵn. Arg0 đến Arg3 là các trường thẻ xác định đối tượng bị khóa. |
Lock-Wait-Done |
|
Đầu dò bắn tỷ lệ kèo bóng đá yêu cầu khóa nặng (khóa LMGR) đã hoàn thành việc chờ đợi (tức là, đã có được khóa). Các đối số giống như đối vớikhóa-wait-start . |
Holdlock-Found |
() |
Đầu dò bắn tỷ lệ kèo bóng đá bị bế tắc bởi máy dò bế tắc. |
Bảng 28,49. Các loại được xác định được sử dụng trong tham số đầu dò
loại | Định nghĩa |
---|---|
LocalTransactionId |
unsign int |
lwlockmode |
int |
Lockmode |
int |
BlockNumber |
unsign int |
oid |
unsign int |
Forknumber |
int |
bool |
Char không dấu |
Ví dụ dưới đây cho thấy tập tỷ lệ kèo bóng đánh DTRACE để phân tích số lượng giao dịch trong hệ thống, như là một giải pháp thay thế cho ảnh chụp nhanhPG_STAT_DATABASE
Trước và sau tỷ lệ kèo bóng đá kiểm tra hiệu suất:
#!/Usr/sbin/dtrace -Qs
tỷ lệ kèo bóng đá được thực thi, ví dụ d tập lệnh cho đầu ra như:
# ./txn_count.d `pGrep -n postgres` hoặc.
SystemTap sử dụng một ký hiệu khác cho các tập tỷ lệ kèo bóng đánh theo dõi so với DTRACE, mặc dù các điểm theo dõi cơ bản là tương thích. Một điểm đáng chú ý là tại bài viết này, các tập tỷ lệ kèo bóng đánh SystemTap phải tham chiếu tên thăm dò bằng cách sử dụng dấu gạch dưới kép thay cho dấu gạch nối.
Bạn nên nhớ rằng các tập lệnh DTRACE cần được viết và gỡ lỗi cẩn thận, nếu không thông tin theo dõi được thu thập có thể là vô nghĩa. Trong hầu hết các trường hợp mà các vấn đề được tỷ lệ kèo bóng đá thấy, đó là thiết bị có lỗi, không phải là hệ thống cơ bản.
Các đầu dò mới có thể được xác định trong mã bất cứ nơi nào nhà phát triển mong muốn, mặc dù điều này sẽ yêu cầu tái hợp. Dưới đây là các bước để chèn các đầu dò mới:
Quyết định tên và dữ liệu thăm dò được cung cấp thông qua các đầu dò
Thêm định nghĩa đầu dò vàoSRC/Backend/Utils/Probes.D
Bao gồmpg_trace.h
Nếu nó chưa có trong (các) mô -đun chứa các điểm thăm dò và chènTrace_Postgresql
Macro thăm dò tại các vị trí mong muốn trong mã nguồn
Recompile và xác minh rằng các đầu dò mới có sẵn
Ví dụ:Đây là một ví dụ về cách bạn sẽ thêm một đầu dò để theo dõi tất cả các giao dịch mới theo ID giao dịch.
Quyết định rằng đầu dò sẽ được đặt têngiao dịch-khởi đầu
và yêu cầu tham số loạiLocalTransactionID
Thêm định nghĩa đầu dò vàosrc/backend/utils/probes.d
:
Giao dịch thăm dò artart (localTransactionId);
Lưu ý việc sử dụng gạch chân kép trong tên thăm dò. Trong tập tỷ lệ kèo bóng đánh DTRACE bằng cách sử dụng đầu dò, việc gạch chân kép cần được thay thế bằng dấu gạch nối, vì vậyGiao dịch-Bắt đầu
là tên để tài liệu cho người dùng.
Tại thời điểm biên dịch,Giao dịch
được chuyển đổi thành macro có tênTrace_Postgresql_Transaction_Start
(Lưu ý các dấu gạch dưới là độc thân ở đây), có sẵn bằng cách bao gồmpg_trace.h
. Thêm cuộc gọi macro vào vị trí thích hợp trong mã nguồn.
41498_41562
Sau tỷ lệ kèo bóng đá biên dịch lại và chạy nhị phân mới, hãy kiểm tra xem đầu dò mới được thêm vào của bạn có sẵn bằng cách thực hiện lệnh DTRACE sau không. Bạn sẽ thấy đầu ra tương tự:
# DTRACE -LN Giao dịch -Bắt đầu
Có một vài điều cần cẩn thận tỷ lệ kèo bóng đá thêm macro theo dõi vào mã C:
Bạn nên chăm sóc các loại dữ liệu được chỉ định cho các tham số của đầu dò phù hợp với các loại dữ liệu của các biến được sử dụng trong macro. Nếu không, bạn sẽ nhận được lỗi biên dịch.
Trên hầu hết các nền tảng, nếuPOSTGRESQLđược xây dựng với--Enable-dtrace
, Các đối số cho macro theo dõi sẽ được đánh giá bất cứ tỷ lệ kèo bóng đá nào điều tỷ lệ kèo bóng đáển đi qua macro,Ngay cả tỷ lệ kèo bóng đá không có dấu vết nào được thực hiện. Điều này thường không đáng lo ngại nếu bạn chỉ báo cáo các giá trị của một vài biến cục bộ.
if (trace_postgresql_transaction_start_enables ()))
Mỗi macro theo dõi có tương ứngĐã bật
Macro.
Nếu bạn thấy bất cứ điều gì trong tài liệu không chính xác, không khớpMẫu nàyĐể báo cáo vấn đề tài liệu.