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 soi kèo bóng đá truoctran phiên bản được hỗ trợ khác được liệt kê ở trên thay thế.

27.4. soi kèo bóng đá truoctran

PostgreSQL9586_9764

Một số đầu dò hoặc điểm theo dõi đã được chèn vào mã nguồn. soi kèo bóng đá truoctran đầu dò này được dự định sẽ được sử dụng bởi soi kèo bóng đá truoctran nhà phát triển và quản trị viên cơ sở dữ liệu. Theo mặc định, soi kèo bóng đá truoctran đầ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 soi kèo bóng đá truoctran đầ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ợ soi kèo bóng đá truoctran tiện ích theo dõi động khác là về mặt lý thuyết bằng cách thay đổi soi kèo bóng đá truoctran định nghĩa cho soi kèo bóng đá truoctran macro trongSRC/bao gồm/Utils/Probes.h.

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

10780_10909PostgreSQL. Để 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-16;Bảng 27-17Hiển thị soi kèo bóng đá truoctran loại được sử dụng trong soi kèo bóng đá truoctran đầu dò. Nhiều đầu dò chắc chắn có thể được thêm vào để tăng cườngPostgreSQL11574_11593

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

tên tham số Mô tả
Bắt đầu giao dịch (LocalTransactionId) Đầu dò bắn 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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ý soi kèo bóng đá truoctran vấn được bắt đầu. arg0 là chuỗi soi kèo bóng đá truoctran vấn.
soi kèo bóng đá truoctran vấn-Done (const char *) Đầu dò bắn khi xử lý hoàn tất soi kèo bóng đá truoctran vấn. arg0 là chuỗi soi kèo bóng đá truoctran vấn.
Query-Parse-Start (const char *) Đầu dò bắn khi phân tích cú pháp soi kèo bóng đá truoctran vấn được bắt đầu. arg0 là chuỗi soi kèo bóng đá truoctran vấn.
Query-parse-Done (const char *) Đầu dò bắn khi phân tích cú pháp soi kèo bóng đá truoctran vấn hoàn tất. arg0 là chuỗi soi kèo bóng đá truoctran vấn.
Query-rewrite-start (const char *) Đầu dò bắn khi viết lại soi kèo bóng đá truoctran vấn được bắt đầu. arg0 là chuỗi soi kèo bóng đá truoctran vấn.
Query-rewrite-Done (const char *) 13206_13293
Query-Plan-Start () Đầu dò bắn khi lập kế hoạch soi kèo bóng đá truoctran vấn được bắt đầu.
Query-Plan-Done () Đầu dò bắn khi lập kế hoạch soi kèo bóng đá truoctran vấn hoàn tất.
Query-Execute-Start () 13585_13645
Query-Execute-Done () Đầu dò bắn khi thực hiện soi kèo bóng đá truoctran vấn hoàn tất.
Statement-Status (const char *) Đầu dò bắn bất cứ soi kèo bóng đá truoctran 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ữ soi kèo bóng đá truoctran cờ bitwise được sử dụng để phân biệt soi kèo bóng đá truoctran 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) 14306_14600
CLOG-Checkpoint-Start (bool) Đầu dò bắn soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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.
Multixact-Checkpoint-Start 15457_15465 Đầu dò bắn soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 điểm kiểm tra được bắt đầu. Arg0 giữ soi kèo bóng đá truoctran cờ bitwise được sử dụng để phân biệt soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran chúng ta bắt đầu viết bộ đệm bẩn trong quá trình kiểm tra (sau soi kèo bóng đá truoctran 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 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ả soi kèo bóng đá truoctran bộ đệm bẩn đã được viết. Arg0 là tổng số bộ đệm. Arg1 là số lượng bộ đệm thực sự được viết bởi quy trình điểm kiểm tra. Arg2 là số dự kiến ​​sẽ được viết (arg1 của bộ đệm-sync-start); Bất kỳ sự khác biệt nào phản ánh soi kèo bóng đá truoctran quá trình khác có bộ đệm trong quá trình kiểm tra.
Buffer-Checkpoint-sync-start () 17010_17126
Buffer-Checkpoint-Done () Đầu dò bắn soi kèo bóng đá truoctran đồng bộ hóa bộ đệm với đĩa đã hoàn tất.
Twophase-Checkpoint-Start () Đầu dò bắn soi kèo bóng đá truoctran phần hai pha của điểm kiểm tra được bắt đầu.
Twophase-Checkpoint-Done () Đầu dò bắn soi kèo bóng đá truoctran 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) 17637_18112
Buffer-Read-Done (forknumber, blocknumber, oid, oid, oid, int, bool, bool) 18224_18805
bộ đệm-flush-start (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn trước soi kèo bóng đá truoctran đư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ệ.
19154_19173 (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn soi kèo bóng đá truoctran yêu cầu ghi hoàn tất. .
19482_19508 (forknumber, blocknumber, oid, oid, oid) Đầu dò bắn soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran tham số điều khiển bgwriter cần điều chỉnh.) Arg0 và Arg1 chứa soi kèo bóng đá truoctran 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. soi kèo bóng đá truoctran đối số giống như đối với bộ đệm-Write-Dirty-Start.
Wal-Buffer-Write-Dirty-Start () 20270_20433Wal_buffersquá nhỏ.)
Wal-Buffer-Write-Died-Done () Đầu dò bắn soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran cờ thông tin.
XLOG-SWITCH () Đầu dò bắn soi kèo bóng đá truoctran 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à soi kèo bóng đá truoctran 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) Đầu dò bắn khi hoàn tất việc đọc khối. 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à soi kèo bóng đá truoctran 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, 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ố).
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à soi kèo bóng đá truoctran 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 (forknumber, blocknumber, oid, oid, oid, int, int, int) Đầ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à soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran cập ngẫu nhiên vào kết quả sắp xếp.
Sort-Done (bool, dài) Đầu dò bắn soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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) 24022_24216
lwlock-wait-start (char *, int, lwlockmode) Đầu dò bắn soi kèo bóng đá truoctran 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) Đầu dò bắn soi kèo bóng đá truoctran 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. 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 (char *, int, lwlockmode) 25001_25237
lwlock-condacquire-fail (char *, int, lwlockmode) 25324_25564
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à soi kèo bóng đá truoctran 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 26030_26112 Đầ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). soi kèo bóng đá truoctran đối số giống như đối với Khóa-Bắt-Bắt-BắtS.
Holdlock-Found () Đầu dò bắn soi kèo bóng đá truoctran phát hiện bế tắc bởi máy dò bế tắc.

