Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.07.2008, 08:56   #1
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
Смущение Вопросы о оптимизации работы с СУБД

Доброго времени суток.
Вот зерно сомнений мне тут посеяли коллеги.

В общем я утверждаю что запрос от клиента серверу типа
Код:
Select * from tablica
будет сильнее нагружать сеть чем запрос
Код:
Select bed,fractal,unific from tablica
при наличии в таблице 25 полей и 50 000 записей.
Между клиентом и сервером 5 свичей

Я прав в своих догадках?

И еще вопрос: Если к серверу подключено 46 терминалов, все они интенсивно нагружают сервер запросами, работают с ним, то что лучше нагружать сервер чтоб он выполнял рассчет сложных функций,
результаты которых являются частью запроса

Код:
select * from table where macs=getaurcode()
или пусть клинеты вычисляют тяжелые функции, не напрягая сервер

Код:
select * from table where macs=124825656
Здесь getaurcode() достаточно сложная многоцикловая функция

Ну и последний вопрос: Во в Делфи например подключение к БД делается примерно так: ADOQuery.Open отключение ADOQuery.close
Вопрос: Что лучше держать подключение, не делая ADOQuery.close (при этом заставляя сервер держать подключения около 40 одновременно) или открыть, получить данные и закрыть (ADOQuery.close). Облегчит ли это нагрузку самого сервера СУБД?

Ну и конечно спасибо за конструктивные ответы )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.07.2008, 10:14   #2
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Я прав в своих догадках?
Да

Цитата:
что лучше нагружать сервер чтоб он выполнял рассчет сложных функций, ... или пусть клинеты вычисляют тяжелые функции, не напрягая сервер
Сервер.

Цитата:
Что лучше держать подключение, не делая ADOQuery.close (при этом заставляя сервер держать подключения около 40 одновременно) или открыть, получить данные и закрыть (ADOQuery.close). Облегчит ли это нагрузку самого сервера СУБД?
ИМХО здесь дело не столько в ADOQuery, сколько в количестве ADOConnection в вашем приложении. ADOConnection должен быть только один. Если вы сделали ADOQuery.Open или ADOQuery.ExecSQL, значит у вас уже было обращение к серверу. Облегчить нагрузку сервера можно только не обращаясь к нему. А вообще закрывать датасеты после их использования обязательно. Иначе наблюдается расход памяти.
edgy вне форума Ответить с цитированием
Старый 21.07.2008, 10:21   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну-у-у НАйисчерпывающий ответ.
Благодарствую.
Значит постораюсь настаивать на как можно меньшем количестве обращений, и закрытий сессий сразу же после получения данных.

А если я не использую ADOConnection, а сразу через ADOQuery?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 21.07.2008, 10:50   #4
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
А если я не использую ADOConnection, а сразу через ADOQuery
0_о это как? Ведь сам по себе компонент ADOQuery не может подключиться к серверу, он толком вообще ни к чему не может подключится. Всё соединение осуществляет ADOConnection, без него никак.
zetrix вне форума Ответить с цитированием
Старый 21.07.2008, 10:57   #5
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Значит постораюсь настаивать на как можно меньшем количестве обращений, и закрытий сессий сразу же после получения данных.
Я закрываю датасет при закрытии формы, а не сразу после получения данных Т.е пока форма открыта, то открыт и датасет, чтобы пользователь мог работать с данными. А при закрытии приложения закрываю еще и ADOConnection.
edgy вне форума Ответить с цитированием
Старый 21.07.2008, 11:02   #6
edgy
Форумчанин
 
Регистрация: 15.06.2008
Сообщений: 271
По умолчанию

zetrix, у ADOQuery есть свойство ConnectionString, которое можно настроить точно также, как и у ADOConnection. Хотя такой вариант я никогда не использвал. Подключение только через ADOConnection.
edgy вне форума Ответить с цитированием
Старый 21.07.2008, 11:11   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от zetrix
0_о это как? Ведь сам по себе компонент ADOQuery не может подключиться к серверу, он толком вообще ни к чему не может подключится. Всё соединение осуществляет ADOConnection, без него никак.
Просто так редко используют. я, например, никогда не использовал. Но, вроде бы, такая возможность есть - посмотрите, в ADOQuery есть ConnectionString...

to Stilet.
Виталий, я полностью согласен с edgy - по классике жанра всю логику надо выносить на сервер - именно поэтому сервер должен быть многопроцессорный, иметь кучу памяти и прочая, прочая.. Хотя, как и везде, думаю, что существуют исключения - особенности, когда вынесение логики на клиента может разгрузить сервер (ну, разумеется, в том случае, когда величина выборки данных не зависит от этой вычисляемой функции!!!)
и, чем меньше выборка и меньше полей в запросе - тем меньше нагрузка.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.07.2008, 11:29   #8
А. Долматов
Форумчанин
 
Аватар для А. Долматов
 
Регистрация: 15.02.2007
Сообщений: 183
По умолчанию объем данных

Сервер по своей сути предполагает большую загруженность, поэтому для сервера губительнее количество открытых сессий, но никак не вычисления и их количества и тем более объемы. Это сервер быстро посчитает, сохранит, если надо. Главное закрытие сессий по окончинии работы клиента с базой.
Знать все невозможно, в силу того, что жить бы стало неинтересно.
А. Долматов вне форума Ответить с цитированием
Старый 21.07.2008, 11:29   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
особенности, когда вынесение логики на клиента может разгрузить сервер
Чего и добиваюсь... Но в принципе не очень хоццца клиентам энто отдавать. Например нужно в БД впихивать текущее время, а на клиентах оно различно, бывает с разницей минут в 10 (толи винда корявая, но я заметил что на некоторых компах время просто спешит) Таким образом получается уже неточность в важных данных, если время сбито. Вывод: пусть такое дело рассчитывает сервер, даже если его время сбито, оно хотябы не будет разительно отличаться. (ну я имею ввиду сложную функцию, в рассчете которой учавствует текущее время).

Цитата:
Т.е пока форма открыта, то открыт и датасет, чтобы пользователь мог работать с данными
Ну в принципе я думал закрывать подключение, и пусть пользователь работает на терминале независимо, а потом по нажатии кнопки типа "Сохранить" - подключиться и сбросить изменения. Просто у нас бывает что пользовательоткрыл сеанс и незакрывая его слинял часиков на 5 в цех, а подключение висит. Вот и думаю - пользак открыл прогу получил набор, и пусть подключение разрывается.

Цитата:
Главное закрытие сессий по окончинии работы клиента с базой.
НУ в принципе понятно куда упор делать )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вопросы по оптимизации скорости Иллидан Общие вопросы Delphi 9 11.07.2008 23:46
как создать субд в Delphi для работы с MySqL Savl БД в Delphi 1 12.03.2008 14:10
Помощь в оптимизации anger Общие вопросы Delphi 13 05.11.2007 13:15
задачи оптимизации kirasir Microsoft Office Excel 2 08.08.2007 00:40