Имеется жалкие 17 млн. строк
-------------------------------------------------------------
select count(id) from mdl_logstore_standard_log;
count
----------
17987309
(1 row)
-------------------------------------------------------------
Размеры таблиц и индексов:
public.mdl_logstore_standard_log | 4371 MB
public.mdl_logsstanlog_useconconcr_ix | 1328 MB
public.mdl_logsstanlog_couanotim_ix | 931 MB
public.mdl_logsstanlog_con_ix | 434 MB
public.mdl_logsstanlog_tim_ix | 417 MB
public.mdl_logsstanlog_id_pk | 409 MB
-------------------------------------------------------------
Получается, что размер индексов 3519 Мб, что составляет 80% от самой таблицы.
Смотрим на описание индексов в схеме. Мелкие индексы (id_pk,tim_ix,con_ix) - понятно.
----------------------------------------------------------------
<INDEXES>
<INDEX NAME="timecreated" UNIQUE="false" FIELDS="timecreated"/>
<INDEX NAME="course-time" UNIQUE="false" FIELDS="courseid, anonymous, timecreated"/>
<INDEX NAME="user-module" UNIQUE="false" FIELDS="userid, contextlevel, contextinstanceid, crud, edulevel, timecreated
</INDEXES>
----------------------------------------------------------------
Учитывая, что логи пишутся активно, получаем существенные затраты на запись логов.
А когда логи читаются ? Построение отчетов! А оно часто?
Если сделать секционирование лога, то сложные индексы будут явно ухудшать производительность.
Вопрос 1: - нафига нужен user-module и course-time?
Вопрос 2: как найти в moodle запросы на выборку данных из logstore_standard_log ? grep не даёт разумных результатов.
Нет ли протоколирования запросов к таблице ?