Страница 1 из 1

Сборка мусора по индексам

Добавлено: 23 авг 2007, 18:22
StriderMan
Добрый день!

По некоторым индексам в базе скапливается много дубликатов, на FB 1.5 лечили при помощи INACTIVE/ACTIVE, на 2.0 такое не прокатывает, ругается на уникальный CONSTRAINT. Как вариант рассматривали ... DROP CONSTRAINT/... CREATE CONSTRAINT, однако если есть активные транзакции, интересующеся этим индексом, то CREATE не проходит. А главная проблема в том, что потенциально БД может работать круглосуточно и 7 дней в неделю, гарантии отсутствия подключений нет.
Есть ли еще какой способ сборки дубликатов в индексах?

Может есть какие-нибудь статьи на тему обслуживания круглосуточных БД? Буду рад ссылкам.

Спасибо!

Добавлено: 23 авг 2007, 18:27
WildSery
Каких ещё дубликатов? О чём вообще речь идёт?
А самое интересное мне - как сказываются эти "дубликаты" на работе?

Добавлено: 23 авг 2007, 18:27
Merlin
Сборке мусора всё едино - что в индексах, что не в индексах. Главное - чтоб долгоиграющих транзакций не было.

Добавлено: 23 авг 2007, 18:37
StriderMan
WildSery писал(а):Каких ещё дубликатов? О чём вообще речь идёт?
А самое интересное мне - как сказываются эти "дубликаты" на работе?
Речь идет о статистике, выдаваемой gstat'ом и анализируемой при помощи IBAnalyst.
например:
INDEX UNQ_.... keys: 3183, MaxDups: 1060, TotalDup: 3180

дубликаты замедляют поиск при помощи этого индекса
Сборке мусора всё едино - что в индексах, что не в индексах. Главное - чтоб долгоиграющих транзакций не было.
SELECT COUNT(*) для индексов не помогает к сожалению, а почему не собирает автоматически - непонятно.

Добавлено: 23 авг 2007, 18:59
dimitr
да вы там весельчаки - при круглосуточной нагрузке выключать индексы констрейнтам. Вы хоть контрольный рестор бекапов практикуете?
SELECT COUNT(*) для индексов не помогает к сожалению, а почему не собирает автоматически - непонятно
ищите причину, должен помогать

Добавлено: 23 авг 2007, 19:17
StriderMan
dimitr писал(а):да вы там весельчаки - при круглосуточной нагрузке выключать индексы констрейнтам.

Пока это на рабочую базу не пошло, просто неудачные эксперименты :)
Вы хоть контрольный рестор бекапов практикуете?
Это оставляем на совести конечного юзера.
ищите причину, должен помогать
Т.е. SELECT COUNT(*) FROM TABLENAME теоретически должен собрать мусор по ВСЕМ индексам таблицы TABLENAME ? Правильно понимаю?

Добавлено: 23 авг 2007, 19:19
Merlin
StriderMan писал(а): Т.е. SELECT COUNT(*) FROM TABLENAME теоретически должен собрать мусор по ВСЕМ индексам таблицы TABLENAME ? Правильно понимаю?
Если его не держит какая-нибудь застрявшая транзакция. Особенно снапшот.

Добавлено: 23 авг 2007, 19:31
StriderMan
Merlin писал(а):Если его не держит какая-нибудь застрявшая транзакция. Особенно снапшот
ну это понятно. Однако вот есть база, в которой версий записей в таблице нет, а ключей индекса по одному полю в несколько раз больше чем записей

Добавлено: 23 авг 2007, 19:36
WildSery
StriderMan писал(а):INDEX UNQ_.... keys: 3183, MaxDups: 1060, TotalDup: 3180
дубликаты замедляют поиск при помощи этого индекса
Ужас. И сильно замедляют?

Мы вона пока на 2-ку не перелезли (там сборка мусора шустрая), наоборот сборку выключаем на весь день, чтоб не мешалась. По полтора лимона версий кое-где получается. Сколько там дупов - а фиг его знает.

Добавлено: 23 авг 2007, 19:56
kdv
Люди!!! Читайте хелп к ibanalyst!!! Откройте содержание хелпа, там есть "дополнительные вопросы и ответы". И написано как перестраивать индексы по констрейнтам. В любом случае, "скапливается много дубликатов" - это ахинея полная. Дубликатов в ключе столько, сколько их в столбце. Если мусор не собирается, опять же читайте хелп к IBA, там статья есть о том что вы видите на экране IBAnalyst, почему индексы "плохие" и т.п.

Добавлено: 24 авг 2007, 05:56
stix-s
Судя по
INDEX UNQ_....
названию индекс уникальный?
если да, то как там вообще дубликаты получены?

Добавлено: 24 авг 2007, 10:41
hvlad
StriderMan писал(а):ну это понятно. Однако вот есть база, в которой версий записей в таблице нет, а ключей индекса по одному полю в несколько раз больше чем записей
Есть такая особенность. Но наступить на неё - это нужно постараться.
Постоянно вставляете и удаляете одни и те же ключи на один и теже места (db_key).
Лучше иметь лишние ключи в индексе, чем отсутствующие...

Добавлено: 24 авг 2007, 12:03
StriderMan
stix-s писал(а):индекс уникальный?
если да, то как там вообще дубликаты получены?
Да, индекс уникальный, в том вся и засада. теоретически дубликатов быть не должно.
Есть такая особенность. Но наступить на неё - это нужно постараться.
Постоянно вставляете и удаляете одни и те же ключи на один и теже места (db_key).
Лучше иметь лишние ключи в индексе, чем отсутствующие...
специфика базы такова что в нее делается большое количество INSERT'ов и UPDATE'ов ЕЖЕДНЕВНО, вплоть до удаления и вставки почти всех записей всех таблиц, при этом размер базы относительно небольшой - как правило 10-100мб после backup/restore

БД используется во фронтофисном решении, соответственно идет очень активный обмен с бэком.