Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Очень медленно выполняются запросы, Delphi+Interbase 
V
    Опции темы
DimW
Дата 3.8.2006, 09:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(samurai @  3.8.2006,  07:15 Найти цитируемый пост)
to DimW
индексов от 1 до 6 на каждую таблицу, таблиц 22,
но в среднем получается 2-3 индекса на таблицу
это много?


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

PM MAIL ICQ   Вверх
samurai
Дата 4.8.2006, 05:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 26.1.2006
Где: РФ, Омск

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



to Fedia
Клиентское приложение у всех одинаковое, так называемый толстый клиент, т.е. различные права по отделам распределены прямо в клиентском приложении. Запросов много и много проверок между ними. пример одного из запросов (остальные имеют схожую структуру):
Код

SELECT TOVAR.TOV_KOD, TOVAR.TOV_KODOTD,  ( ( ( ( ( ( (Typ.T_NAME || ' ')  || Series.SER_NAME)  || ' ')  || Tovar.TOV_NAME)  || ' ')  || Tovar.TOV_ISP)  || ' ')  || Tovar.TOV_DOP TOV_N, TOVAR.TOV_KOLVO, TOVAR.TOV_MIN, Tovar.TOV_HIDE, Tovar.TOV_VYB
FROM TOVAR
   INNER JOIN TYP
   ON  (TOVAR.TOV_KODTYP = TYP.T_KOD)  
   INNER JOIN SERIES
   ON  (TOVAR.TOV_KODSER = SERIES.SER_KOD)  
   INNER JOIN VALUTA
   ON  (TOVAR.TOV_KODVAL = VALUTA.V_KOD)
   INNER JOIN RAZDEL Razdel 
   ON (Razdel.R_KOD = Tovar.TOV_OKP)
WHERE TOVAR.TOV_KODOTD=7


to superVad
У меня не столь крутые задачи, чтобы менять платформу, мне надо найти недочёты чтобы увеличить производительность, но всё равно спасибо!

to Alex
Факи прочитал, всё проверил, вроде явных ошибок у меня нет

DataBase Cach (pages) 2048
Client map size (bytes) 4096
как думаешь увеличить?
если да, то можно не останавливать работу, а прямо во время, ничего не случится?

to DimW
философия на тему типа БД мне не поможет
у меня очень конкретный вариант.
это похоже на выражени "Сколько людей - столько мнений" - выражение без смысла, т.к.
решение всё равно принимают общее, так вот мне нужно решение. Без обид!
Задача как у всех - склад + бухгалтерия.
спасибо

PM MAIL ICQ   Вверх
Fedia
Дата 4.8.2006, 06:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 3
Всего: 13



samurai, Есть возможность посмотреть загруженность процессора сервера БД и процент используемой ОЗУ во время интенсивной работы пользователей ? Если ресурсы используются по полной программе, то тут уже придется думать об оптимизации структуры БД и таблиц.
Не знаю, есть ли аналог MySql  функции explain для Interbase. Если есть, то все запросы к БД, по хорошему, нужно пересмотреть при помощи аналога explain.
Код

explain SELECT TOVAR.TOV_KOD, TOVAR.TOV_KODOTD,  ( ( ( ( ( ( (Typ.T_NAME || ' ')  || Series.SER_NAME)  || ' ')  || Tovar.TOV_NAME)  || ' ')  || Tovar.TOV_ISP)  || ' ')  || Tovar.TOV_DOP TOV_N, TOVAR.TOV_KOLVO, TOVAR.TOV_MIN, Tovar.TOV_HIDE, Tovar.TOV_VYB    
FROM TOVAR    
   INNER JOIN TYP    
   ON  (TOVAR.TOV_KODTYP = TYP.T_KOD)    
   INNER JOIN SERIES    
   ON  (TOVAR.TOV_KODSER = SERIES.SER_KOD)    
   INNER JOIN VALUTA    
   ON  (TOVAR.TOV_KODVAL = VALUTA.V_KOD)    
   INNER JOIN RAZDEL Razdel    
   ON (Razdel.R_KOD = Tovar.TOV_OKP)    
WHERE TOVAR.TOV_KODOTD=7

и посмотреть, используются ли для обработки данного запроса индексы, количества строк, которые будут перебираться при формировании ответа на запрос, длину ключа и др. параметры. Ну а дальше действовать по обстоятельствам. Н-р: если не используется индекс и запрос выполняется долго, то можно либо создать необходимый для ускорения запроса индекс (пожертвовав местом на HDD сервера) или же изменить запрос, так, чтобы он использовал уже существующие индексы.
Это кропотливая работа, но ИМХО необходимая для оптимизации клиентских приложений в случае, если они сверх меры нагружают сервак  smile Бог в помощь.


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
DimW
Дата 4.8.2006, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



еще раз процетирую:
Цитата(samurai @  27.7.2006,  10:29 Найти цитируемый пост)
вот поиск производится очень быстро, а запись долго.

