Уважаемый Хабр, я верю в силу твоего коллективного разума и надеюсь получить подсказку.
Есть две, практически одинаковые, базы данных, с одинаковой структурой и данными. Одинаковые, да не совсем. На одной из баз запрос на выборку выводит результат меньше чем за 1 секунду, во второй — тот же запрос работает около 4-х секунд. Причем база которая работает быстрее — больше по объему данных. Дело не в аппаратной части, базы одинаково работают на разных серверах — одна быстрее, другая медленнее. Как можно сравнить содержимое БД, таблицы, функции, чтобы найти различия? Или куда вообще копать?
UPD. Попробовал сделать так: Развернул структуру с «медленной» базы и хотел развернуть туда данные с «быстрой» — выдало ошибки. Взял структуру с «быстрой» базы и развернул туда данные с медленной — так же медленно выполняется запрос.
С индексами на первый взгляд всё нормально, но еще посмотрю конечно. Ниже как раз приводят способ как сравнить индексы. Вручную просматривать больше 200 таблиц в одной базе пока мало желания. По статистике попробую посмотреть, спасибо.
если нужно сравнить все, кроме данных (структуру, _индексы_, ключи, отношения, констрейнты), можно сделать дамп только структуры, что-то типа pg_dump -sxO database_name (s — дампить только схему, x — не дампить привилегии, O — не дампить овнера), а дальше diff
Пока нашел различие в отсутствующей колонке в нескольких таблицах и нескольких индексах, сделал так же как в «быстрой» базе, время выполнения запроса уменьшилась на секунду, но всё равно долго.
В контексте последнего уточнения «Взял структуру с «быстрой» базы и развернул туда данные с медленной — так же медленно выполняется запрос.» — может посмотреть планы запросов в быстрой базе при оригинальных и при «медленных» данных? Они у Postgres-а могут меняться в зависимости от реальных данных и накопленной статистики.
Спасибо, посмотрю. Хотя, не думаю что это поможет, т.к. «быстрая» база больше чем медленная, соответственно что в «медленной» статистики накопилось меньше.
Поздновато для спрашивающего но может будет полезно для остальных https://ksdbmerge.tools/for-postgresql
GUI под Windows, сравнивает и схему и данные, есть вполне функциональная бесплатная версия.
Я автор.