Ми зіткнулися з проблемою після переміщення бази даних нашого клієнта на додатковий сервер. Це повинно було мати позитивний вплив на продуктивність сайту, але існує проблема з блокуванням таблиці в MyISAM. (Я чув про використання InnoDB замість MyISAM, але ми не можемо змінити двигун найближчим часом).
Ми можемо помітити його на запит на оновлення, який виконується, коли модератор активує коментар до статті. Це процес:
- оновлення-запит обробляється
SET status = 1 WHERE id = 5
(індекс встановлюється) - кешовані файли сторінки видаляються
У цей момент вся сторінка стає повільною. Сама база даних зайнята хвилин. Я кілька разів вибирав список процесів і бачив близько 60 записів різних селекційних запитів, які були в штаті, очікуючи блокування рівня таблиці .
1. Я не розумію, чому це оновлення в таблиці article_comments
може вплинути на оператори select для таблиці, article
щоб чекати блокування рівня таблиці. У списку процесів майже всі запити очікування були з цієї таблиці. Я читав про те, що оновлення / вставки вважають за краще вибирати і що це може спричинити такі проблеми, але сама таблиця статей не оновлюється, коли коментарі стають активованими, тому вибір не повинен чекати. Невже я це зрозумів?
2. Чи є щось, крім того, щоб змінити InnoDB, щоб запобігти такій поведінці або принаймні для покращення балансу? Мене дуже дратує те, що ця проблема не з’явилася перед переміщенням бази даних на новий сервер. Я думаю, що є якась неправильна конфігурація, але я не знаю, як ідентифікувати.
key_buffer_size
був налаштований на 1GB
. Збільшуючи це, щоб 10GB
зменшити проблему.