Phiên bản được hỗ trợ:hiện tại(17)16 / 15 / 14 / 13
Phiên bản phát triển:18 / Devel
Phiên bản không được hỗ trợ:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2
Tài liệu này dành cho phiên bản không được hỗ trợ của PostgreSQL.
Bạn có thể muốn xem cùng một trang chohiện tạiPhiên bản hoặc một trong kèo kèo bóng đá euro phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

27.5. kèo bóng đá euro

PostgreSQLcung cấp kèo bóng đá euro cơ sở để hỗ trợ truy tìm độ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 kèo bóng đá euro điểm cụ thể trong mã và do đó thực hiện theo dõi.

Một số đầu dò hoặc điểm theo dõi đã được chèn vào mã nguồn. kèo bóng đá euro đầu dò này được dự định sẽ được sử dụng bởi kèo bóng đá euro 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 lệnh cấu hình để cung cấp kèo bóng đá euro đầ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ợ kèo bóng đá euro tiện ích theo dõi động khác là về mặt lý thuyết bằng cách thay đổi kèo bóng đá euro định nghĩa cho kèo bóng đá euro macro trongSRC/bao gồm/Utils/Probes.h.

27.5.1. Biên dịch để theo dõi động

Theo mặc định, kèo bóng đá euro đầ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 lệnh cấu hình để cung cấp kèo bóng đá euro đầu dò có sẵn trongPostgreSQL. Để bao gồm hỗ trợ DTRACE Chỉ định--Enable-dtraceĐể cấu hình. Nhìn thấyPhần 16.4Để biết thêm thông tin.

27.5.2. Đầu dò tích hợp

Một số đầu dò tiêu chuẩn được cung cấp trong mã nguồn, như trongBảng 27,28;Bảng 27,29Hiển thị kèo bóng đá euro loại được sử dụng trong kèo bóng đá euro đầu dò. Nhiều đầu dò chắc chắn có thể được thêm vào để tăng cườngPostgreSQL13007_13026

Bảng 27.28. kèo bóng đá euro đầu dò DTRACE tích hợp

