Модераторы: Akella

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вопрос по оптимизатору запросов, Одинаковые базы но разный Plan 
:(
    Опции темы
Frees
Дата 26.7.2010, 08:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



Есть 2 Базы с одинаковыми метаданными, отличаются только данными.

Одна из Баз стала сильно тормозить, выяснилось что в сохраненке у 1 запроса изменился план, из за чего и появились тормоза.

По какой причине запрос мог изменить свой план? баг или фича оптимизатора запросов?

зы Бекап/ресторе базы вернул изначальный план.
firebird 2.0.3



Это сообщение отредактировал(а) Frees - 26.7.2010, 08:51


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Deniz
Дата 26.7.2010, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Нужно было сделать пересчет статистики индексов.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Frees
Дата 26.7.2010, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



Deniz, поясни, зачем пересчет?


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Deniz
Дата 26.7.2010, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Со временем индексы "устаревают" и оптимизатор может перестать использовать индекс.
Если осталась старая БД с тормозами, проверь поможет ли пересчет индексов.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Frees
Дата 26.7.2010, 10:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



К сожалению я ее восстановил рестором.

 
Цитата(Deniz @  26.7.2010,  13:16 Найти цитируемый пост)
Со временем индексы "устаревают"

как понять что в базе есть устаревшие индексы, из за чего они "стареют"?

Добавлено через 2 минуты и 8 секунд
еще такой момент если я явно дописывал "сломавшемуся" запросу plan, то он начинал правильно работать.


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Deniz
Дата 26.7.2010, 11:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(Frees @  26.7.2010,  12:57 Найти цитируемый пост)
как понять что в базе есть устаревшие индексы, из за чего они "стареют"?
Посмотри вот эту статью, точнее в ней параграф "Автоматическое планирование"

Добавлено через 3 минуты и 6 секунд
PS: ручное "планирование" не есть гуд, данные (может и метаданные) меняются и оптимизатор может со временем предложить лучший план.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Frees
Дата 26.7.2010, 11:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



Цитата(Deniz @  26.7.2010,  14:11 Найти цитируемый пост)
Посмотри вот эту статью

получается изменения плана запроса это все таки фича...

актуальность статьи 93 год,она все еще верна? все еще проблема решается только принудительным обновление статистики индекса?

как с этим в последних версиях firebird?




--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Deniz
Дата 26.7.2010, 12:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(Frees @  26.7.2010,  13:38 Найти цитируемый пост)
как с этим в последних версиях firebird?
про сильно последние версии сказать не могу, но в 1.5 периодически статистику собираю.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akella
Дата 26.7.2010, 13:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Frees @  26.7.2010,  11:38 Найти цитируемый пост)
все еще проблема решается только принудительным обновление статистики индекса?

да, к сожалению, программист сам должен периодически обновлять статистику индексов.
Я в своих приложениях даже такую команду вставляю.
дельфи + FibPlus
Код

procedure TfmMain.actServiceDBExecute(Sender: TObject);
Var
 SQL:TstringList;
 fq : TpFIBQuery;
begin
  fq  := TpFibQuery.Create(nil);
  SQL := TstringList.Create;
  try
    fq.Database := DM.fibDB;
    fq.Transaction := DM.fibTransRead;

    if not fq.Transaction.InTransaction then fq.Transaction.StartTransaction;

    fq.SQL.Add( 'select RDB$INDEX_NAME from RDB$INDICES');
    fq.GoToFirstRecordOnExecute := true;
    fq.ExecQuery;
    while not fq.Eof do  begin
      sql.Add('SET STATISTICS INDEX '+fq.FieldByName('RDB$INDEX_NAME').AsString+';');
      fq.Next;
    end;
    ExecMyQuery(sql, True);

  finally
    FreeAndNil(fq);
    FreeAndNil(sql);
  end;
end;


PM MAIL   Вверх
Frees
Дата 26.7.2010, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



Цитата(Akella @  26.7.2010,  16:50 Найти цитируемый пост)
Я в своих приложениях даже такую команду вставляю.

и когда эту акцию выполняешь, или это кнопка для пользователя (типо "нажми если тормозит")?

а время выполнения этого кода на много быстрее чем бекап - ресторе?

подумаваю о кнопке  "бекап - рестор"




