Поиск:

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


Шустрый
*


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

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



База данных interbase 75Мб, 22 таблицы, доступ одновременно до 60 пользователей
запрос на элементарную запись заказа выполняется от 1 до 5 минут, все остальные запросы выполняются тоже долго, простой переход в конец выполняется минуту smile

Раньше занимался локальными таблицами Paradox и с помощью кэширования достигал хорошей скорости, как быть здесь?

спасибо
 
PM MAIL ICQ   Вверх
ТоляМБА
Дата 27.7.2006, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


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

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



1. Индексы по нужным полям (по которым чаще всего ставятся условия поиска) есть?
2. 
Цитата(samurai @  27.7.2006,  04:47 Найти цитируемый пост)
простой переход в конец выполняется минуту 

А ты что, SQL не используешь? На последнюю запись переходишь простым перебором? 
PM   Вверх
samurai
Дата 27.7.2006, 06:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



1. 
 Вот пример таблицы заказов:
 
Код

CREATE TABLE ORDERS 
(
  ORD_KOD    INTEGER NOT NULL,
  ORD_KODSELL    INTEGER NOT NULL,
  ORD_KODBUY    INTEGER NOT NULL,
  ORD_KODOP    INTEGER NOT NULL,
  ORD_KODU    INTEGER,
  ORD_DATE    TIMESTAMP,
  ORD_SCHET    VARCHAR(10) CHARACTER SET WIN1251,
  ORD_SCHETD    TIMESTAMP,
  ORD_SCHETF    VARCHAR(10) CHARACTER SET WIN1251,
  ORD_SCHETFD    TIMESTAMP,
  ORD_PRORD    VARCHAR(10) CHARACTER SET WIN1251,
  ORD_PRORDD    TIMESTAMP,
  ORD_PAY    INTEGER default 0,
  ORD_SROK    VARCHAR(10) CHARACTER SET WIN1251,
  ORD_EDU    VARCHAR(20) CHARACTER SET WIN1251,
  ORD_DAYS    INTEGER,
  ORD_SNSP    INTEGER default 0,
  ORD_NDS    DECIMAL(3, 2),
  ORD_SUM    DECIMAL(3, 2),
  ORD_SUMNDS    DECIMAL(3, 2),
  ORD_ITOG    DECIMAL(3, 2),
  ORD_NSP    DECIMAL(3, 2),
  ORD_SUMNSP    DECIMAL(3, 2),
  ORD_ED    INTEGER,
  ORD_AGR    VARCHAR(255) CHARACTER SET WIN1251,
  ORD_ARH    INTEGER default 0,
 PRIMARY KEY (ORD_KOD)
);
ALTER TABLE ORDERS ADD FOREIGN KEY (ORD_KODSELL) REFERENCES SELLER (S_KOD);
ALTER TABLE ORDERS ADD FOREIGN KEY (ORD_KODBUY) REFERENCES BUYER (B_KOD);
ALTER TABLE ORDERS ADD FOREIGN KEY (ORD_KODOP) REFERENCES OPER (OP_KOD);


2. Пользуюсь по возможности только SQL
не считая навигаторов (tdbnavigator)

не использую first, last, next и др.

у меня "толстый клиент" все права доступа и личные настройки хранятся в приложении клиента

вроде 75Мб (только текстовые и числовые типы данных) это же не много?

должно же бысто работать? сервер позволяет   

Это сообщение отредактировал(а) samurai - 27.7.2006, 06:48
PM MAIL ICQ   Вверх
Akella
Дата 27.7.2006, 08:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

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



сколько записей в таблице? если 100 тысяч, то минута, может и нормально для перехода в конец таблицы 
PM MAIL   Вверх
superVad
Дата 27.7.2006, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



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

но в принципе медленно работает - надо эксперементировать и искать в чем проблема 
PM MAIL   Вверх
samurai
Дата 27.7.2006, 10:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



to akella: таблиц 22, в каждой от 10000 до 60000 записей, не знаю как по количеству, но нормально работать это точно не даёт, какой то выход мне надо искать smile
вот поиск производится очень быстро, а запись долго.

to superVad я не знаю влияет ли количество подключений на скорость запроса.
 комп такой: 
 4 процессора Xeon-A (4.5x400) по 1800 МГц
 4х512 Мб = 2047Мб оперативки
 2x16Гб винчестеры зеркальные
 сетевухи гигабитные, сетка на 3com (48 портов х 2) switch с усилением
 ну маленькое вроде такое, но шустренькое

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

спасибо 
PM MAIL ICQ   Вверх
superVad
Дата 27.7.2006, 11:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



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