Bảng 27-17. soi kèo bóng đá truoctran 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ò

Ví dụ dưới đây hiển thị tập lệ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_DATABASETrước và sau soi kèo bóng đá truoctran kiểm tra hiệu suất:

27430_27800

soi kèo bóng đá truoctran đượ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 soi kèo bóng đá truoctran tập lệnh theo dõi so với DTRACE, mặc dù soi kèo bóng đá truoctran đ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, soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran, 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.

Có thể tìm thấy thêm soi kèo bóng đá truoctran tập lệnh trong PGFoundryDự án DTRACE.

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

soi kèo bóng đá truoctran đầ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à soi kèo bóng đá truoctran bước để chèn soi kèo bóng đá truoctran đầ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 soi kèo bóng đá truoctran đầ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 (soi kèo bóng đá truoctran) mô -đun chứa soi kèo bóng đá truoctran điểm thăm dò và chènTrace_PostgresqlMacro thăm dò tại soi kèo bóng đá truoctran vị trí mong muốn trong mã nguồn

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

  1. Quyết định rằng đầu dò sẽ được đặt têngiao 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 độ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 có tên30908_30944(Lưu ý soi kèo bóng đá truoctran 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:

    31202_31264
  4. Sau soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran thêm macro theo dõi vào mã C:

  • Bạn nên chăm sóc soi kèo bóng đá truoctran loại dữ liệu được chỉ định cho soi kèo bóng đá truoctran tham số của đầu dò phù hợp với soi kèo bóng đá truoctran loại dữ liệu của soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran nền tảng, nếu32350_32362được xây dựng với--Enable-dtrace, soi kèo bóng đá truoctran đố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ả soi kèo bóng đá truoctran 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 soi kèo bóng đá truoctran giá trị của một vài biến cục bộ. Nhưng hãy cẩn thận khi đặt soi kèo bóng đá truoctran cuộc gọi chức năng đắt tiền vào soi kèo bóng đá truoctran đố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 (...));

    33021_33060Đã bậtMacro.