Я немного экспериментирую с базами данных. В этом случае каждый запрос выбирает все из одной таблицы таблиц TPCH (select * from table;
). До и после каждого запроса я разбираю /proc/[pid]/io
, где [pid] - это процесс базы данных. Разница этих значений должна рассказать мне об IO запроса. Это типичный выход для MySQL (секунды, MB):Откуда берутся операции записи?
Query time RCHAR WCHAR READ_BYTES WRITE_BYTES CANCELLED_WB
query1.sql| 0.005| 0.00234| 0.00245| 0.00391| 0.00000| 0.00000
query2.sql| 0.008| 0.00043| 0.00058| 0.00391| 0.00000| 0.00000
query3.sql| 0.041| 1.37217| 1.37296| 1.37891| 0.00000| 0.00000
query4.sql| 0.270| 23.41719| 23.64796| 23.44531| 0.00000| 0.00000
query5.sql| 0.346| 23.43413| 23.58974| 23.46484| 0.00000| 0.00000
query6.sql| 1.413| 113.77629| 115.76173| 113.89453| 0.00000| 0.00000
query7.sql| 1.792| 140.49537| 168.27847| 140.64062| 0.00000| 0.00000
query8.sql| 8.847| 614.04820| 759.00238| 614.65625| 0.00000| 0.00000
Overall| 12.738| 916.54611| 1091.65626| 917.48828| 0.00000| 0.00000
Интересно, где WCHAR
(запись символьные) значения берутся. Мои запросы «все прочитают» вместо «написать что-нибудь» (так как «WRITE_BYTES» имеет значение NULL, на самом деле нет записи на диск, а записывается в cache/buffer?). Что мне здесь не хватает?
Я вижу. Таким образом, MySQL читает данные (RCHAR), обрабатывает его и представляет результаты в сокет, терминал (это то, что вы подразумеваете под tty?) Или TCH/IP-соединение (WCHAR)? Поэтому я должен попытаться измерить эти шаги ... – lupz