единственное что в голову приходит - если стоит сервер с архитектурой SuperServer то стоит поставить ClassicServer может быть. Он на многопроцесорных системах лучще работает 
PM MAIL   Вверх
jack128
Дата 29.7.2006, 12:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(samurai @  27.7.2006,  04:47 Найти цитируемый пост)
запрос на элементарную запись заказа выполняется от 1 до 5 минут

ты хочешь сказать, что запрос
  insert into orders
  (...)
  values (...)
выполняется минуту??

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


Эксперт
****


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

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



Все перебрали, кроме самого главного, текст вашего SQL, который якобы у вас там минуты выполняется можно увидеть?

Добавлено @ 07:14 
Цитата(samurai @  27.7.2006,  07:14 Найти цитируемый пост)
не использую first, last, next и др.

Интересно, а как без last вы попадаете на последнию запись?

Добавлено @ 07:21 
Цитата(samurai @  27.7.2006,  11:29 Найти цитируемый пост)
4 процессора Xeon-A (4.5x400) по 1800 МГц

Стоп! А какой версией Interbase вы пользуетесь? 


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


Эксперт
***


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

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



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


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


Это сообщение отредактировал(а) DimW - 1.8.2006, 10:02
PM MAIL ICQ   Вверх
samurai
Дата 3.8.2006, 07:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



to jack128
ну не совсем, происходит ряд проверок
здесь же выполнение StoredProc (хранимые процедуры)
антивиря нет, доступ в онлайн запрещен

to Alex
next, last & etc стараюсь не использовать
но дбнавигатор использует именно их

Версия Interbase 6.5

Заметил следующее: с утра всё работает намного быстрее, мало клиентов, активность из 60 юзеров примерно 10, к обеду ситуация усложняется ввод заказа выполняется в несколько раз дольше, к вечеру у некоторых подвисают приложения-клиенты
Может проблемы с кэшью? где посмотреть?

to DimW
индексов от 1 до 6 на каждую таблицу, таблиц 22,
но в среднем получается 2-3 индекса на таблицу
это много?

спасибо всем кто помогает
PM MAIL ICQ   Вверх
Fedia
Дата 3.8.2006, 07:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



samurai,  Клиентских приложений много ? 60 клиентов, а клиентская программа у них одна ? Хорошо бы пересмотреть запросы, которые эта программа посылает на сервер, раз тормоза начинаются во время интенсивной работы с БД.
Хотя сервер мощный, если запросы в БД от клиентов просты, то он должен справляться с обработкой. Есть какие-либо сложные выборки данных типа запросов в несколько таблиц с объединением, вложенными запросами и т.п.


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


Эксперт
****


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

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



Цитата(samurai @  3.8.2006,  08:15 Найти цитируемый пост)
Версия Interbase 6.5

http://ibase.ru/ibfaq.htm#proc
http://ibase.ru/ibfaq.htm#arch
http://ibase.ru/ibfaq.htm#que


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



таки попробуй поставить FB 1.5 ClassicServer
PM MAIL   Вверх
Alex
Дата 3.8.2006, 09:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(superVad @  3.8.2006,  10:05 Найти цитируемый пост)
таки попробуй поставить FB 1.5 ClassicServer 

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

Вы ни как не прочитаете самое главное, InterBase до версии 7.0 и FB до версии 2.0 не могут работать на многопроцессорной машине их нужно закруглять на один из процессоров
http://ibase.ru/devinfo/ht.htm

Это сообщение отредактировал(а) Alex - 3.8.2006, 09:45


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


Опытный
**


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

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



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

для СУБД MySql например не верно ? Там ведь при запросах в БД никакие транзакции не стартуют ?


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


Шустрый
*


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

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



Цитата(Fedia @  6.8.2006,  23:42 Найти цитируемый пост)
Там ведь при запросах в БД никакие транзакции не стартуют ? 

ну если в MySQL они не стартуют, то какие могут быть сомнения? 
ЗЫ а что, в мускуле вообще нету транзакций или они не обязательны к использованию?
PM MAIL   Вверх
Fedia
Дата 7.8.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

ЗЫ а что, в мускуле вообще нету транзакций или они не обязательны к использованию?

Они вроде поддерживаются в дополнении к MySql Inno DB, а в самой СУБД их нет. Хотя возможно в 5-й версии уже появились.


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


Опытный
**


Профиль
Группа: Участник
Сообщений: 735
Регистрация: 6.4.2006
Где: Черкассы, Украина

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



Цитата(samurai @ 3.8.2006,  07:15)
to jack128
ну не совсем, происходит ряд проверок
здесь же выполнение StoredProc (хранимые процедуры)

мне кажеться проблема гдето здесь
PM MAIL   Вверх
SergeBS
Дата 8.8.2006, 12:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