если бы выборка и модификация проходили одинаково долго, то можно говорить о смене сервера и т.д.
но здесь другой случий - производится долго лищь модификация таблиц БД, это происходит по тому что при модификации
изменяется не только таблица, но и индексы этой таблицы и на это тратится время соответственно производительность.

Цитата(samurai @  4.8.2006,  05:45 Найти цитируемый пост)
философия на тему типа БД мне не поможет

а вот мне в свое время помогла, только не философия это а теория, а прежде чем приступить к практике теорию нужно знать.

Цитата(samurai @  4.8.2006,  05:45 Найти цитируемый пост)
у меня очень конкретный вариант.

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

Цитата(samurai @  4.8.2006,  05:45 Найти цитируемый пост)
вот мне нужно решение.

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

PM MAIL ICQ   Вверх
SergeBS
Дата 4.8.2006, 17:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

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



DimW
Ходить на лекции, оно конечно хорошо. Только чудесатое разделение на 
Цитата

какого типа у тебя БД, разлечают два основных типа БД - транзакционная и аналитическая. 

я ни у одного из классиков типа Дейта, Бойса, Кодда, Ульмана не встречал. Так что это разделение - на совести лектора или твоей (последнее более правдоподобно). И нафиг оно никому не нужно. Поскольку СО ВСЕМИ СЕРВЕРАМИ РАБОТАЮТ ЧЕРЕЗ ТРАНЗАКЦИИ и никак иначе. Они по-другому просто не умеют. 
Вдогонку: не надо коверкать русский язык. Т.е. писать с грубыми ошибками - не уважать самого себя.

samurai
Сходи на www.ibase.ru и почитай про версионность. Судя по тому, что у тебя с начала работы в течение дня скорость падает - увеличивается количество версий записей, и соответственно все больше времени уходит на актуализацию. Т.е. слишком поздно делаешь commit.
PM MAIL   Вверх
Alex
Дата 5.8.2006, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Цитата(samurai @  4.8.2006,  06:45 Найти цитируемый пост)
to Alex
Факи прочитал, всё проверил, вроде явных ошибок у меня нет

DataBase Cach (pages) 2048
Client map size (bytes) 4096
как думаешь увеличить?
если да, то можно не останавливать работу, а прямо во время, ничего не случится?

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

PS:
Ваша задача это мелочь в принципе для IB


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
DimW
Дата 6.8.2006, 10:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(SergeBS @  4.8.2006,  17:19 Найти цитируемый пост)
я ни у одного из классиков типа Дейта, Бойса, Кодда, Ульмана не встречал.

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

Цитата(SergeBS @  4.8.2006,  17:19 Найти цитируемый пост)
Ходить на лекции, оно конечно хорошо.

Вовсе нет, т.к. лекторы как и вы начитаются классиков и живут в розовом цвете...
Цитата(SergeBS @  4.8.2006,  17:19 Найти цитируемый пост)
Поскольку СО ВСЕМИ СЕРВЕРАМИ РАБОТАЮТ ЧЕРЕЗ ТРАНЗАКЦИИ и никак иначе.

так что в вашем понимании транзакция?! любое обрашение к БД? если так, то очень вас жаль!
Транзакцией называют любой sql-запрос который нацелен на модификацию как объектов БД, так и данных. Sql - запросы возвращающие наборы данных не являются транзакциями! а те транзакции которые вы имеете ввиду - называются сессиями БД!
ну так вот те БД которые используются для получения информации называются аналитическими(предпологается что данные накапливались в БД ранее, или транзакций на порядок меньше чем возврата данных).
   
SergeBS, вдогонку:  читайте дальше Дейта, Бойса, Кодда, Ульмана и будет вам счастье, во могу даже дать телефон моего бывшего лектора, вы с ним поладите!!!  smile  

Это сообщение отредактировал(а) DimW - 6.8.2006, 10:38
PM MAIL ICQ   Вверх
Alex
Дата 6.8.2006, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Цитата(DimW @  6.8.2006,  11:26 Найти цитируемый пост)
в этом все и дело что это классики, они описывают правельные БД - нормалезованные, и учат контролировать данные при помощи всевозможных констрейтов, тригеров и чем больше их тем лучше! Вот такие любители классической литературы напроектируют баз данных, а потом расхлебывай заними!  
Избыточность индексов - это одна из причин снижениея производительности сервера БД.

Тихо, тихо какая там избыточность, что за необоснованные наезды на триггеры там у человека база по размерам просто смешная. Триггеры при грамотном их использовании это палочка выручалочка, да и работу с индерсами можно организовать так, что даже на больших БД при вставке все будет нормально.
Цитата(DimW @  6.8.2006,  11:26 Найти цитируемый пост)
а те транзакции которые вы имеете ввиду - называются сессиями БД!

Дайте нам не грамотным определение сессии БД


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
Fedia
Дата 6.8.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 3
Всего: 13



Цитата
правельные БД - нормалезованные


Ты сам говоришь, что нормализованные БД - правильные. И для подтверждения этого факта можно привести множество аргументов ! 
Цитата
 учат контролировать данные при помощи всевозможных констрейтов, тригеров и чем больше их тем лучше


