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ại8561_8642

27.4. kèo bóng đá hom nay

PostgreSQLcung cấp các cơ sở để hỗ trợ kèo bóng đá hom nay 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ố đầu dò hoặc điểm theo dõi đã được chèn vào mã nguồn. kèo bóng đá hom nay đầu dò này được dự định sẽ được sử dụng bởi kèo bóng đá hom nay nhà phát triển và quản trị viên cơ sở dữ liệu. Theo mặc định, kèo bóng đá hom nay đầu dò không được biên dịch thànhPostgreSQL; 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 đá hom nay đầ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, OS X, 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 đá hom nay 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 đá hom nay định nghĩa cho kèo bóng đá hom nay macro trongSRC/bao gồm/Utils/Probes.h.

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

10781_10910PostgreSQL. Để bao gồm hỗ trợ DTRACE Chỉ định--Enable-dtraceĐể cấu hình. Nhìn thấyPhần 15.4Để biết thêm thông tin.

27.4.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-18;Bảng 27-19Hiển thị kèo bóng đá hom nay loại được sử dụng trong kèo bóng đá hom nay đầu dò. Nhiều đầu dò chắc chắn có thể được thêm vào để tăng cườngPostgreSQL11575_11594

Bảng 27-18. kèo bóng đá hom nay đầu dò DTRACE tích hợp

