Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

База FB тормозит [D7, FB 1.5]


Страницы:   1 2 3

Ярослав ©   (2005-06-01 07:54:00) 

Подскажите с какой частотой следует собирать статискику индексов, и перекомпилировать ХП.

Есть небольшая БД примерно 30МБ в таблицах примерно по 40000-60000 записей, и вот она переодически начинает тормозить, после сбора статистики индексов и перекомпиляции ХП и триггеров все нормально, но если раньше это приходилось делать раз в месяц а то и реже, то теперь каждую неделю... не слишком ли часто?

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


stud   (2005-06-06 12:33:00) [1]


> "select count(*) from vremennayatablica"

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

> но использовать его в данном случае не возможно.

уверен что возможно. твоя таблица формируется на основании существующих данных, т.е. по сути это много селектов результат которых будет не запись во временную таблицу а формирование этого самого просмотра. т.е. в простешем случае должно исчезнуть выражение insert into ......


Ярослав   (2005-06-06 12:27:00) [2]

>> обсуждаем то - не видя что
Это точно, я понимаю что такое view и с чем его едят, но использовать его в данном случае не возможно. Временная таблица действительно сильно мусорит.
В Desdechado ©   (01.06.05 10:52) [9]
прозвучало "select count(*) from vremennayatablica" дак я вставил это в конце XP и теперь жду произойдут ли изменения т.е. станет ли база тормозить, результат будет известен самое малое через неделю, но после Backup/Restore может и месяц, если тормозить будет, буду дамать как логику менять. Постоянный Backup/Restore не выход, сервер во вне рабочее время выключаеться. А самому его делать даже раз в месяц это не дело.
Но пока буду ждать, когда еще такой эксперемент представится провести на реальной базе...


Ярослав   (2005-06-06 12:25:00) [3]

>> обсуждаем то - не видя что
Это точно, я понимаю что такое view и с чем его едят, но использовать его в данном случае не возможно. Временная таблица действительно сильно мусорит.
В Desdechado ©   (01.06.05 10:52) [9]
прозвучало "select count(*) from vremennayatablica" дак я вставил это в конце XP и теперь жду произойдут ли изменения т.е. станет ли база тормозить, результат будет известен самое малое через неделю, но после Backup/Restore может и месяц, если тормозить будет, буду дамать как логику менять. Постоянный Backup/Restore не выход, сервер во вне рабочее время выключаеться. А самому его делать даже раз в месяц это не дело.
Но пока буду ждать, когда еще такой эксперемент представится провести на реальной базе...


stud   (2005-06-06 12:09:00) [4]


> а причем тут view

view не будет "мусорить" как твоя таблица, т.е. один из факторов торможения будет устранен.
и в обшем получается, что обсуждаем то - не видя что))
поэтому не можем понять что у тебя есть и почему ты отказываешся от того, что предлагают


Desdechado   (2005-06-06 11:57:00) [5]

[44]
2 - самое прямое отношение - накопление старых версий записей (мусора), из-за чего ветка и возникла
3 - именованный или нет курсор обычно разницы нет, просто для именованных в MSSQL сделали альтернативное понятие "временная таблица", что по сути почти то же самое в контексте сессии пользователя

и не надо на дыбы становиться. мы тебе помочь хотим. ты же за этим сюда пришел?


Ярослав   (2005-06-06 11:48:00) [6]

>> stud ©   (06.06.05 11:41) [45]
Не селект а for select т.е. с обработкой + каждый раз новые входные условия, а причем тут view?


stud   (2005-06-06 11:44:00) [7]


> Ко временным таблицам то как относится?

нету в фб временных таблиц! это самая обычная таблица со всеми вытекающими последствиями.
и если она часто меняется то "мусора" в базе будет достаточно, чтобы тормозилась работа


stud   (2005-06-06 11:41:00) [8]


> for select

зачем делать селект, потом эти данные записывать в таблицу из которой потом делать селект?
вынести этот селект в качестве формирующего view


Ярослав   (2005-06-06 11:23:00) [9]

>> Desdechado ©   (06.06.05 10:56) [42]
>> Внутрь FOR SELECT можно вложить сколько угодно дополнительных мелких (и не только) запросов. При этом не обязательно втискивать их в условие самого FOR SELECT, часто удобнее внутрь обработки его результата.

Все это я знаю....

>> 1
А жаль, но и в IB/FB их без труда можно сделать.
>> 2
Ну и что, это здесь причем??? Ко временным таблицам то как относится?
>>
Это вообще о чем? Какой еще синоним? И какая разница имеет курсор имя или нет?


Carmen   (2005-06-06 11:15:00) [10]

Мой первоначальный вариант отчетов был основан на одном запросе. Как показала практика такие отчеты формируются очень долго. Второй вариант отчетов формировался при помощи ХП.
  Я считаю Ярослав надо оптимизировать запросы. Один запрос можно разбить на два. Иногда помогает, даже, поменять местами связанные таблицы и скорость выполнения возрастает.


