Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.01.14;
Скачать: CL | DM;

Вниз

Оптимизация при открытии окна   Найти похожие ветки 

 
Константин_   (2006-12-26 09:36) [0]

Ситуация следующая в обрабочике события формы OnShow прописана процедура выполняющая несколько sql запросов... и при открытии формы ощущаются страшные тормоза, как можно оптимизировать код в данной ситуации?
И еще вопрос если выносить исполнение sql запросов в отдельный процесс, то как это сделать?
Спасибо.


 
oxffff ©   (2006-12-26 09:44) [1]


> открытии формы ощущаются страшные тормоза,


Да ты что. Что же это могло бы быть?


> выносить исполнение sql запросов в отдельный процесс,


Лучше сразу на другой компьютер.


 
Sergey13 ©   (2006-12-26 09:47) [2]

> прописана процедура выполняющая несколько sql запросов

Например можно попробовать их оптимизировать.


 
Константин_   (2006-12-26 09:53) [3]

Удалено модератором
Примечание: Просьба выполнена, ни он вякать не будет, но и ты тоже.


 
Sergey13 ©   (2006-12-26 09:55) [4]

> [3] Константин_   (26.12.06 09:53)

Тогда тебе не OnShow надо оптимизировать, а задуматься о переходе на SQL-сервер.


 
oxffff ©   (2006-12-26 09:57) [5]


> 2 oxffff не знаешь чем помочь, сиди и не вякай...


Тебе уже не помочь.
Один твой "вынести в отдельный процесс" чего стоит.

А вообще к старшим относится стоит с уважением.


 
Константин_   (2006-12-26 10:01) [6]

Удалено модератором
Примечание: Заработает ReadOnly, вот только до конца дочитаю


 
evvcom ©   (2006-12-26 10:02) [7]

> [3] Константин_   (26.12.06 09:53)
> не знаешь чем помочь, сиди и не вякай...

Полегче, а то можно write only заработать :)))

> [5] oxffff ©   (26.12.06 09:57)
> Один твой "вынести в отдельный процесс" чего стоит.

Эт точно (с) Сухов

А есть смысл выполнять кучу запросов именно в OnShow? Они все показываются на данной форме?


 
Константин_   (2006-12-26 10:10) [8]

evvcom да, они отображаются в нескольких DBGrid на данной форме... пробовал открытать их в той процедуре в которой открывается форма, ситуация таже - тормозит


 
ЮЮ ©   (2006-12-26 10:12) [9]

Если ты их вынесешь куда-то, быстрей они выполняться не будут. Пока они не ывыполнились, аользователю твоя программа нафиг не нужна. Значем ему бесполезная форма. Выполняй их на Create, а пользователю покажи красивую Splash форму, пусть любуется.


 
Sergey13 ©   (2006-12-26 10:13) [10]

> [8] Константин_   (26.12.06 10:10)

Почему сервера под запретом? Много ли данных в БД?


 
ЮЮ ©   (2006-12-26 10:15) [11]


> да, они отображаются в нескольких DBGrid на данной форме


1) Избавься от TTable
2) Пусть пользователь сначала введет критерии отбора данных, а затем выполняется запрос. Хочет всю таблицу - пусть потом ждет. Выберет десяток-другой - получит быстро.


 
Константин_   (2006-12-26 10:22) [12]

Две таблиц по 60 тыс записей, остальные в районе 5 тыс.
Если переходить на сервер, всю программу надобудет перелопачивать, да и возможности нет ставить выделеный сервак под эту программу + лицензию ни кто не купит. короче затратить они готовы 0 руб. а получить хотят все...


 
Константин_   (2006-12-26 10:25) [13]

2 ЮЮ у меня TQuery ... а если не получиться с оптимизацией то так и сделаю - Splash


 
ЮЮ ©   (2006-12-26 10:26) [14]


> Две таблиц по 60 тыс записей, остальные в районе 5 тыс.


И всё тащишь на клиента? См [11].


 
Sergey13 ©   (2006-12-26 10:29) [15]

> [12] Константин_   (26.12.06 10:22)

Программу лопатить придется. Но не так уж и сильно, раз все равно на запросах работаешь. Кроме того сделав 1 раз нормально избавишь себя от подобных проблем в будущем - тоже экономия.
Выделенный сервак? А сейчас где лежит? Того где лежит 100% хватит на сервер БД. Сервера есть и бесплатные и очень неплохие, например FireBird.


 
Константин_   (2006-12-26 10:29) [16]

Нет идет выборка из одной таблици по ID получается около 30 - 40 записей, впорой запрос из табл. с 5 тыс - на выходе до 10, третий из табл 5-10 тыс. на выходе 20-30 записей.


 
oxffff ©   (2006-12-26 10:30) [17]


