вівторок, 15 січня 2008 р.

Оптимізація Aggregator у Drupal: досвід із базою на 200 тисяч записів

Ще раз переконався: оптимізувати доводиться не лише власне програмне забезпечення, а й сторонні системи. У січні 2008 року на моїй інсталяції Drupal модуль Aggregator почав працювати дуже повільно після накопичення приблизно 200 тисяч записів. Aggregator збирав новини з різних джерел і зберігав їх у базі. Навантаження стало помітним навіть на багатопроцесорному сервері.

Що я змінив

Під час розбору запитів у файлі \modules\aggregator\aggregator.module я прибрав використані там LEFT JOIN і додав індекси до полів, за якими виконувалося сортування. За моїм спостереженням, після цих змін затримки істотно зменшилися.

Що перевіряти разом зі швидкістю

У дописі не збережено версії Drupal, повних запитів, планів виконання чи вимірювань до й після. Видалення LEFT JOIN може змінити набір результатів, тому повторювати таке втручання без перевірки логіки не можна.

Так само індекс для кожного поля з ORDER BY не гарантує прискорення. Документація MySQL 8.4 пояснює, що використання індексу для сортування залежить від структури запиту та вартості плану. Спочатку потрібно дослідити конкретний запит і його план EXPLAIN, а після зміни перевірити і швидкість, і правильність результату.

Немає коментарів:

Калькулятор K2: від запитання про ціну до готової комерційної пропозиції

«А скільки коштуватиме інша комплектація?» — природне запитання покупця. Якщо для відповіді менеджер щоразу відкриває таблицю, шукає коефіці...