2ALL
Спокойнее, спокойнее, горячие финские парни...
А теперь я по вредности своей начну свое задвигать, благо чуток времени выпал smile

Fedia
Цитата

Они вроде поддерживаются в дополнении к MySql Inno DB, а в самой СУБД их нет. Хотя возможно в 5-й версии уже появились. 

Воообще-то MySQL тем и уникален в своем роде, что поддерживает несколько разных способов хранения данных. Из док:
Цитата

7. Типы таблиц MySQL
...
Обратите внимание на то, что MySQL поддерживает два различных типа таблиц: транзакционные (InnoDB и BDB) и без поддержки транзакций (HEAP, ISAM, MERGE и MyISAM).

Это для версий новее 3.23.6. 
Без транзакций обойтись практически невозможно. Более просто можно сформулировать так: если не нужны транзакции, то и сервер не нужен.

Насчет блокировочников и версионников - из распространенных:
Версионники: InterBase (IB), FireBird(FB), Oracle
Блокировочники: MS SQL, MySQL, Informix, MS Jet(Access)
Ну кого забыл - извиняйте, я не со всеми дела имел, а лазить по описаниям - лениво.
В двух словах разница.
Версионники хранят несколько версий записи, и при чтении по хитромудрым правилам подсовывают версии записи, так что одна запись может иметь кучу версий и блокировок при попытке чтения записи, которую другая транзакция изменяет, но еще не откоммитила, так сказать, не происходит. Но потом зато происходит т.н. "кооперативная сборка мусора" - уборка "лишних" версий. И она может изрядно  сожрать, если не думать. Подробнее - в доках. Есть еще на эту тему на ibase.ru статья Кузьменко, признанного "гуру" по IB/FB. Полезно, по делу, кратко. РУЛЕЗЗ!
У блокировочников - по-другому. Транзакция блокирует запись, которую изменяет, от чтения/редактирования другими транзакциями. Отсюда и название. Можно управлять мощностью блокировки.
Естественно есть способы в обоих случаях (версионность/блокировочность) поведением рулить.

DimW
Цитата

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


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

Цитата

ну так вот те БД которые используются для получения информации называются аналитическими(предпологается что данные накапливались в БД ранее, или транзакций на порядок меньше чем возврата данных).

Рекомендую ознакомиться:
1. С принципом ("бритвой") Оккама.
2. С книжкой любого классика по СУБД (раз уж лекции просачковал). Хотя бы классификацию и решаемую задачу. Дабы не изобретать велосипеда с квадратными колесами и не морочить им всем горовы. Свои доморощенные термины и теории оставьте при себе. 
Здесь в основном практики общаются.

Цитата

SergeBS, вдогонку:  читайте дальше Дейта, Бойса, Кодда, Ульмана и будет вам счастье, во могу даже дать телефон моего бывшего лектора, вы с ним поладите!!!    

Уже читал. И поэтому я могу ОБОСНОВАТЬ заказчику, почему у меня в базе 62 таблицы, например, а не 50 и т.п. Вам такое не грозит. 
Заодно с отказом от нормальных форм можете отказаться от таблицы умножения (от грамматики уже отказались).  smile 

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


Эксперт
****


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

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



Более корректно:
Цитата

Версионники: InterBase (IB), FireBird(FB), Oracle, MS SQL 2005 (опционально)
Блокировочники: MS SQL, MySQL, Informix, MS Jet(Access)



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


Шустрый
*


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

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



В общем почти разобрался:

1. с моими объёмами 100Мб таблиц даже с плохими индексами можно работать быстро
2. моя проблема была в том что клиентские приложения не все обновлялись вовремя и в некоторых
    оставались транзакции с параметрами по умолчанию, в то время как в основных транзакциях параметры такие
    
Код

    read_committed
    rec_version
    nowait
    

    умолчательные транзакции конфликтуют с моими, после прогона IBAnalyst, выяснилось что
    некоторые транзакции живут уже 80 дней, тормоза были страшенные.
    Когда все транзакции привёл к одному виду всё заработало более или менее прилично
3. В данный момент потеря скорости обусловленна ещё тем, что чистка мусора имеет тот же приоритет что и основная транзакция,
    я это сделал только для стабильности, чтобы в исключительных ситуациях мусор не накапливался в прогрессии,
    т.к. я начинающий и не уверен в правильности своих действий  smile  

    Всем спасибо smile
PM MAIL ICQ   Вверх
AKN
Дата 18.9.2006, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Как увидел проблему, хотел сказать за уровни изолированности транзакций. Была у меня такая проблема. Еще советую использовать 2 сессии - одну для чтения, вторую для модификации данных. Гораздо жизнь упрощается
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.2243 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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