Spec-Zone .ru
спецификации, руководства, описания, API
|
Сетевые зонды контролируют передачу информации от сервера MySQL, и клиенты всех заменяет сеть вводом с клавиатуры. Зонды определяются следующим образом:
net-read-start()net-read-done(status, bytes)net-write-start(bytes)net-write-done(status)
net-read-start
: Инициированный, когда сетевая операция
чтения запускается.
net-read-done
: Инициированный, когда сетевая операция
чтения завершается. status
integer
представление статуса возврата для работы, 0
для успеха и 1
для отказа. bytes
параметром является
целое число, определяющее число чтения байтов во время процесса.
net-start-bytes
: Инициированный, когда данные пишутся
сетевому сокету. Единственный параметр, bytes
, определяет число байтов,
записанных сетевому сокету.
net-write-done
: Инициированный, когда сетевая операция
записи завершилась. Единственный параметр, status
, целое число,
представляющее статус возврата для работы, 0
для успеха и 1
для отказа.
Можно использовать сетевые зонды, чтобы контролировать, время потратило чтение из и запись в сетевые клиенты во
время выполнения. Следующий сценарий D обеспечивает пример этого. И совокупное время для чтения или записи
вычисляется, и число байтов. Отметьте, что динамический переменный размер был увеличен (использование dynvarsize
опция) справляться с быстрым увольнением человека зондирует для
сетевых чтений/записей.
#!/usr/sbin/dtrace -s#pragma D option quiet#pragma D option dynvarsize=4mdtrace:::BEGIN{ printf("%-2s %-30s %-10s %9s %18s %-s \n", "St", "Who", "DB", "ConnID", "Dur microsec", "Query");}mysql*:::query-start{ self->query = copyinstr(arg0); self->who = strjoin(copyinstr(arg3),strjoin("@",copyinstr(arg4))); self->db = copyinstr(arg2); self->connid = arg1; self->querystart = timestamp; self->netwrite = 0; self->netwritecum = 0; self->netwritebase = 0; self->netread = 0; self->netreadcum = 0; self->netreadbase = 0;}mysql*:::net-write-start{ self->netwrite += arg0; self->netwritebase = timestamp;}mysql*:::net-write-done{ self->netwritecum += (timestamp - self->netwritebase); self->netwritebase = 0;}mysql*:::net-read-start{ self->netreadbase = timestamp;}mysql*:::net-read-done{ self->netread += arg1; self->netreadcum += (timestamp - self->netreadbase); self->netreadbase = 0;}mysql*:::query-done{ this->elapsed = (timestamp - self->querystart) /1000000; printf("%2d %-30s %-10s %9d %18d %s\n", arg0, self->who, self->db, self->connid, this->elapsed, self->query); printf("Net read: %d bytes (%d ms) write: %d bytes (%d ms)\n", self->netread, (self->netreadcum/1000000), self->netwrite, (self->netwritecum/1000000));}
Выполняя вышеупомянутый сценарий на машине с удаленным клиентом, можно видеть, что приблизительно одна треть времени, проведенного, выполняя запрос, связывается с обратной записью результатов запроса клиенту.
St Who DB ConnID Dur microsec Query 0 root@::ffff:192.168.0.108 test 31 3495 select * from t1 limit 1000000Net read: 0 bytes (0 ms) write: 10000075 bytes (1220 ms)