Это довольно простая проблема. Обычно вставка данных в таблицу работает нормально, за исключением нескольких раз, когда запрос вставки занимает несколько секунд. (Я не пытаюсь вставлять объемные данные). Поэтому я настраиваю симуляцию для процесса вставки, чтобы выяснить, почему запрос на вставку иногда занимает более 2 секунд для запуска. Джошуа предположил, что индексный файл может быть скорректирован; Я удалил идентификатор (поле первичного ключа), но задержка все еще происходит.
У меня есть таблица MyISAM: daniel_test_insert
(эта таблица начинается полностью пустой):
create table if not exists daniel_test_insert (
id int unsigned auto_increment not null,
value_str varchar(255) not null default '',
value_int int unsigned default 0 not null,
primary key (id)
)
Я вставляю в него данные, и иногда запрос на вставку занимает > 2 секунды для запуска. В этой таблице нет прочтений - записывается в последовательном порядке только одна потоковая программа.
Я выполнил тот же запрос 100 000 раз, чтобы узнать, почему запрос иногда занимает много времени. Пока что это случайное явление.
Этот запрос, например, потребовался 4.194 секунды (очень долгое время для вставки):
Query: INSERT INTO daniel_test_insert SET value_int=12345, value_str='afjdaldjsf aljsdfl ajsdfljadfjalsdj fajd as f' - ran for 4.194 seconds
status | duration | cpu_user | cpu_system | context_voluntary | context_involuntary | page_faults_minor
starting | 0.000042 | 0.000000 | 0.000000 | 0 | 0 | 0
checking permissions | 0.000024 | 0.000000 | 0.000000 | 0 | 0 | 0
Opening tables | 0.000024 | 0.001000 | 0.000000 | 0 | 0 | 0
System lock | 0.000022 | 0.000000 | 0.000000 | 0 | 0 | 0
Table lock | 0.000020 | 0.000000 | 0.000000 | 0 | 0 | 0
init | 0.000029 | 0.000000 | 0.000000 | 1 | 0 | 0
update | 4.067331 | 12.151152 | 5.298194 | 204894 | 18806 | 477995
end | 0.000094 | 0.000000 | 0.000000 | 8 | 0 | 0
query end | 0.000033 | 0.000000 | 0.000000 | 1 | 0 | 0
freeing items | 0.000030 | 0.000000 | 0.000000 | 1 | 0 | 0
closing tables | 0.125736 | 0.278958 | 0.072989 | 4294 | 604 | 2301
logging slow query | 0.000099 | 0.000000 | 0.000000 | 1 | 0 | 0
logging slow query | 0.000102 | 0.000000 | 0.000000 | 7 | 0 | 0
cleaning up | 0.000035 | 0.000000 | 0.000000 | 7 | 0 | 0
(Это сокращенная версия команды SHOW PROFILE, я выбросил столбцы, которые были равны нулю.)
Теперь обновление имеет невероятное количество контекстных переключателей и мелких ошибок страницы. Открытые_таблицы увеличиваются примерно на 1 в 10 секунд в этой базе данных (не заканчиваются из пространства table_cache)
Статистика:
-
MySQL 5.0.89
-
Оборудование: 32 гигабайта RAM/8 ядер @2,66 ГГц; raid 10 SCSI harddisks (SCSI II???)
-
У меня были запрошены жесткие диски и контроллер рейда: сообщений об ошибках не сообщается. Процессоры работают примерно на 50%.
-
iostat -x 5 (сообщает об утилизации жестких дисков менее 10%) верхний отчет нагрузки в среднем около 10 за 1 минуту (нормальный для нашей машины db)
-
В области подкачки используется 156k (32 гигабайта RAM)
Я затрудняюсь выяснить, что вызывает это отставание в производительности. Это НЕ происходит на наших низковольтных подчиненных устройствах, только на нашем высокопроизводительном сервере. Это также происходит с таблицами памяти и innodb. У кого-нибудь есть предложения? (Это производственная система, поэтому ничего экзотического!)