Desdechado   (2005-06-06 10:56:00) [11]

[38]
Внутрь FOR SELECT можно вложить сколько угодно дополнительных мелких (и не только) запросов. При этом не обязательно втискивать их в условие самого FOR SELECT, часто удобнее внутрь обработки его результата.
Пример с MSSQL некорректен, ибо:
1. MSSQL имеет спец механизмы обработки временных таблиц, а FB - нет
2. FB - версионник, т.е. хранит много версий одной записи, а MSSQL - блокировочник, т.е. только текущую
3. в MSSQL реализация временных таблиц - это практически синоним для таких вот курсоров. "Общественность" настояла, не желая связываться с именованными курсорами.


Carmen   (2005-06-06 10:23:00) [12]

У меня отчеты формируются с привязкой к л/с, льготе, подстанции, КТП, линии .... Чем это не группы?


Ярослав   (2005-06-06 10:07:00) [13]

>> а если view создать вместо таблицы?
А это к чему? view вместо временной таблицы куда помещаются данные из for select, это как?


stud   (2005-06-06 09:59:00) [14]


> На сколь я вижу, тут группа фигурирует...

если не секрет где?


> так вот временная таблица его заменяет

а если view создать вместо таблицы?


Ярослав   (2005-06-06 09:47:00) [15]

Сборка мусора вроде помогла, пока тормозов не видно.
А на счет того что использовать for select или временную таблицу, это зависит от условий, т.е. у меня в одном for select имеется вложенный и как не крути он там нужен, так вот временная таблица его заменяет, за счет чего и увеличивается производительнось причем весьма заметно. И как в этом случяе без нее обойтись? Конечно можно менять логику базы вообще, но зачем, в MS SQL есть временные таблицы и ими все вовсю пользуются, их даже в книгах по MS SQL рекомендуют использывать для избавления от курсоров (тот же for select). Ни чего плохого я в них не вижу.


Виталий Панасенко   (2005-06-06 09:47:00) [16]


> stud ©   (06.06.05 09:25) [36]

На сколь я вижу, тут группа фигурирует...

> вп   (03.06.05 17:22) [31]


stud   (2005-06-06 09:25:00) [17]


> А вообще я спроси это.. :-)

а где здесь в исходных данных фигурирует группа?

>> Л/с Вх    Оплата начисленно Исх
> > 100 1,20  5,00    10,00     6,20


stud   (2005-06-06 09:23:00) [18]


> Как с помощью запроса/ХП получить такой набор (к
> примеру):

тут обычный селект, с условием по л/с=100, чтобы получить суммарные данные
select л/с, сум(вх), сум(оплачено), сум(начислено), сум(исх) from л/с where л/с=100
group by л/c


вп   (2005-06-06 09:09:00) [19]


> carmen ©   (03.06.05 19:51) [33]
> Лично я пишу АРМы для водоканала, РЕМ, Газа, ЖЕка. Каждая
> база содержит историю движения начисления, оплати, субсидий,
> контрольних обходов, льгот и т.п. В каждой базе более 500
> тис. записей (проги работают около 5 лет). Все отчеты, в
> т.ч. и развернутую сальдовку (вся информация о клиенте,
> начисления, оплаты, коректировки и т.д.) по всех абонентах
> (23тис.-51тис. абонентов) формирую без всяких временных
> таблиц используя хранимые процедуры. Время выболнения всреднем
> 5-15 секунд.

Согласен... Но у вас привязка (по идеи) только к л/с... А у меня еще и группам... При этом оплата идет на л/с, а оборотка - по группам и л/с...И показать я должен и оплату, и входящий остаток, и исходящий остаток Да, и отчет делает менее 2-х секунд.
И все же, упрощу задачу.. :-). Как с помощью запроса/ХП получить такой набор (к примеру):
л/с вх   оплачено начисленно  исх
100 1,20   5,00     10,00     6,20
100 0,00   5,00      6,00     1,00
100 0,00   5,00      4,00    -1,00

При этом на л/с должно "упасть" в исходящий 6,20... Для каждой строки различие - только по группе..А сам л/с - одна и та же запись в таблице л/с


carmen   (2005-06-03 19:51:00) [20]

Лично я пишу АРМы для водоканала, РЕМ, Газа, ЖЕка. Каждая база содержит историю движения начисления, оплати, субсидий, контрольних обходов, льгот и т.п. В каждой базе более 500 тис. записей (проги работают около 5 лет). Все отчеты, в т.ч. и развернутую сальдовку (вся информация о клиенте, начисления, оплаты, коректировки и т.д.) по всех абонентах (23тис.-51тис. абонентов) формирую без всяких временных таблиц используя хранимые процедуры. Время выболнения всреднем 5-15 секунд.


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо