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

27.5. kèo bóng đá euro#

PostgreSQLcung cấp các cơ sở để hỗ trợ kèo bóng đá euro 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. 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 lệ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.

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

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 lệnh cấu hình để cung cấp các đầu dò trongPostgreSQL. Để bao gồm hỗ trợ DTRACE Chỉ định11840_11857Để cấu hình. Nhìn thấyPhần 17.3.3.6Để 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ư thể hiện trongBảng 27,49;Bảng 27.50Hiể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ườngPostgreSQL12788_12807

Bảng 27,49. Các đầu dò DTRACE tích hợp

tên tham số Mô tả
Giao dịch-khởi động (LocalTransactionId) Đầu dò kèo bóng đá euro 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 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 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 kèo bóng đá euro xử lý truy vấn được bắt đầu. arg0 là chuỗi truy vấn.
kèo bóng đá euro 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ò kèo bóng đá euro 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 kèo bóng đá euro đ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 kèo bóng đá euro hoàn tất đ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 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 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 đá 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 kèo bóng đá euro 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 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ò kèo bóng đá euro 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) Đầu dò bắn kèo bóng đá euro tất cả các bộ đệm bẩn đã được viết. Arg0 là tổng số bộ đệm.bộ đệm-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 () 21972_22088
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-extend-start (forknumber, blocknumber, oid, oid, oid, int, unsign int) Đầu dò bắn kèo bóng đá euro một phần mở rộng quan hệ bắt đầu. Arg0 chứa nĩa sẽ được mở rộng.không hợp lệ_proc_number(-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 (forknumber, blocknumber, oid, oid, oid, int, unsign int, blockNumber) Đầu dò bắn kèo bóng đá euro hoàn thành phần mở rộng quan hệ. Arg0 chứa nĩa sẽ được mở rộng.không hợp lệ_proc_number(-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-startDo 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 Đầu dò bắn kèo bóng đá euro bắt đầu đọc bộ đệm. Arg0 và Arg1 chứa nĩa và số khối của trang.không hợp lệ_proc_number(-1) cho bộ đệm được chia sẻ.
Buffer-Read-Done (forknumber, blocknumber, oid, oid, oid, int, bool) Đầu dò bắn kèo bóng đá euro đọc bộ đệm hoàn tất. Arg0 và Arg1 chứa nĩa và số khối của trang.không hợp lệ_proc_number(-1) cho bộ đệm được chia sẻ. Arg6 là đúng nếu bộ đệm được kèo bóng đá euro 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 đá euro đư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 kèo bóng đá euro 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 () 26763_26926Wal_buffersquá nhỏ.)
Wal-Buffer-Write-Dast-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ệ_proc_number(-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.không hợp lệ_proc_number(-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 một lần đọc ngắn).
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.không hợp lệ_proc_number(-1) cho bộ đệm được chia sẻ.
smgr-md-write-Done (forknumber, blocknumber, oid, oid, oid, int, int, int) Đầu dò bắn kèo bóng đá euro 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ệ_proc_number(-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 một bản viết ngắn).
Sắp xếp bắt đầu (int, bool, int, int, bool, int) Đầu dò bắn kèo bóng đá euro 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 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 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 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 kèo bóng đá euro 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 (Unsign int, unsign int, unsign int, unsign int, unsign int, lockmode) Đầu dò bắn kèo bóng đá euro 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 kèo bóng đá euro phát hiện bế tắc bởi máy dò bế tắc.

Bảng 27.50. 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

27.5.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, 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 các tập lệ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 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 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 kèo bóng đá euro 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#

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

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

  4. 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.

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

    41551_41615
  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 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 kèo bóng đá euro 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 một macro theo dõi sẽ được đánh giá bất cứ kèo bóng đá euro nào điều kèo bóng đá euroển đi qua macro,Ngay cả kèo bóng đá euro 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 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ậtMacro.

Gửi hiệu chỉnh

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 phù hợpMẫu nàyĐể báo cáo vấn đề tài liệu.