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

27.5. kèo chấp bóng đá hôm nay#

PostgreSQLCung cấp các cơ sở để hỗ trợ kèo chấp bóng đá hôm 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. 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ỉ định--Enable-dtraceĐể cấu hình. Nhìn thấyPhần 17.3.3.6Để biết thêm thông tin.

12502_12533#

Một số đầu dò tiêu chuẩn được cung cấp trong mã nguồn, như 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ườngPostgreSQL

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ò bắn kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay xử lý truy vấn được bắt đầu. arg0 là chuỗi truy vấn.
kèo chấp bóng đá hôm nay vấn-Done (const char *) Đầu dò bắn kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay lập kế hoạch truy vấn được bắt đầu.
Query-Plan-Done () Đầu dò bắn kèo chấp bóng đá hôm nay lập kế hoạch truy vấn hoàn tất.
Query-Execute-Start () Đầu dò bắn kèo chấp bóng đá hôm nay thực hiện truy vấn được bắt đầu.
Query-Execute-Done () Đầu dò bắn kèo chấp bóng đá hôm nay thực hiện truy vấn hoàn tất.
Statement-Status (const char *) Đầu dò kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay đ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 chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm 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.
CLOG-Checkpoint-Done (bool) Đầu dò bắn kèo chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay chúng ta bắt đầu viết bộ đệm bẩn trong quá trình kiểm tra (sau kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 kèo chấp bóng đá hôm nay 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 () 22301_22417
Buffer-Checkpoint-Done () Đầu dò bắn kèo chấp bóng đá hôm nay đồng bộ hóa bộ đệm với đĩa hoàn tất.
Twophase-Checkpoint-Start () Đầu dò bắn kèo chấp bóng đá hôm 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 (forknumber, blocknumber, oid, oid, oid, int) Đầu dò bắn kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay bộ đệm đọc 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay đư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 kèo chấp bóng đá hôm nay hoàn thành yêu cầu ghi. (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 () Đầu dò kích hoạt kèo chấp bóng đá hôm nay một quy 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 chấp bóng đá hôm nay hoàn thành bộ đệm wal bẩn.
Wal-Insert (Char không dấu, Char không dấu) Đầu dò bắn kèo chấp bóng đá hôm nay bản ghi WAL được chèn vào. Arg0 là Trình quản lý tài nguyên (RMID) cho hồ sơ.
Wal-Switch () Đầu dò kích hoạt kèo chấp bóng đá hôm 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 kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 Đầu dò bắn kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay1hoặc lãnh đạo song song kèo chấp bóng đá hôm nay2.
Sort-Done (bool, dài) Đầu dò bắn kèo chấp bóng đá hôm 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ộ.
lwlock-acquire (char *, lwlockmode) Đầu dò bắn kèo chấp bóng đá hôm nay có được LWLOCK. Arg0 là đợt của Lwlock.
LWLOCK-RELEASE (char *) Đầu dò bắn kèo chấp bóng đá hôm 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.
lwlock-wait-start (char *, lwlockmode) Đầu dò bắn kèo chấp bóng đá hôm 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.
LWLOCK-WAIT-DONE (char *, lwlockmode) Đầu dò kích hoạt kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay LWLOCK có được thành công kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay LWLOCK không có được thành công kèo chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay 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 chấp bóng đá hôm nay kiểm tra hiệu suất:

#!/Usr/sbin/dtrace -Qs

kèo chấp bóng đá hôm nay đượ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 chấp bóng đá hôm nay 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 tái hợp. 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 đầ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-Bắt đầulà 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 ý 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.

    41880_41944
  4. Sau kèo chấp bóng đá hôm 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

Có một vài điều cần cẩn thận kèo chấp bóng đá hôm nay 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ứ kèo chấp bóng đá hôm nay nào điều kèo chấp bóng đá hôm nayển đi qua macro,Ngay cả kèo chấp bóng đá hôm 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 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.