1 /* ----------
2  *	DTrace probes for PostgreSQL backend
3  *
4  *	Copyright (c) 2006-2017, PostgreSQL Global Development Group
5  *
6  *	src/backend/utils/probes.d
7  * ----------
8  */
9 
10 
11 /*
12  * Typedefs used in PostgreSQL.
13  *
14  * NOTE: Do not use system-provided typedefs (e.g. uintptr_t, uint32_t, etc)
15  * in probe definitions, as they cause compilation errors on macOS 10.5.
16  */
17 #define LocalTransactionId unsigned int
18 #define LWLockMode int
19 #define LOCKMODE int
20 #define BlockNumber unsigned int
21 #define Oid unsigned int
22 #define ForkNumber int
23 #define bool char
24 
25 provider postgresql {
26 
27 	probe transaction__start(LocalTransactionId);
28 	probe transaction__commit(LocalTransactionId);
29 	probe transaction__abort(LocalTransactionId);
30 
31 	probe lwlock__acquire(const char *, LWLockMode);
32 	probe lwlock__release(const char *);
33 	probe lwlock__wait__start(const char *, LWLockMode);
34 	probe lwlock__wait__done(const char *, LWLockMode);
35 	probe lwlock__condacquire(const char *, LWLockMode);
36 	probe lwlock__condacquire__fail(const char *, LWLockMode);
37 	probe lwlock__acquire__or__wait(const char *, LWLockMode);
38 	probe lwlock__acquire__or__wait__fail(const char *, LWLockMode);
39 
40 	probe lock__wait__start(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE);
41 	probe lock__wait__done(unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, LOCKMODE);
42 
43 	probe query__parse__start(const char *);
44 	probe query__parse__done(const char *);
45 	probe query__rewrite__start(const char *);
46 	probe query__rewrite__done(const char *);
47 	probe query__plan__start();
48 	probe query__plan__done();
49 	probe query__execute__start();
50 	probe query__execute__done();
51 	probe query__start(const char *);
52 	probe query__done(const char *);
53 	probe statement__status(const char *);
54 
55 	probe sort__start(int, bool, int, int, bool);
56 	probe sort__done(bool, long);
57 
58 	probe buffer__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid, int, bool);
59 	probe buffer__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, bool, bool);
60 	probe buffer__flush__start(ForkNumber, BlockNumber, Oid, Oid, Oid);
61 	probe buffer__flush__done(ForkNumber, BlockNumber, Oid, Oid, Oid);
62 
63 	probe buffer__checkpoint__start(int);
64 	probe buffer__checkpoint__sync__start();
65 	probe buffer__checkpoint__done();
66 	probe buffer__sync__start(int, int);
67 	probe buffer__sync__written(int);
68 	probe buffer__sync__done(int, int, int);
69 	probe buffer__write__dirty__start(ForkNumber, BlockNumber, Oid, Oid, Oid);
70 	probe buffer__write__dirty__done(ForkNumber, BlockNumber, Oid, Oid, Oid);
71 
72 	probe deadlock__found();
73 
74 	probe checkpoint__start(int);
75 	probe checkpoint__done(int, int, int, int, int);
76 	probe clog__checkpoint__start(bool);
77 	probe clog__checkpoint__done(bool);
78 	probe subtrans__checkpoint__start(bool);
79 	probe subtrans__checkpoint__done(bool);
80 	probe multixact__checkpoint__start(bool);
81 	probe multixact__checkpoint__done(bool);
82 	probe twophase__checkpoint__start();
83 	probe twophase__checkpoint__done();
84 
85 	probe smgr__md__read__start(ForkNumber, BlockNumber, Oid, Oid, Oid, int);
86 	probe smgr__md__read__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int, int);
87 	probe smgr__md__write__start(ForkNumber, BlockNumber, Oid, Oid, Oid, int);
88 	probe smgr__md__write__done(ForkNumber, BlockNumber, Oid, Oid, Oid, int, int, int);
89 
90 	probe wal__insert(unsigned char, unsigned char);
91 	probe wal__switch();
92 	probe wal__buffer__write__dirty__start();
93 	probe wal__buffer__write__dirty__done();
94 };
95