tên tham số Mô tả
Giao dịch-khởi động (LocalTransactionId) Đầu dò bắn kèo bóng đá euro bắt đầu một giao dịch mới. arg0 là id giao dịch.
giao dịch-commit (LocalTransactionId) Đầu dò bắn kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro xử lý truy vấn được bắt đầu. arg0 là chuỗi truy vấn.
Truy vấn-Done (const char *) Đầu dò bắn kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro lập kế hoạch truy vấn được bắt đầu.
Query-Plan-Done () Đầu dò bắn kèo bóng đá euro lập kế hoạch truy vấn hoàn tất.
Query-Execute-Start () Đầu dò bắn kèo bóng đá euro thực hiện truy vấn được bắt đầu.
Query-Execute-Done () Đầu dò bắn kèo bóng đá euro thực hiện truy vấn hoàn tất.
Statement-Status (const char *) Đầu dò bắn 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-start (int) Đầu dò bắn khi điểm kiểm tra được bắt đầu. Arg0 giữ kèo bóng đá euro cờ bitwise được sử dụng để phân biệt kèo bóng đá euro 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 khi hoàn tất điểm kiểm tra. (kèo bóng đá euro đầ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 kèo bóng đá euro phần tắc của một đ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 kèo bóng đá euro phần tắc của một đ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 kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro phần đa điểm 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 kèo bóng đá euro 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 khi phần viết bộ đệm của điểm kiểm tra được bắt đầu. Arg0 giữ kèo bóng đá euro cờ bitwise được sử dụng để phân biệt kèo bóng đá euro 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 kèo bóng đá euro chúng ta bắt đầu viết bộ đệm bẩn trong quá trình kiểm tra (sau kèo bóng đá euro 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ò bắn 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 khi tất cả kèo bóng đá euro 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 kèo bóng đá euro quá trình khác có bộ đệm trong quá trình kiểm tra.
Buffer-Checkpoint-sync-start () Đầu dò bắn sau khi bộ đệm bẩn đã được ghi vào kernel và trước khi bắt đầu đưa ra kèo bóng đá euro yêu cầu FSYNC.
Buffer-Checkpoint-Done () Đầu dò bắn kèo bóng đá euro đồng bộ hóa bộ đệm với đĩa hoàn tất.
Twophase-Checkpoint-Start () Đầu dò bắn kèo bóng đá euro phần hai pha của điểm kiểm tra được bắt đầu.
Twophase-Checkpoint-Done () Đầu dò bắn kèo bóng đá euro phần hai pha của điểm kiểm tra hoàn tất.
Buffer-read-start (forknumber, blocknumber, oid, oid, oid, int, bool) Đầu dò bắn khi bắt đầu đọc bộ đệm. Arg0 và Arg1 chứa kèo bóng đá euro nĩa và số khối của trang (nhưng Arg1 sẽ là -1 nếu đây là yêu cầu mở rộng quan hệ).(-1) cho bộ đệm được chia sẻ. Arg6 đúng với yêu cầu mở rộng quan hệ, sai cho đọc bình thường.
Buffer-read-Done (forknumber, blocknumber, oid, oid, oid, int, bool, bool) Đầu dò bắn khi bộ đệm đọc hoàn tất. Arg0 và Arg1 chứa kèo bóng đá euro nĩa và số khối của trang (nếu đây là yêu cầu mở rộng quan hệ, ARG1 hiện chứa số khối của khối mới được thêm vào).(-1) cho bộ đệm được chia sẻ. Arg6 đúng với yêu cầu mở rộng quan hệ, sai cho đọc bình thường.
bộ đệm-flush-start (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn trước kèo bóng đá euro đưa ra bất kỳ yêu cầu ghi nào cho bộ đệm được chia sẻ. 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 khi 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.) kèo bóng đá euro đối số giống như đối vớibộ đệm-flush-start.
25637_25663 (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn kèo bóng đá euro một quá trình máy chủ bắt đầu viết bộ đệm bẩn. (Nếu điều này xảy ra thường xuyên, nó ngụ ý rằngShared_buffersquá nhỏ hoặc kèo bóng đá euro tham số điều khiển của người viết nền cần điều chỉnh.) Arg0 và Arg1 chứa kèo bóng đá euro nĩa và số khối của trang. arg2, arg3 và arg4 chứa không gian bảng, cơ sở dữ liệu và quan hệ oids xác định mối quan hệ.
Buffer-write-di-done (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn khi viết Buffer bẩn hoàn tất. kèo bóng đá euro đối số giống như đối với26561_26587.
Wal-Buffer-Write-Dirty-Start () Đầu dò kích hoạt kèo bóng đá euro một quá trình máy chủ bắt đầu viết bộ đệm wal bẩn vì không có không gian bộ đệm wal. (Nếu điều này xảy ra thường xuyên, nó ngụ ý rằngWal_buffersquá nhỏ.)
Wal-Buffer-Write-Died-Done () Đầu dò bắn kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro 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.không hợp lệ(-1) cho bộ đệm được chia sẻ.
smgr-md-read-done (forknumber, blocknumber, oid, oid, oid, int, int, int) Đầu dò bắn kèo bóng đá euro 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 kèo bóng đá euro 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 kèo bóng đá euro 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.(-1) cho bộ đệm được chia sẻ.
smgr-md-write-Done Đầu dò bắn kèo bóng đá euro hoàn thành một khối ghi. 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 viết, trong kèo bóng đá euro 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 khi hoạt động sắp xếp được bắt đầu. Arg0 chỉ ra kèo bóng đá euro loại, chỉ mục hoặc sắp xếp mốc.0, Công nhân song song kèo bóng đá euro1hoặc lãnh đạo song song kèo bóng đá euro2.
Sort-Done (bool, dài) Đầu dò bắn kèo bóng đá euro 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 kèo bóng đá euro có được LWLOCK. Arg0 là đợt của Lwlock.
LWLOCK-RELEASE (char *) Đầu dò bắn kèo bóng đá euro 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 kèo bóng đá euro LWLOCK không có sẵn 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ò kích hoạt kèo bóng đá euro 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 kèo bóng đá euro LWLOCK có được thành công kèo bóng đá euro 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 kèo bóng đá euro LWLOCK không có được thành công kèo bóng đá euro người gọi chỉ định không chờ đợi. Arg0 là đợt của Lwlock.
khóa-wait-start Đầu dò bắn khi 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à kèo bóng đá euro trường thẻ xác định đối tượng bị khóa.
Lock-Wait-Done Đầu dò bắn khi 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). kèo bóng đá euro đối số giống như đối vớikhóa-wait-start.
Holdlock-Found () Đầu dò bắn kèo bóng đá euro phát hiện bế tắc bởi máy dò bế tắc.

Bảng 27,29. kèo bóng đá euro 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

27.5.3. Sử dụng đầu dò

Ví dụ dưới đây cho thấy tập lệnh DTRACE để phân tích số lượng giao dịch trong hệ thống, thay thế cho ảnh chụp nhanhPG_STAT_DATABASETrước và sau kèo bóng đá euro kiểm tra hiệu suất:

#!/Usr/sbin/dtrace -Qs

kèo bóng đá euro được thực thi, tập lệnh D cho đầu ra như:

# ./txn_count.d `pGrep -n postgres` hoặc.

Lưu ý

SystemTap sử dụng một ký hiệu khác cho kèo bóng đá euro tập lệnh theo dõi so với DTRACE, mặc dù kèo bóng đá euro đ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, kèo bóng đá euro tập lệ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 kèo bóng đá euro 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 kèo bóng đá euro trường hợp mà kèo bóng đá euro vấn đề được tìm thấy, đó là thiết bị có lỗi, không phải là hệ thống cơ bản.

27.5.4. Xác định đầu dò mới

kèo bóng đá euro đầ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 biên dịch lại. Dưới đây là kèo bóng đá euro bước để chèn kèo bóng đá euro đầu dò mới:

  1. Quyết định tên và dữ liệu thăm dò được cung cấp thông qua kèo bóng đá euro đầu dò

  2. Thêm định nghĩa đầu dò vàoSRC/Backend/Utils/Probes.D

  3. Bao gồmpg_trace.hNếu nó chưa có trong (kèo bóng đá euro) mô -đun chứa kèo bóng đá euro điểm thăm dò và chènTrace_PostgresqlMacro thăm dò tại kèo bóng đá euro vị trí mong muốn trong mã nguồn

  4. Recompile và xác minh rằng kèo bóng đá euro đầ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ả kèo bóng đá euro giao dịch mới bằng ID giao dịch.

  1. Quyết định rằng đầu dò sẽ được đặt tênGiao dịch-khởi đầuvà yêu cầu tham số loạiLocalTransactionId

  2. 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 lệ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-khởi độnglà tên để tài liệu cho người dùng.

  3. Tại thời điểm biên dịch,Giao dịchđược chuyển đổi thành macro gọi làTrace_Postgresql_Transaction_Start(Lưu ý kèo bóng đá euro 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.

    41446_41510
  4. Sau kèo bóng đá euro 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 có có sẵn bằng cách thực thi lệnh DTRACE sau đây. 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 kèo bóng đá euro thêm macro theo dõi vào mã C:

  • Bạn nên chăm sóc kèo bóng đá euro loại dữ liệu được chỉ định cho kèo bóng đá euro tham số của đầu dò phù hợp với kèo bóng đá euro loại dữ liệu của kèo bóng đá euro 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 kèo bóng đá euro nền tảng, nếuPostgreSQLđược xây dựng với--Enable-dtrace, kèo bóng đá euro đối số cho macro theo dõi sẽ được đánh giá bất cứ khi nào điều khiển đi qua macro,Ngay cả kèo bóng đá euro 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 kèo bóng đá euro 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ậtMacro.