Зачем ты так пишешь? Принцип чем больше, тем лучше относиться к прибыли, но никак не к БД. Определение "нормализованная БД" совсем не подразумевает наличия в БД большого количества индексов и триггеров. Если ты об этом знаешь, то к чему такие высказывания ? Всего должно быть в меру, для обеспечения быстрого и надежного функционирования БД ! Классики бы на тебя затаили большую обиду smile


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
DimW
Дата 6.8.2006, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Alex @  6.8.2006,  10:54 Найти цитируемый пост)
Дайте нам не грамотным определение сессии БД


я не говорю что вы не грамотные!
сессиея(соединение) - это период времени от подключения к БД до отключения.
в одной сессии может вызываться множество транзакций.

вобще я не понял что вас так задело?! что я не правельно написал?
 
samurai, спросил
Цитата(samurai @  27.7.2006,  10:29 Найти цитируемый пост)
я просто вообще не знаю с чего начать копать, 
хотел услышать стандартные ошибки в построении таблиц и запросов

я ответил что может быть причиной. вот и все.
если бы я не сталкнулся с этой проблемой сам, то не стал бы заявлять что индексы могут быть причиной. 
Цитата(Alex @  6.8.2006,  10:54 Найти цитируемый пост)
Тихо, тихо какая там избыточность

я не говорю что у samurai в БД избыточность, я лишь предпологаю что может быть такое. 
Alex,  на счет тригеров я погорячился. сам их уважаю и использую, но в меру  smile.



PM MAIL ICQ   Вверх
Alex
Дата 6.8.2006, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 4147
Регистрация: 25.3.2002
Где: Москва

Репутация: 17
Всего: 162



Цитата(DimW @  6.8.2006,  11:26 Найти цитируемый пост)
Транзакцией называют любой sql-запрос который нацелен на модификацию как объектов БД, так и данных.

Как же хочется отправить вас почитать литературу прежде чем высказываться... Запрос - это транзакция, ужас.
Цитата

Транзакция - это логический блок, объединяющий одну или более операций в базе данных и позволяющий подтвердить или отменить результаты работы всех операций в блоке.


Цитата(DimW @  6.8.2006,  11:26 Найти цитируемый пост)
Sql - запросы возвращающие наборы данных не являются транзакциями!

Да, что вы говорите, а про уровни изоляции транзакций, версиональность данных вы слышали?


--------------------
Написать можно все - главное четко представлять, что ты хочешь получить в конце. 
PM Skype   Вверх
DimW
Дата 6.8.2006, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1330
Регистрация: 24.2.2005
Где: Орёл

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



Цитата(Alex @  6.8.2006,  12:27 Найти цитируемый пост)
Запрос - это транзакция, ужас.


не надо придераться к словам, вы же прекрасно поняли о чем я! sql - запрос т.е. sql - оператор, а транзакция считается завершенной если был commi или rollback. так же транзакция может состоять из нескольких sql - операторов. вот что я имел ввиду. но из песни слов не выкинешь.  smile 
Цитата(Alex @  6.8.2006,  12:27 Найти цитируемый пост)
Да, что вы говорите, а про уровни изоляции транзакций, версиональность данных вы слышали?
 вот про это нужно почитать.

PM MAIL ICQ   Вверх
jack128
Дата 6.8.2006, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 18.5.2005

Репутация: нет
Всего: 4



Цитата(DimW @  6.8.2006,  10:26 Найти цитируемый пост)
Sql - запросы возвращающие наборы данных не являются транзакциями!

с этим никто не спорит. просто в IB и его клонах любой запрос(в том числе и select) может выполняться только в контексте какой либо транзакции. Иначе говоря - не открыв транзакции ты не сможешь выполнить ни одного запроса. По причине версионности (в IB - параметры видимости - задаются при отрытии транзакции). В блокировочниках я так понимаю подобных проблем нету, поэтому для select'ов и не нужны отрытые транзакции.
PM MAIL   Вверх
Fedia
Дата 6.8.2006, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 465
Регистрация: 2.8.2006
Где: первым встречаю р ассвет

Репутация: 3
Всего: 13



Цитата(jack128 @  6.8.2006,  16:32 Найти цитируемый пост)
В блокировочниках я так понимаю подобных проблем нету

Просто хочу уточнить. Что вкладывается в понятие блокировочник ? Ты имеешь в виду СУБД у которых бликирутся модифицируемые таблицы при внесении изменений в БД ?


--------------------
Накануне решающей битвы
Я иду, и надеждою зыбкой
Озаряется эта дорога,
Я мечтаю увидеть улыбку
На лице победившего Бога…
PM MAIL ICQ   Вверх
jack128
Дата 6.8.2006, 22:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 18.5.2005

Репутация: нет
Всего: 4



Цитата(Fedia @  6.8.2006,  22:41 Найти цитируемый пост)
модифицируемые таблицы при внесении изменений в БД ?

да. 
PM MAIL   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

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


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

1. Базы данных (Paradox, Oracle и т.п.)

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


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


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

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


 




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


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

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