![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
База FB тормозит [D7, FB 1.5]
Ярослав © (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 секунд.