поддержка индекса firebird: замедляется после перезагрузки - PullRequest
0 голосов
/ 23 мая 2018

У меня есть какая-то таблица в базе данных с более чем 40 млн. Записей.На перезагрузку компьютера, на первый set statistics index id (для каждого индекса) я трачу около минуты.

После первого раза команда coast всего несколько мс.При перезагрузке службы или перезагрузке программы у меня нет этой проблемы: я вижу это поведение только при перезагрузке и только при первом выполнении перерасчета индекса.

Set statistics index index_dummy;

Итак, вопрос: как избежать этой «функции»?

1 Ответ

0 голосов
/ 23 мая 2018

Решение простое: не делайте set statistics после каждой перезагрузки (или не перезагружайте его так часто, что эта задержка в одну минуту становится заметной).

Статистика индекса, которую вычисляет Firebird, относительно проста,поэтому, если ваш объем данных (количество строк) не будет регулярно меняться на порядки или селективность («уникальность» значений индекса) сильно варьируется между «очень уникальными» и «очень идентичными», пересчет, вероятно, не окажет заметного влияния на оптимизатор,потому что вычисленная статистика будет лишь немного отличаться, что делает значение ее пересчета небольшим.

Причина, по которой это занимает много времени в первый раз после перезагрузки, возможно потому, что ваша база данных (или, по крайней мере,страницы индекса) может полностью вписаться в кеш файловой системы.Выполнение set statistics для всех индексов сразу после загрузки приведет к чтению всех страниц индекса в кэш.

Последующие повторные выполнения set statistics смогут читать страницы из кэша, что исключает попадание на диск., что делает его значительно быстрее.

Имейте в виду, вполне возможно, что это использование set statistics на самом деле является преднамеренным и используется (злоупотребляет) для заполнения кеша файловой системы.Таким образом, после начального снижения производительности при запуске все другие пользователи базы данных получают преимущества от загрузки всех индексов в кэш файловой системы.

Если это рабочая процедура в вашей компании, вы можетеЯ хочу спросить вокруг , почему нужно делать set statistics после каждой перезагрузки (потому что действительно: кроме этого трюка, нет необходимости регулярно делать это, если объем и уникальность значений индекса относительно стабильны).

...