-
Notifications
You must be signed in to change notification settings - Fork 0
/
wait-histograms-pid.bt
executable file
·289 lines (289 loc) · 12.4 KB
/
wait-histograms-pid.bt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
#!/usr/bin/env bpftrace
// Requires:
// - bpftrace, linux-libc-dev (debian)
//
// FIXME: path to postgres executable is hard coded
BEGIN
{
@wait_class[0x01000000]="lwlock";
@wait_class[0x03000000]="lock";
@wait_class[0x04000000]="bufferpin";
@wait_class[0x05000000]="activity";
@wait_class[0x06000000]="client";
@wait_class[0x07000000]="extensions";
@wait_class[0x08000000]="ipc";
@wait_class[0x09000000]="timeout";
@wait_class[0x0A000000]="io";
@wait_name[0x05000000,0]="ARCHIVER_MAIN";
@wait_name[0x05000000,1]="AUTOVACUUM_MAIN";
@wait_name[0x05000000,2]="BGWRITER_HIBERNATE";
@wait_name[0x05000000,3]="BGWRITER_MAIN";
@wait_name[0x05000000,4]="CHECKPOINTER_MAIN";
@wait_name[0x05000000,5]="LOGICAL_APPLY_MAIN";
@wait_name[0x05000000,6]="LOGICAL_LAUNCHER_MAIN";
@wait_name[0x05000000,7]="LOGICAL_PARALLEL_APPLY_MAIN";
@wait_name[0x05000000,8]="RECOVERY_WAL_STREAM";
@wait_name[0x05000000,9]="SYSLOGGER_MAIN";
@wait_name[0x05000000,10]="WAL_RECEIVER_MAIN";
@wait_name[0x05000000,11]="WAL_SENDER_MAIN";
@wait_name[0x05000000,12]="WAL_WRITER_MAIN";
@wait_name[0x06000000,0]="CLIENT_READ";
@wait_name[0x06000000,1]="CLIENT_WRITE";
@wait_name[0x06000000,2]="GSS_OPEN_SERVER";
@wait_name[0x06000000,3]="LIBPQWALRECEIVER_CONNECT";
@wait_name[0x06000000,4]="LIBPQWALRECEIVER_RECEIVE";
@wait_name[0x06000000,5]="SSL_OPEN_SERVER";
@wait_name[0x06000000,6]="WAL_SENDER_WAIT_FOR_WAL";
@wait_name[0x06000000,7]="WAL_SENDER_WRITE_DATA";
@wait_name[0x08000000,0]="APPEND_READY";
@wait_name[0x08000000,1]="ARCHIVE_CLEANUP_COMMAND";
@wait_name[0x08000000,2]="ARCHIVE_COMMAND";
@wait_name[0x08000000,3]="BACKEND_TERMINATION";
@wait_name[0x08000000,4]="BACKUP_WAIT_WAL_ARCHIVE";
@wait_name[0x08000000,5]="BGWORKER_SHUTDOWN";
@wait_name[0x08000000,6]="BGWORKER_STARTUP";
@wait_name[0x08000000,7]="BTREE_PAGE";
@wait_name[0x08000000,8]="BUFFER_IO";
@wait_name[0x08000000,9]="CHECKPOINT_DONE";
@wait_name[0x08000000,10]="CHECKPOINT_START";
@wait_name[0x08000000,11]="EXECUTE_GATHER";
@wait_name[0x08000000,12]="HASH_BATCH_ALLOCATE";
@wait_name[0x08000000,13]="HASH_BATCH_ELECT";
@wait_name[0x08000000,14]="HASH_BATCH_LOAD";
@wait_name[0x08000000,15]="HASH_BUILD_ALLOCATE";
@wait_name[0x08000000,16]="HASH_BUILD_ELECT";
@wait_name[0x08000000,17]="HASH_BUILD_HASH_INNER";
@wait_name[0x08000000,18]="HASH_BUILD_HASH_OUTER";
@wait_name[0x08000000,19]="HASH_GROW_BATCHES_DECIDE";
@wait_name[0x08000000,20]="HASH_GROW_BATCHES_ELECT";
@wait_name[0x08000000,21]="HASH_GROW_BATCHES_FINISH";
@wait_name[0x08000000,22]="HASH_GROW_BATCHES_REALLOCATE";
@wait_name[0x08000000,23]="HASH_GROW_BATCHES_REPARTITION";
@wait_name[0x08000000,24]="HASH_GROW_BUCKETS_ELECT";
@wait_name[0x08000000,25]="HASH_GROW_BUCKETS_REALLOCATE";
@wait_name[0x08000000,26]="HASH_GROW_BUCKETS_REINSERT";
@wait_name[0x08000000,27]="LOGICAL_APPLY_SEND_DATA";
@wait_name[0x08000000,28]="LOGICAL_PARALLEL_APPLY_STATE_CHANGE";
@wait_name[0x08000000,29]="LOGICAL_SYNC_DATA";
@wait_name[0x08000000,30]="LOGICAL_SYNC_STATE_CHANGE";
@wait_name[0x08000000,31]="MESSAGE_QUEUE_INTERNAL";
@wait_name[0x08000000,32]="MESSAGE_QUEUE_PUT_MESSAGE";
@wait_name[0x08000000,33]="MESSAGE_QUEUE_RECEIVE";
@wait_name[0x08000000,34]="MESSAGE_QUEUE_SEND";
@wait_name[0x08000000,35]="PARALLEL_BITMAP_SCAN";
@wait_name[0x08000000,36]="PARALLEL_CREATE_INDEX_SCAN";
@wait_name[0x08000000,37]="PARALLEL_FINISH";
@wait_name[0x08000000,38]="PROCARRAY_GROUP_UPDATE";
@wait_name[0x08000000,39]="PROC_SIGNAL_BARRIER";
@wait_name[0x08000000,40]="PROMOTE";
@wait_name[0x08000000,41]="RECOVERY_CONFLICT_SNAPSHOT";
@wait_name[0x08000000,42]="RECOVERY_CONFLICT_TABLESPACE";
@wait_name[0x08000000,43]="RECOVERY_END_COMMAND";
@wait_name[0x08000000,44]="RECOVERY_PAUSE";
@wait_name[0x08000000,45]="REPLICATION_ORIGIN_DROP";
@wait_name[0x08000000,46]="REPLICATION_SLOT_DROP";
@wait_name[0x08000000,47]="RESTORE_COMMAND";
@wait_name[0x08000000,48]="SAFE_SNAPSHOT";
@wait_name[0x08000000,49]="SYNC_REP";
@wait_name[0x08000000,50]="WAL_RECEIVER_EXIT";
@wait_name[0x08000000,51]="WAL_RECEIVER_WAIT_START";
@wait_name[0x08000000,52]="XACT_GROUP_UPDATE";
@wait_name[0x09000000,0]="BASE_BACKUP_THROTTLE";
@wait_name[0x09000000,1]="CHECKPOINT_WRITE_DELAY";
@wait_name[0x09000000,2]="PG_SLEEP";
@wait_name[0x09000000,3]="RECOVERY_APPLY_DELAY";
@wait_name[0x09000000,4]="RECOVERY_RETRIEVE_RETRY_INTERVAL";
@wait_name[0x09000000,5]="REGISTER_SYNC_REQUEST";
@wait_name[0x09000000,6]="SPIN_DELAY";
@wait_name[0x09000000,7]="VACUUM_DELAY";
@wait_name[0x09000000,8]="VACUUM_TRUNCATE";
@wait_name[0x0A000000,0]="BASEBACKUP_READ";
@wait_name[0x0A000000,1]="BASEBACKUP_SYNC";
@wait_name[0x0A000000,2]="BASEBACKUP_WRITE";
@wait_name[0x0A000000,3]="BUFFILE_READ";
@wait_name[0x0A000000,4]="BUFFILE_WRITE";
@wait_name[0x0A000000,5]="BUFFILE_TRUNCATE";
@wait_name[0x0A000000,6]="CONTROL_FILE_READ";
@wait_name[0x0A000000,7]="CONTROL_FILE_SYNC";
@wait_name[0x0A000000,8]="CONTROL_FILE_SYNC_UPDATE";
@wait_name[0x0A000000,9]="CONTROL_FILE_WRITE";
@wait_name[0x0A000000,10]="CONTROL_FILE_WRITE_UPDATE";
@wait_name[0x0A000000,11]="COPY_FILE_READ";
@wait_name[0x0A000000,12]="COPY_FILE_WRITE";
@wait_name[0x0A000000,13]="DATA_FILE_EXTEND";
@wait_name[0x0A000000,14]="DATA_FILE_FLUSH";
@wait_name[0x0A000000,15]="DATA_FILE_IMMEDIATE_SYNC";
@wait_name[0x0A000000,16]="DATA_FILE_PREFETCH";
@wait_name[0x0A000000,17]="DATA_FILE_READ";
@wait_name[0x0A000000,18]="DATA_FILE_SYNC";
@wait_name[0x0A000000,19]="DATA_FILE_TRUNCATE";
@wait_name[0x0A000000,20]="DATA_FILE_WRITE";
@wait_name[0x0A000000,21]="DSM_ALLOCATE";
@wait_name[0x0A000000,22]="DSM_FILL_ZERO_WRITE";
@wait_name[0x0A000000,23]="LOCK_FILE_ADDTODATADIR_READ";
@wait_name[0x0A000000,24]="LOCK_FILE_ADDTODATADIR_SYNC";
@wait_name[0x0A000000,25]="LOCK_FILE_ADDTODATADIR_WRITE";
@wait_name[0x0A000000,26]="LOCK_FILE_CREATE_READ";
@wait_name[0x0A000000,27]="LOCK_FILE_CREATE_SYNC";
@wait_name[0x0A000000,28]="LOCK_FILE_CREATE_WRITE";
@wait_name[0x0A000000,29]="LOCK_FILE_RECHECKDATADIR_READ";
@wait_name[0x0A000000,30]="LOGICAL_REWRITE_CHECKPOINT_SYNC";
@wait_name[0x0A000000,31]="LOGICAL_REWRITE_MAPPING_SYNC";
@wait_name[0x0A000000,32]="LOGICAL_REWRITE_MAPPING_WRITE";
@wait_name[0x0A000000,33]="LOGICAL_REWRITE_SYNC";
@wait_name[0x0A000000,34]="LOGICAL_REWRITE_TRUNCATE";
@wait_name[0x0A000000,35]="LOGICAL_REWRITE_WRITE";
@wait_name[0x0A000000,36]="RELATION_MAP_READ";
@wait_name[0x0A000000,37]="RELATION_MAP_REPLACE";
@wait_name[0x0A000000,38]="RELATION_MAP_WRITE";
@wait_name[0x0A000000,39]="REORDER_BUFFER_READ";
@wait_name[0x0A000000,40]="REORDER_BUFFER_WRITE";
@wait_name[0x0A000000,41]="REORDER_LOGICAL_MAPPING_READ";
@wait_name[0x0A000000,42]="REPLICATION_SLOT_READ";
@wait_name[0x0A000000,43]="REPLICATION_SLOT_RESTORE_SYNC";
@wait_name[0x0A000000,44]="REPLICATION_SLOT_SYNC";
@wait_name[0x0A000000,45]="REPLICATION_SLOT_WRITE";
@wait_name[0x0A000000,46]="SLRU_FLUSH_SYNC";
@wait_name[0x0A000000,47]="SLRU_READ";
@wait_name[0x0A000000,48]="SLRU_SYNC";
@wait_name[0x0A000000,49]="SLRU_WRITE";
@wait_name[0x0A000000,50]="SNAPBUILD_READ";
@wait_name[0x0A000000,51]="SNAPBUILD_SYNC";
@wait_name[0x0A000000,52]="SNAPBUILD_WRITE";
@wait_name[0x0A000000,53]="TIMELINE_HISTORY_FILE_SYNC";
@wait_name[0x0A000000,54]="TIMELINE_HISTORY_FILE_WRITE";
@wait_name[0x0A000000,55]="TIMELINE_HISTORY_READ";
@wait_name[0x0A000000,56]="TIMELINE_HISTORY_SYNC";
@wait_name[0x0A000000,57]="TIMELINE_HISTORY_WRITE";
@wait_name[0x0A000000,58]="TWOPHASE_FILE_READ";
@wait_name[0x0A000000,59]="TWOPHASE_FILE_SYNC";
@wait_name[0x0A000000,60]="TWOPHASE_FILE_WRITE";
@wait_name[0x0A000000,61]="VERSION_FILE_WRITE";
@wait_name[0x0A000000,62]="WALSENDER_TIMELINE_HISTORY_READ";
@wait_name[0x0A000000,63]="WAL_BOOTSTRAP_SYNC";
@wait_name[0x0A000000,64]="WAL_BOOTSTRAP_WRITE";
@wait_name[0x0A000000,65]="WAL_COPY_READ";
@wait_name[0x0A000000,66]="WAL_COPY_SYNC";
@wait_name[0x0A000000,67]="WAL_COPY_WRITE";
@wait_name[0x0A000000,68]="WAL_INIT_SYNC";
@wait_name[0x0A000000,69]="WAL_INIT_WRITE";
@wait_name[0x0A000000,70]="WAL_READ";
@wait_name[0x0A000000,71]="WAL_SYNC";
@wait_name[0x0A000000,72]="WAL_SYNC_METHOD_ASSIGN";
@wait_name[0x0A000000,73]="WAL_WRITE";
@wait_name[0x04000000,0]="BUFFER_PIN";
@wait_name[0x07000000,0]="Extension";
@wait_name[0x01000000,0]="ShmemIndex";
@wait_name[0x01000000,1]="OidGen";
@wait_name[0x01000000,2]="XidGen";
@wait_name[0x01000000,3]="ProcArray";
@wait_name[0x01000000,4]="SInvalRead";
@wait_name[0x01000000,5]="SInvalWrite";
@wait_name[0x01000000,6]="WALBufMapping";
@wait_name[0x01000000,7]="WALWrite";
@wait_name[0x01000000,8]="ControlFile";
@wait_name[0x01000000,9]="XactSLRU";
@wait_name[0x01000000,10]="SubtransSLRU";
@wait_name[0x01000000,11]="MultiXactGen";
@wait_name[0x01000000,12]="MultiXactOffsetSLRU";
@wait_name[0x01000000,13]="MultiXactMemberSLRU";
@wait_name[0x01000000,14]="RelCacheInit";
@wait_name[0x01000000,15]="CheckpointerComm";
@wait_name[0x01000000,16]="TwoPhaseState";
@wait_name[0x01000000,17]="TablespaceCreate";
@wait_name[0x01000000,18]="BtreeVacuum";
@wait_name[0x01000000,19]="AddinShmemInit";
@wait_name[0x01000000,20]="Autovacuum";
@wait_name[0x01000000,21]="AutovacuumSchedule";
@wait_name[0x01000000,22]="SyncScan";
@wait_name[0x01000000,23]="RelationMapping";
@wait_name[0x01000000,24]="NotifySLRU";
@wait_name[0x01000000,25]="NotifyQueue";
@wait_name[0x01000000,26]="SerializableXactHash";
@wait_name[0x01000000,27]="SerializableFinishedList";
@wait_name[0x01000000,28]="SerializablePredicateList";
@wait_name[0x01000000,29]="SerialSLRU";
@wait_name[0x01000000,30]="SyncRep";
@wait_name[0x01000000,31]="BackgroundWorker";
@wait_name[0x01000000,32]="DynamicSharedMemoryControl";
@wait_name[0x01000000,33]="AutoFile";
@wait_name[0x01000000,34]="ReplicationSlotAllocation";
@wait_name[0x01000000,35]="ReplicationSlotControl";
@wait_name[0x01000000,36]="CommitTsSLRU";
@wait_name[0x01000000,37]="CommitTs";
@wait_name[0x01000000,38]="ReplicationOrigin";
@wait_name[0x01000000,39]="MultiXactTruncation";
@wait_name[0x01000000,40]="LogicalRepWorker";
@wait_name[0x01000000,41]="XactTruncation";
@wait_name[0x01000000,42]="WrapLimitsVacuum";
@wait_name[0x01000000,43]="NotifyQueueTail";
@wait_name[0x01000000,44]="WaitEventExtension";
@wait_name[0x01000000,45]="XactBuffer";
@wait_name[0x01000000,46]="CommitTsBuffer";
@wait_name[0x01000000,47]="SubtransBuffer";
@wait_name[0x01000000,48]="MultiXactOffsetBuffer";
@wait_name[0x01000000,49]="MultiXactMemberBuffer";
@wait_name[0x01000000,50]="NotifyBuffer";
@wait_name[0x01000000,51]="SerialBuffer";
@wait_name[0x01000000,52]="WALInsert";
@wait_name[0x01000000,53]="BufferContent";
@wait_name[0x01000000,54]="ReplicationOriginState";
@wait_name[0x01000000,55]="ReplicationSlotIO";
@wait_name[0x01000000,56]="LockFastPath";
@wait_name[0x01000000,57]="BufferMapping";
@wait_name[0x01000000,58]="LockManager";
@wait_name[0x01000000,59]="PredicateLockManager";
@wait_name[0x01000000,60]="ParallelHashJoin";
@wait_name[0x01000000,61]="ParallelQueryDSA";
@wait_name[0x01000000,62]="PerSessionDSA";
@wait_name[0x01000000,63]="PerSessionRecordType";
@wait_name[0x01000000,64]="PerSessionRecordTypmod";
@wait_name[0x01000000,65]="SharedTupleStore";
@wait_name[0x01000000,66]="SharedTidBitmap";
@wait_name[0x01000000,67]="ParallelAppend";
@wait_name[0x01000000,68]="PerXactPredicateList";
@wait_name[0x01000000,69]="PgStatsDSA";
@wait_name[0x01000000,70]="PgStatsHash";
@wait_name[0x01000000,71]="PgStatsData";
@wait_name[0x01000000,72]="LogicalRepLauncherDSA";
@wait_name[0x01000000,73]="LogicalRepLauncherHash";
@wait_name[0x03000000,0]="relation";
@wait_name[0x03000000,1]="extend";
@wait_name[0x03000000,2]="frozenid";
@wait_name[0x03000000,3]="page";
@wait_name[0x03000000,4]="tuple";
@wait_name[0x03000000,5]="transactionid";
@wait_name[0x03000000,6]="virtualxid";
@wait_name[0x03000000,7]="spectoken";
@wait_name[0x03000000,8]="object";
@wait_name[0x03000000,9]="userlock";
@wait_name[0x03000000,10]="advisory";
@wait_name[0x03000000,11]="applytransaction";
printf("Wait event times are in microseconds(us).\n");
}
usdt:/usr/local/pgsql/bin/postgres:wait__event__start
{
$time = nsecs;
$pid = pid;
$arg0 = arg0;
@wait_event_start[$pid] = $time;
@wait_event_class[$pid] = @wait_class[ $arg0 & 0xFF000000 ];
@wait_event_name[$pid] = @wait_name[ $arg0 & 0xFF000000, $arg0 & 0x00FFFFFF ];
}
usdt:/usr/local/pgsql/bin/postgres:wait__event__end
{
$time = nsecs;
$pid = pid;
if ( @wait_event_class[$pid] != "activity" && @wait_event_class[$pid] != "" )
{
@wait_event_hist[$pid, @wait_event_class[$pid], @wait_event_name[$pid]] = hist(($time - @wait_event_start[$pid])/1000);
}
}
END
{
clear(@wait_event_start);
clear(@wait_event_class);
clear(@wait_event_name);
clear(@wait_class);
clear(@wait_name);
}