Это сообщение отредактировал(а) Frees - 26.7.2010, 13:57


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Deniz
Дата 26.7.2010, 14:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(Frees @  26.7.2010,  15:56 Найти цитируемый пост)
а время выполнения этого кода на много быстрее чем бекап - ресторе?
сбор статистики по всем индексам намного быстрее.
Цитата из IBAnalyst
Цитата
Сбор статистики по всем индексам может занять около 2-х минут на базе размером в 2 гига
как-то так звучало.

Добавлено через 2 минуты и 51 секунду
Цитата(Frees @  26.7.2010,  15:56 Найти цитируемый пост)
и когда эту акцию выполняешь, или это кнопка для пользователя (типо "нажми если тормозит")?
В том же IBAnalyst можно примерно отследить разницу в индексах (реально и текущее) и решить как часто запускать.
Далее в автомате настроить такой запрос по ночам, хоть каждый день.

Цитата(Frees @  26.7.2010,  15:56 Найти цитируемый пост)
подумаваю о кнопке  "бекап - рестор"
это нужно с умом делать.


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Akella
Дата 26.7.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 20
Всего: 329



Цитата(Frees @  26.7.2010,  13:56 Найти цитируемый пост)
и когда эту акцию выполняешь, или это кнопка для пользователя (типо "нажми если тормозит")?

кнопка для пользователя, но всё хочу реализовать в базе какую-то таблицу, где хранить кол-во добавленных, отредактированных, удалённых записей (можно на триггеры повесить), и через каждые, например, 100 записей в фоне выполнять пересчёт индексов.

Цитата(Frees @  26.7.2010,  13:56 Найти цитируемый пост)
а время выполнения этого кода на много быстрее чем бекап - ресторе?

конечно, если небольшая база, то ваще секунду, и пользователей не нужно отключать
PM MAIL   Вверх
Frees
Дата 26.7.2010, 18:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



меня бы больше устроило что бы оптимизатор не менял планов. если забить таблицу со статистико нулями, оптимизатор  должен будет действовать всегда одинаково. или это тупиковая идея?


Это сообщение отредактировал(а) Frees - 26.7.2010, 18:30


--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Deniz
Дата 27.7.2010, 05:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 22
Всего: 44



Цитата(Frees @  26.7.2010,  20:29 Найти цитируемый пост)
меня бы больше устроило что бы оптимизатор не менял планов. если забить таблицу со статистико нулями, оптимизатор  должен будет действовать всегда одинаково. или это тупиковая идея?
Это не правильно.
Возможно в след. версиях это поведение как-то изменят.
В любом случае, надо же делать периодический backup так вот в скрипте (там же где backup) можно собрать статистику по индексам (написав небольшую консольную программку).

Добавлено через 10 минут и 46 секунд
В дополнение несколько ссылок:
SET STATISTICS INDEX name;
скрипт для деактивации всех индексов
Для перестройки индекса:
ALTER INDEX


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Frees
Дата 27.7.2010, 06:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2233
Регистрация: 2.12.2005
Где: Екатеринбург

Репутация: 1
Всего: 54



Цитата(Deniz @  27.7.2010,  08:31 Найти цитируемый пост)
Это не правильно.

может и не правильно но как минимум будет предсказуемое поведение.

Цитата(Deniz @  27.7.2010,  08:31 Найти цитируемый пост)
В любом случае, надо же делать периодический backup

бекап надо, но то что надо делать еще и рестор не всем клиентам очевидно, поэтому и думал сделать бекап рестор в один клик ,тут много своих проблем.

пока есть 2 варианта:
1) делать SET STATISTICS при бекапе, тут опять плохо что многие не делают бекап а просто сохраняют копию файла бд (как не объясняй что это плохо)

2) кнопка для пользователя, тут другой минус пользователю сложно объяснить зачем он должен ее нажимать





--------------------
Кольцов Виктор Владимирович
PM MAIL ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Interbase"
Alex

Обязательно указание:

1. Версию InterBase (Firebird, Yaffil)

2. Способа доступа (ADO, BDE, IBX и т.д.)

  • КАК ПРАВИЛЬНО ОФОРМИТЬ КОД - ЗДЕСЬ
  • КАК ПРАВИЛЬНО УКАЗАТЬ ТЕКСТ ОШИБКИ - ЗДЕСЬ
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • FAQ раздела лежит здесь!

Если Вам понравилась атмосфера форума, заходите к нам чаще! С Уважением, Akella.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Firebird, Interbase | Следующая тема »


 




[ Время генерации скрипта: 0.0828 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.