> Константин_   (26.12.06 10:01) [6]
> Sergey13 с радостью бы, но не могу ((
>
> 2 oxffff старшии должни заслуживать уважения, а не страдать
> фигней...


Ого. Страдаешь то ты. Причем сам от себя


 
Константин_   (2006-12-26 10:35) [18]

Удалено модератором


 
ЮЮ ©   (2006-12-26 10:35) [19]


> Нет идет выборка из одной таблици по ID получается около
> 30 - 40 записей, впорой запрос из табл. с 5 тыс - на выходе
> до 10, третий из табл 5-10 тыс. на выходе 20-30 записей.
>


Тогда непонятно, откуда такие тормоза. Наверное в глубинах ДатаМодуля где-то завалялся TTable со времен сотворения проекта. На каком запросе самые большие тормоза? Тащи сюда - на оптимизацию :)


 
evvcom ©   (2006-12-26 10:35) [20]

> [16] Константин_   (26.12.06 10:29)

3 запроса с итогом <100 записей? Это что-то с sql-ем у тебя. Скорее всего в нем лажа какая-то.


 
oxffff ©   (2006-12-26 10:37) [21]


> ЮЮ ©   (26.12.06 10:26) [14]
>
> > Две таблиц по 60 тыс записей, остальные в районе 5 тыс.
>  
>
>
> И всё тащишь на клиента? См [11].


Если канал слабый здесь поможет пре-Fetch по 30-50 записей.


 
Sergey13 ©   (2006-12-26 10:39) [22]

> [18] Константин_   (26.12.06 10:35)

1. Дело твое. Но без перехода проблемы эти будут нарастать.

2. После первого показа формы, если перезапросить в енй инфу, тормоза остаются или нет?


 
Константин_   (2006-12-26 11:00) [23]


 qAkt.SQL.Clear;
 qAkt.SQL.Append("select kod,dogovor,ndogovor,suma,sumall,sumnds,tarifname,date1,date2,p1,p2,dateedit,dat ebuh,kl,akt,dateakt,kubf,kudedit");
 qAkt.SQL.Append("from """+DbfPath+"Akt.dbf""");
 qAkt.SQL.Append("where kod="""+DM.TablePredKOD.AsString+"""");
 qAkt.Open;

вот этот запрсо работает с табл 60 тыс записей, он и тормозит


 
Константин_   (2006-12-26 11:04) [24]

2 Sergey13 Да, но меньше


 
ЮЮ ©   (2006-12-26 11:04) [25]

Так это же поиск по текстовому полю, по которому, наверняка, и индекса нет, а говорил по Id-ам


 
oxffff ©   (2006-12-26 11:07) [26]


> вот этот запрсо работает с табл 60 тыс записей, он и тормозит


ОГО. Akt.dbf
Индексация по kod произведена?


 
Sergey13 ©   (2006-12-26 11:12) [27]

> [24] Константин_   (26.12.06 11:04)

Если есть индекс, то возможно это он закачивается на клиента.


 
evvcom ©   (2006-12-26 11:15) [28]

> [23] Константин_   (26.12.06 11:00)

1. Убери динамическое создание SQL.
2. Заведи алиас, чтобы убрать "from """+DbfPath+"Akt.dbf"""
3. Используй параметры.

Ну а вопросы тебе уже задали.


 
ЮЮ ©   (2006-12-26 11:17) [29]


> Если есть индекс, то возможно это он закачивается на клиента.


Зачем БДЕ при выполнении запроса закачивать индекс таблицы на клиента?


 
oxffff ©   (2006-12-26 11:18) [30]


> Sergey13 ©   (26.12.06 11:12) [27]
> > [24] Константин_   (26.12.06 11:04)
>
> Если есть индекс, то возможно это он закачивается на клиента.
>


Видимо DbfPath до шары.
Вот и затраты на redirect + работа по сети + нет индекса.


 
Константин_   (2006-12-26 11:33) [31]

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

> evvcom ©   (26.12.06 11:15) [28]
>
> > [23] Константин_   (26.12.06 11:00)
>
> 1. Убери динамическое создание SQL.
> 2. Заведи алиас, чтобы убрать "from """+DbfPath+"Akt.dbf"""
> 3. Используй параметры.
>

насколько я теряю в скорости без этого?


 
ЮЮ ©   (2006-12-26 11:39) [32]

1, 3 дают выигрыш при многократнов выполнении запроса в цикле, тем более на сервере. Здесь же - выигрыш небольшой.
2. Всегда использую TDataBase и затем простые имена таблиц, т.е. from Akt

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

Одним запросом больше - и такие тормоза? Тогда тот запрос давай на свет. Или он такой же простой?


 
Константин_   (2006-12-26 11:45) [33]

он такойже простой, но индекс стоял по одному полю, сейчас поменял - улучшение на лицо.
 
 qVodomer_p.Close;
 qVodomer_p.SQL.Clear;
 qVodomer_p.SQL.Add("select *");
 qVodomer_p.SQL.Add("from """+DbfPath+"Vodomer_p.dbf""");
 qVodomer_p.SQL.Add("where kod="""+qVodomer.Fields[0].AsString+""" and kodv="""+qVodomer.Fields[1].AsString+"""");
 qVodomer_p.Open;

Ребята спасибо за помощь, иначе бы про индексы и не вспомнил.
Еще раз спасибо.


 
evvcom ©   (2006-12-26 11:46) [34]

> [31] Константин_   (26.12.06 11:33)
> насколько я теряю в скорости без этого?

В твоем случае скорее всего немного. Но...
1. Используя статическое определение запроса, ты меньше путаешься в тексте, так как он становится наглядным.
2. Протестировать "скорость" выполнения запроса ты можешь уже в дизайн-тайм и именно этого запроса, а не в купе со всеми другими, явно или неявно выполняющимися.
3. Легче понять твой запрос и нам, так как видим именно запрос, не обремененный лишними апострофами и прочей ерундой, а не смесь мух и котлет.
4. И прочее.



Страницы: 1 вся ветка

Текущий архив: 2007.01.14;
Скачать: CL | DM;

Наверх




Память: 0.55 MB
Время: 0.042 c
2-1166796734
Ega23
2006-12-22 17:12
2007.01.14
Может ли функция от интерфейса быть виртуальной?


15-1166285556
TUser
2006-12-16 19:12
2007.01.14
Да не изведется у нас суверенная демократия!


3-1161809652
softsapiens
2006-10-26 00:54
2007.01.14
Обновление базы данных


2-1166533930
Steep
2006-12-19 16:12
2007.01.14
Процедуры и функции


15-1166528745
vidiv
2006-12-19 14:45
2007.01.14
Можно ли научить винду не использовать своп...