#!/usr/sbin/dtrace -wqs enum enum_server_command { COM_SLEEP, COM_QUIT, COM_INIT_DB, COM_QUERY, COM_FIELD_LIST, COM_CREATE_DB, COM_DROP_DB, COM_REFRESH, COM_SHUTDOWN, COM_STATISTICS, COM_PROCESS_INFO, COM_CONNECT, COM_PROCESS_KILL, COM_DEBUG, COM_PING, COM_TIME, COM_DELAYED_INSERT, COM_CHANGE_USER, COM_BINLOG_DUMP, COM_TABLE_DUMP, COM_CONNECT_OUT, COM_REGISTER_SLAVE, COM_STMT_PREPARE, COM_STMT_EXECUTE, COM_STMT_SEND_LONG_DATA, COM_STMT_CLOSE, COM_STMT_RESET, COM_SET_OPTION, COM_STMT_FETCH, COM_DAEMON, COM_END }; BEGIN { cmdstr[COM_SLEEP ] = "00:SLEEP "; cmdstr[COM_QUIT ] = "01:QUIT "; cmdstr[COM_INIT_DB ] = "02:INITDB "; cmdstr[COM_QUERY ] = "03:QUERY "; cmdstr[COM_FIELD_LIST ] = "04:FIELDLIST "; cmdstr[COM_CREATE_DB ] = "05:CREATEDB "; cmdstr[COM_DROP_DB ] = "06:DROPDB "; cmdstr[COM_REFRESH ] = "07:REFRESH "; cmdstr[COM_SHUTDOWN ] = "08:SHUTDOWN "; cmdstr[COM_STATISTICS ] = "09:STATISTICS"; cmdstr[COM_PROCESS_INFO ] = "10:PROC_INFO "; cmdstr[COM_CONNECT ] = "11:CONNECT "; cmdstr[COM_PROCESS_KILL ] = "12:PROC_KILL "; cmdstr[COM_DEBUG ] = "13:DEBUG "; cmdstr[COM_PING ] = "14:PING "; cmdstr[COM_TIME ] = "15:TIME "; cmdstr[COM_DELAYED_INSERT ] = "16:DELINSERT "; cmdstr[COM_CHANGE_USER ] = "17:CHANGEUSER"; cmdstr[COM_BINLOG_DUMP ] = "18:BINLOGDUMP"; cmdstr[COM_TABLE_DUMP ] = "19:TABLEDUMP "; cmdstr[COM_CONNECT_OUT ] = "20:CONNECTOUT"; cmdstr[COM_REGISTER_SLAVE ] = "21:REG_SLAVE "; cmdstr[COM_STMT_PREPARE ] = "22:STMT_PREP "; cmdstr[COM_STMT_EXECUTE ] = "23:STMT_EXEC "; cmdstr[COM_STMT_SEND_LONG_DATA] = "24:STMT_SENDL"; cmdstr[COM_STMT_CLOSE ] = "25:STMT_CLOSE"; cmdstr[COM_STMT_RESET ] = "26:STMT_RESET"; cmdstr[COM_SET_OPTION ] = "27:SET_OPTION"; cmdstr[COM_STMT_FETCH ] = "28:STMT_FETCH"; cmdstr[COM_DAEMON ] = "29:DAEMON "; cmdstr[COM_END ] = "30:END "; ts = timestamp; printf(" Time Tid RespTM CpuTM Type Len SQL\n"); } pid$target::*dispatch_command*:entry { self->tm = timestamp; self->vtm = vtimestamp; self->cmdcode = arg0; self->cmdlen = arg3; self->cmd = copyinstr(arg2); } pid$target::*dispatch_command*:entry /self->tm && self->cmdcode==23/ { this->bytes = (unsigned char *)copyin(arg2,4); this->stmtid = (unsigned int)this->bytes[0]; this->stmtid += (unsigned int)this->bytes[1]<<8; this->stmtid += (unsigned int)this->bytes[2]<<16; this->stmtid += (unsigned int)this->bytes[3]<<24; self->stmtid = this->stmtid; } pid$target::*dispatch_command*:return /self->tm/ { printf("%10d %3d %8d %8d %s %3d", (self->tm-ts)/1000, tid, (timestamp-self->tm)/1000, (vtimestamp-self->vtm)/1000, cmdstr[self->cmdcode], self->cmdlen ); } pid$target::*dispatch_command*:return /self->tm && self->cmdcode != 23/ { printf(" %s\n", self->cmd); self->tm = 0; } pid$target::*dispatch_command*:return /self->tm && self->cmdcode == 23/ { printf(" stmtid %d\n", self->stmtid); self->tm = 0; }