tên tham số Mô tả
Giao dịch-Bắt đầu (LocalTransactionId) 11954_12035
giao dịch-commit (LocalTransactionId) Đầu dò bắn kèo bóng đá hom nay 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 đá hom nay 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 khi xử lý kèo bóng đá hom nay vấn được bắt đầu. arg0 là chuỗi kèo bóng đá hom nay vấn.
kèo bóng đá hom nay vấn-Done (const char *) Đầu dò bắn khi xử lý hoàn tất kèo bóng đá hom nay vấn. arg0 là chuỗi kèo bóng đá hom nay vấn.
Query-Parse-Start (const char *) Đầu dò bắn khi phân tích cú pháp kèo bóng đá hom nay vấn được bắt đầu. arg0 là chuỗi kèo bóng đá hom nay vấn.
Query-parse-Done (const char *) Đầu dò bắn khi phân tích cú pháp kèo bóng đá hom nay vấn hoàn tất. arg0 là chuỗi kèo bóng đá hom nay vấn.
Query-rewrite-start (const char *) Đầu dò bắn khi viết lại kèo bóng đá hom nay vấn được bắt đầu. arg0 là chuỗi kèo bóng đá hom nay vấn.
Query-rewrite-Done (const char *) Đầu dò bắn khi viết lại kèo bóng đá hom nay vấn hoàn tất. arg0 là chuỗi kèo bóng đá hom nay vấn.
Query-Plan-Start () Đầu dò bắn khi lập kế hoạch kèo bóng đá hom nay vấn được bắt đầu.
Query-Plan-Done () Đầu dò bắn khi lập kế hoạch kèo bóng đá hom nay vấn hoàn tất.
Query-Execute-Start () Đầu dò bắn khi thực hiện kèo bóng đá hom nay vấn được bắt đầu.
Query-Execute-Done () Đầu dò bắn khi thực hiện kèo bóng đá hom nay 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.13960_13968. 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 đá hom nay cờ bitwise được sử dụng để phân biệt kèo bóng đá hom nay 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 đá hom nay đầ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. Arg1 là tổng số bộ đệm. arg2, arg3 và arg4 chứa số lượng tệp XLOG được thêm, xóa và tái chế tương ứng.
CLOG-Checkpoint-Start (bool) Đầu dò bắn kèo bóng đá hom nay 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.
14821_14843 (bool) Đầu dò bắn kèo bóng đá hom nay phần tắc của điểm kiểm tra hoàn tất. arg0 có ý nghĩa tương tự như đối với clog-checkpoint-start.
Subtrans-Checkpoint-Start (bool) Đầu dò bắn kèo bóng đá hom nay 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 đá hom nay phần phụ của điểm kiểm tra hoàn tất. Arg0 có ý nghĩa tương tự như đối với Subtrans-Checkpoint-Start.
15422_15450 (bool) Đầu dò bắn kèo bóng đá hom nay 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 kèo bóng đá hom nay phần multixact của điểm kiểm tra hoàn tất. Arg0 có ý nghĩa tương tự như đối với Multixact-Checkpoint-Start.
Buffer-Checkpoint-Start (int) Đầu dò bắn khi phần viết bộ đệm của một điểm kiểm tra được bắt đầu. Arg0 giữ kèo bóng đá hom nay cờ bitwise được sử dụng để phân biệt kèo bóng đá hom nay 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.
16098_16117 (int, int) Đầu dò bắn kèo bóng đá hom nay chúng ta bắt đầu viết bộ đệm bẩn trong quá trình kiểm tra (sau kèo bóng đá hom nay xác định bộ đệm nào phải được viết). Arg0 là tổng số bộ đệm. Arg1 là số hiện đang bị bẩn và cần được viết.
Buffer-sync-written (int) Đầu dò bắn sau mỗi bộ đệm được viết trong điểm kiểm tra. arg0 là số ID của bộ đệm.
Buffer-sync-Done (int, int, int) 16610_16942
Buffer-Checkpoint-sync-start () 17011_17127
Buffer-Checkpoint-Done () Đầu dò bắn kèo bóng đá hom nay đồng bộ hóa bộ đệm với đĩa hoàn tất.
Twophase-Checkpoint-Start () Đầu dò bắn kèo bóng đá hom nay 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 đá hom nay 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 đá hom nay 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ệ). Arg2, Arg3 và Arg4 chứa không gian bảng, cơ sở dữ liệu và kèo bóng đá hom nay OID quan hệ xác định mối quan hệ. Arg5 là ID của phần phụ trợ tạo ra mối quan hệ tạm thời cho bộ đệm cục bộ hoặc không hợp lệ (-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 đọc bộ đệm hoàn tất. Arg0 và Arg1 chứa kèo bóng đá hom nay số 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). Arg2, Arg3 và Arg4 chứa không gian bảng, cơ sở dữ liệu và kèo bóng đá hom nay OID quan hệ xác định mối quan hệ. Arg5 là ID của phần phụ trợ tạo ra mối quan hệ tạm thời cho bộ đệm cục bộ hoặc không hợp lệ (-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. Arg7 là đúng nếu bộ đệm được tìm 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 kèo bóng đá hom nay đư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. 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-Flush-Done (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn kèo bóng đá hom nay hoàn thành yêu cầu ghi. .
19483_19509 (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn kèo bóng đá hom nay 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 đá hom nay tham số điều khiển bgwriter cần điều chỉnh.) Arg0 và Arg1 chứa kèo bóng đá hom nay 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 một bộ đệm bẩn hoàn tất. kèo bóng đá hom nay đối số giống như đối với bộ đệm-Write-Dirty-Start.
Wal-Buffer-Write-Dirty-Start () Đầu dò kích hoạt kèo bóng đá hom nay một quá trình máy chủ bắt đầu viết bộ đệm Dirty Wal vì không còn 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 đá hom nay hoàn thành bộ đệm wal bẩn hoàn tất.
XLOG-Insert (Char không dấu, Char không dấu) Đầu dò bắn khi bản ghi WAL được chèn. Arg0 là Trình quản lý tài nguyên (RMID) cho hồ sơ. Arg1 chứa kèo bóng đá hom nay cờ thông tin.
XLOG-SWITCH () Đầu dò bắn kèo bóng đá hom nay 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 khi 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. Arg2, Arg3 và Arg4 chứa không gian bảng, cơ sở dữ liệu và kèo bóng đá hom nay OID quan hệ xác định mối quan hệ. Arg5 là ID của phần phụ trợ đã tạo mối quan hệ tạm thời cho bộ đệm cục bộ hoặc không hợp lệ (-1) cho bộ đệm được chia sẻ.
smgr-md-read-Done (forknumber, blocknumber, oid, oid, oid, int, int, int) 21537_22005
smgr-md-write-start (forknumber, blocknumber, oid, oid, oid, int) Đầu dò bắn khi 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. Arg2, Arg3 và Arg4 chứa không gian bảng, cơ sở dữ liệu và kèo bóng đá hom nay OID quan hệ xác định mối quan hệ. Arg5 là ID của phần phụ trợ đã tạo mối quan hệ tạm thời cho bộ đệm cục bộ hoặc không hợp lệ (-1) cho bộ đệm được chia sẻ.
smgr-md-write-Done 22514_22571 Đầu dò bắn khi ghi khối hoàn tất. Arg0 và Arg1 chứa 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à kèo bóng đá hom nay OID quan hệ xác định mối quan hệ. Arg5 là ID của phần phụ trợ tạo ra mối quan hệ tạm thời cho bộ đệm cục bộ hoặc không hợp lệ (-1) cho bộ đệm được chia sẻ. Arg6 là số byte thực sự được viết, trong khi 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) Đầu dò bắn khi 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. Arg1 là đúng cho việc thực thi giá trị độc đáo. Arg2 là số lượng cột chính. Arg3 là số lượng kilobyte của bộ nhớ làm việc được phép. arg4 là đúng nếu yêu cầu kèo bóng đá hom nay cập ngẫu nhiên vào kết quả sắp xếp.
Sort-Done (bool, dài) Đầu dò bắn kèo bóng đá hom nay 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ộ. Arg1 là số lượng khối đĩa được sử dụng cho một loại bên ngoài hoặc kilobyte của bộ nhớ được sử dụng cho một loại bên trong.
lwlock-acquire (char *, int, lwlockmode) Đầu dò bắn kèo bóng đá hom nay có được LWLOCK. Arg0 là đợt của Lwlock. Arg1 là phần bù của LWLOCK trong đợt của nó. Arg2 là chế độ khóa được yêu cầu, độc quyền hoặc được chia sẻ.
LWLOCK-RELEASE (char *, int) Đầu dò bắn kèo bóng đá hom nay 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. Arg1 là bù của lwlock trong đợt của nó.
lwlock-wait-start (char *, int, lwlockmode) Đầu dò bắn kèo bóng đá hom nay 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. Arg1 là phần bù của LWLOCK trong đợt của nó. Arg2 là chế độ khóa được yêu cầu, độc quyền hoặc được chia sẻ.
LWLOCK-WAIT-DONE (char *, int, lwlockmode) 24653_24920
lwlock-condacquire (char *, int, lwlockmode) Đầu dò bắn kèo bóng đá hom nay LWLOCK được thu được thành công kèo bóng đá hom nay người gọi chỉ định không chờ đợi. Arg0 là đợt của Lwlock. Arg1 là phần bù của LWLOCK trong đợt của nó. Arg2 là chế độ khóa được yêu cầu, độc quyền hoặc được chia sẻ.
lwlock-condacquire-fail (char *, int, lwlockmode) 25325_25565
Khóa-Wait-Start 25609_25691 Đầ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 đá hom nay trường thẻ xác định đối tượng bị khóa. Arg4 chỉ ra loại đối tượng bị khóa. arg5 cho biết loại khóa được yêu cầu.
Lock-Wait-Done (unsign int, unsign int, unsign int, unsign int, unsign int, lockmode) Đầ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 đá hom nay đối số giống như đối với Khóa-Bắt-Bắt-BắtS.
Holdlock-Found () Đầu dò bắn kèo bóng đá hom nay phát hiện bế tắc bởi máy dò bế tắc.

Bảng 27-19. kèo bóng đá hom nay 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

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

27195_27319pg_stat_databaseTrước và sau kèo bóng đá hom nay kiểm tra hiệu suất:

#!/Usr/sbin/dtrace -Qs

PostgreSQL $ 1 ::: Giao dịch-khởi đầu

      @Start ["Bắt ​​đầu"] = Count ();
      tự ts = dấu thời gian;

Postgresql $ 1 ::: Trao đổi-Abort

      @abort ["ABORT"] = Count ();

PostgreSQL $ 1 ::: Giao dịch-commit
/tự ts/

      @Commit ["cam kết"] = Count ();
      @time ["Tổng thời gian (ns)"] = sum (dấu thời gian - tự ts);
      tự ts = 0;

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

# ./txn_count.d `PGREP -N POSTGRES` hoặc.
^C

Bắt đầu 71
Cam kết 70
Tổng thời gian (ns) 2312105013

Lưu ý:SystemTap sử dụng một ký hiệu khác cho kèo bóng đá hom nay tập lệnh theo dõi so với DTRACE, mặc dù kèo bóng đá hom nay đ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 đá hom nay 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. Điều này dự kiến ​​sẽ được sửa trong kèo bóng đá hom nay bản phát hành SystemTap trong tương lai.

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ìm thấy, đó là thiết bị có lỗi, không phải là hệ thống cơ bản. Khi thảo luận về thông tin được tìm thấy bằng cách sử dụng kèo bóng đá hom nay, hãy chắc chắn gửi lại tập lệnh được sử dụng để cho phép kiểm tra và thảo luận.

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

kèo bóng đá hom nay đầ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à kèo bóng đá hom nay bước để chèn kèo bóng đá hom nay đầu dò mới:

  1. Quyết định về tên và dữ liệu thăm dò được cung cấp thông qua kèo bóng đá hom nay đầ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 đá hom nay) mô -đun chứa kèo bóng đá hom nay điểm thăm dò và chènTrace_PostgresqlMacro thăm dò tại kèo bóng đá hom nay vị trí mong muốn trong mã nguồn

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

  1. 30065_30103giao dịch-khởi độngvà yêu cầu tham số loại localtransactionid

  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 động30590_30627

  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 đá hom nay 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. Trong trường hợp này, nó trông giống như sau:

    Trace_Postgresql_Transaction_Start (vxid.localtransactionid);
  4. Sau kèo bóng đá hom nay 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
       Tên chức năng mô -đun nhà cung cấp ID
    18705 Postgresql49878 Postgres StartTransactionCommand Giao dịch bắt đầu
    18755 Postgresql49877 Postgres StartTransactionCommand Giao dịch bắt đầu
    18805 Postgresql49876 Postgres StartTransactionCommand Giao dịch bắt đầu
    18855 Postgresql49875 Postgre
    18986 Postgresql49873 Postgres StartTransactionCommand Giao dịch-Bắt đầu

Có một vài điều cần cẩn thận kèo bóng đá hom nay thêm macro theo dõi vào mã C:

  • Bạn nên cẩn thận rằng kèo bóng đá hom nay loại dữ liệu được chỉ định cho kèo bóng đá hom nay tham số của đầu dò phù hợp với kèo bóng đá hom nay loại dữ liệu của kèo bóng đá hom nay 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 đá hom nay nền tảng, nếuPOSTGRESQLđược xây dựng với--Enable-dtrace, kèo bóng đá hom nay đố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 đá hom nay không thực hiện theo dõi. Đ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 đá hom nay giá trị của một vài biến cục bộ. Nhưng hãy cẩn thận khi đặt kèo bóng đá hom nay cuộc gọi chức năng đắt tiền vào kèo bóng đá hom nay đối số. Nếu bạn cần làm điều đó, hãy xem xét bảo vệ macro bằng kiểm tra để xem liệu dấu vết có thực sự được bật không:

    if (trace_postgresql_transaction_start_enables ()))
        Trace_Postgresql_Transaction_Start (some_function (...));

    Mỗi macro theo dõi có tương ứngĐã bậtMacro.