Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Оптимизация базы... / 20 сообщений из 20, страница 1 из 1
12.12.2003, 15:51
    #32351512
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
База данных представляет собой конструктор организации различного рода хранилищ данных с последующим выводом в отчеты.
На данный момент на ней вертится более 10 задач одновременно, весит около 300 МБ, средства разработки Delphi 4 и IB 5.6(Dialect 1). Отчет по республики после репликации со всех областей строится 20 минут. Есть ли какие-нибудь способы ускорить работу с базой.

Мои варианты:
- хранить базы по областям отдельно;
- перевод базы на Dialect 3;
- хранить отдельно базы по годам;
- оптимизация запросов и ХП предназначенных для построения отчетов;
- писать новую базу (скорее всего не дадут по времени).

Можете ли подсказать в каком направлении двигаться...

Спасибо за то что дочитали до сюда...
...
Рейтинг: 0 / 0
12.12.2003, 16:09
    #32351520
Gt.
Gt.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
слово отчет мало что нам скажет .. можно ли выделить конкретные процедуры, запросы, планы и т.п. которые создают наибольшие задержки ?

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

что с деньгами/хардваре .. оцени сколько время/ресурсов уйдет на переписывание чего либо, может все же дешевле поставить n процесоров с n гб памяти.
...
Рейтинг: 0 / 0
12.12.2003, 19:37
    #32351639
S.G.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
С одной стороны, по закону Мура (Moore) мощность компьютеров
нарастает вдвое каждые 2-2,5 года. Т.е если система уже работает
года 3, самое время поменять хардвер и получить быстро работающий
отчет.
С другой стороны, по закону подлости, написание софтвера отнимает
время в два раза больше, чем было планировано. Т.е опять же
довод в пользу той первой стороны.

Вроде даже научно получилось ;)

p.s. Да, хранить базы отдельно по годам не стОит, имхо.
Кому-то сразу захочется иметь отчет, включающий
данные из разных лет

p.p.s. Но можно сделать автоматизацию, которая делает
длинные отчеты ночью, если технология допускает такое.
...
Рейтинг: 0 / 0
15.12.2003, 10:43
    #32352354
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Да, очень бы не помешало краткое описание действий, которые делаются в отчете. Ну и железо, которое сейчас используется. Для InterBase 300 мегов при нынешнем железе это фигня.

-- Tygra's --
...
Рейтинг: 0 / 0
15.12.2003, 18:10
    #32353096
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Железо:
3 пень 1 Ггц, 1 Гб памяти.

В базе 3154243 записи на сегодняшний день.
Было дело данные за одну область заливались 5-6 часов.
Самый сложный отчет использует вот такую ХП:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
CREATE PROCEDURE REPORT_REPUBLIC(
    SQLI INTEGER,
    N INTEGER,
    CURDATE1 CHAR( 10 ),
    CURDATE2 CHAR( 10 ))
RETURNS (
    DATA0 VARCHAR( 250 ),
    DATA1 INTEGER,
    DATA2 INTEGER,
    DATA3 INTEGER,
    DATA4 INTEGER,
    DATA5 INTEGER,
    DATA6 DOUBLE PRECISION,
    DATA7 DOUBLE PRECISION,
    DATA8 DOUBLE PRECISION,
    DATA9 DOUBLE PRECISION,
    DATA10 INTEGER,
    DATA11 INTEGER,
    DATA12 INTEGER,
    DATA13 INTEGER,
    DATA14 INTEGER,
    DATA15 INTEGER,
    DATA16 INTEGER,
    DATA17 INTEGER,
    DATA18 INTEGER,
    DATA19 INTEGER,
    DATA20 INTEGER,
    DATA21 INTEGER,
    DATA22 INTEGER,
    DATA23 INTEGER,
    DATA24 INTEGER,
    DATA25 DOUBLE PRECISION,
    DATA26 INTEGER,
    DATA27 INTEGER,
    DATA28 INTEGER,
    DATA29 INTEGER,
    DATA30 DOUBLE PRECISION,
    DATA31 INTEGER,
    DATA32 INTEGER,
    DATA33 INTEGER)
AS
DECLARE VARIABLE INDLIST INTEGER;
DECLARE VARIABLE O_IND INTEGER;
DECLARE VARIABLE TMP DATE;
DECLARE VARIABLE TMP_VAL INTEGER;
DECLARE VARIABLE SQLI1 SMALLINT;
DECLARE VARIABLE O_TIND SMALLINT;
DECLARE VARIABLE DAT1 DATE;
DECLARE VARIABLE DAT2 DATE;
DECLARE VARIABLE Y1 INTEGER;
DECLARE VARIABLE Y2 INTEGER;
DECLARE VARIABLE D1 INTEGER;
DECLARE VARIABLE M1 INTEGER;
DECLARE VARIABLE D2 INTEGER;
DECLARE VARIABLE M2 INTEGER;
begin
  data0='';
  select ListInd from Params where ind=:SQLI into:sqlI1;
  EXECUTE PROCEDURE Year1(:CURDATE1)RETURNING_VALUES Y1;
  EXECUTE PROCEDURE Year1(:CURDATE2)RETURNING_VALUES Y2;
  EXECUTE PROCEDURE month1(:CURDATE1)RETURNING_VALUES M1;
  EXECUTE PROCEDURE month1(:CURDATE2)RETURNING_VALUES M2;
  EXECUTE PROCEDURE day1(:CURDATE1)RETURNING_VALUES D1;
  EXECUTE PROCEDURE day1(:CURDATE2)RETURNING_VALUES D2;
  if (Y1<>Y2) then exit; Dat1=D1 ||  "."  || M1 ||  "."  || Y1; Dat2=D2 ||  "."  || M2 ||  "."  || Y2;
  for select ind, val from Lists  where ParamInd=:sqlI1
  order by val   /*order by ind*/   /*ored by val*/ 
  into :IndList,:DATA0
  do begin
     data1= 0 ;data2= 0 ;data3= 0 ;data4= 0 ;data5= 0 ;data6= 0 ;data7= 0 ;data8= 0 ;data9= 0 ;
     data10= 0 ;data11= 0 ;data12= 0 ;data13= 0 ;data14= 0 ;data15= 0 ;data16= 0 ;data17= 0 ;data18= 0 ;data19= 0 ;
     data20= 0 ;data21= 0 ;data22= 0 ;data23= 0 ;data24= 0 ;data25= 0 ;data26= 0 ;data27= 0 ;
     data28= 0 ;data29= 0 ;data30= 0 ;data31= 0 ;data32= 0 ;data33= 0 ;
     for select ObjectInd from Pvalues where ind= 566  and val> 1000000000  and val< 8000000000  into :o_Ind
     do begin tmp_val= 0 ;
        select ListInd from pvalues where ind= 236 
        and ObjectInd=:o_Ind into :tmp_val;
        if ((tmp_val= 110 ) or (tmp_val= 10 ) or ((tmp_val!< 40 ) and (tmp_val!> 60 ))) then begin
           select YES From isparent(:o_ind,:N) into :o_tind;
           if (o_tind = 1 ) then begin
              select cast(val as date) from pvalues where ind= 492  and objectInd=:o_Ind into :tmp;
              if ((:tmp!<:dat1) and (:tmp!>:dat2)) then  begin
                 select ListInd from pvalues where ind=:SQLI and ObjectInd=:o_Ind into :tmp_val;
                 if (:tmp_val=:Indlist) then begin
                    data1=:data1+ 1 ; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 270 ) into :tmp_val;
                    data2=data2+:tmp_val;  tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 271 ) into :tmp_val;
                    data3=data3+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 439 ) into :tmp_val;
                    data4=data4+tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 440 ) into :tmp_val;
                    data5=data5+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 280 ) into :tmp_val;
                    data6=data6+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 443 ) into :tmp_val;
                    data7=data7+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 444 ) into :tmp_val;
                    data8=data8+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 445 ) into :tmp_val;
                    data9=data9+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 273 ) into :tmp_val;
                    data10=data10+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 272 ) into :tmp_val;
                    data11=data11+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 278 ) into :tmp_val;
                    data12=data12+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 446 ) into :tmp_val;
                    data13=data13+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 279 ) into :tmp_val;
                    data14=data14+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 275 ) into :tmp_val;
                    data15=data15+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 277 ) into :tmp_val;
                    data16=data16+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 448 ) into :tmp_val;
                    data17=data17+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 276 ) into :tmp_val;
                    data18=data18+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 274 ) into :tmp_val;
                    data19=data19+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 281 ) into :tmp_val;
                    data20=data20+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 284 ) into :tmp_val;
                    data21=data21+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 289 ) into :tmp_val;
                    data22=data22+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 288 ) into :tmp_val;
                    data23=data23+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 285 ) into :tmp_val;
                    data24=data24+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 291 ) into :tmp_val;
                    data25=data25+:tmp_val; tmp_val= 0 ;
                    select ListInd from pvalues where ind= 449  and
                    ObjectInd=:o_Ind into :tmp_val;
                    if (tmp_val= 1 ) then begin Data26=data26+ 1 ; end
                    if (tmp_val= 3 ) then begin Data27=data27+ 1 ; end
                    if (tmp_val= 2 ) then begin Data28=data28+ 1 ; end
                    select Val1 from get_param_caption(:o_Ind, 451 ) into :tmp_val;
                    data29=data29+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 455 ) into :tmp_val;
                    data30=data30+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 452 ) into :tmp_val;
                    data31=data31+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 453 ) into :tmp_val;
                    data32=data32+:tmp_val; tmp_val= 0 ;
                    select Val1 from get_param_caption(:o_Ind, 454 ) into :tmp_val;
                    data33=data33+:tmp_val; tmp_val= 0 ;
                 end   /* */ 
                 end
                 end
                 end
                 end
                 suspend;
      end
  end


CREATE PROCEDURE GET_PARAM_CAPTION(
    OBJIND INTEGER,
    PARIND INTEGER)
RETURNS (
    VAL1 VARCHAR( 250 ))
AS
declare variable LISTIND1 SMALLINT;
declare variable LIST1 SMALLINT;
declare variable PARTYPE INTEGER;
begin
  Val1 =  "";
  SELECT ParamType,ListInd FROM Params WHERE  Ind=:parInd INTO :parType, :List1;
  SELECT Val, ListInd FROM PValues WHERE (Ind=:ParInd) and (ObjectInd=:ObjInd) INTO :val1, :ListInd1;

  IF (((:parType=1 ) or (:parType= 2 )) and (:Val1=" ")) THEN Val1="  0 ";

  IF ((:parType= 7 ) and (not (:ListInd1 is null))) THEN
     SELECT Val FROM LISTS WHERE (ind=:listInd1) AND (ParamInd=:List1) INTO :Val1;

  suspend;
end

...
Рейтинг: 0 / 0
15.12.2003, 18:43
    #32353152
Markelenkov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Чёй-то не понял, здесь ведь вроде СУБД сравнивают?
...
Рейтинг: 0 / 0
15.12.2003, 18:56
    #32353167
Gt.
Gt.
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
мда .. у меня десктоп помощнее будет, небойсь без SCSI, обычная память ... вложите туда хотя бы 3 килобакса будет 10-20 раз быстрее
...
Рейтинг: 0 / 0
16.12.2003, 12:05
    #32353673
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Ну железо уже можно и помощнее, но три лимона записей всего - это немного. Может чего с индексами? Процедура конечно офигенная, но надо ее просмотреть на те места, где все тяжко, и их прооптимизировать.

-- Tygra's --
...
Рейтинг: 0 / 0
16.12.2003, 13:35
    #32353855
DimaR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Ну железо уже можно и помощнее, но три лимона записей всего - это немного. Может чего с индексами? Процедура конечно офигенная, но надо ее просмотреть на те места, где все тяжко, и их прооптимизировать.

Я когдато делал задачу на IB5.6
Все было хорошо , просто замечательно,
пока не стал писать запросы аналитики, о процедурах даже речи небыло,
просто хитрые запросы, Interbase умирал.

Ничего не помогало, при том что данных было мало, структура простая.
...
Рейтинг: 0 / 0
16.12.2003, 13:38
    #32353862
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
о процедурах даже речи небыло,
и напрасно.
и о процедурах нужно речь вести и о планах запросов
...
Рейтинг: 0 / 0
16.12.2003, 14:05
    #32353941
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Я думаю DimaR наоборот имел ввиду, что процедуры даже не использовались, причем не напрасно, а вполне осознанно, так как тормозили со страшной дурью в IB 5.6 . Причем я полностью с ним согласен - действительно IB 5-х версий начинал умирать, как только запрос должен был возвратить чего то более менее сложное. Надежность хранения данных тоже оставляла желать лучшего. Сейчас говорят в новом IB, который здорово шагнул по сравнению с 5-ым, все поправили, но вот неприятный осадок на душе и недоверие к данной СУБД осталось.
...
Рейтинг: 0 / 0
16.12.2003, 14:12
    #32353953
alex_k
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
я с 5.х не работал, но на 4.2 нормально процедуры у меня работали. и данных было мало и структура простая :-)

процедуры я использовал там, где не мог селектом производительности добиться. кстати, и сейчас иногда прибегаю к такому методу, где совесть позволяет.
...
Рейтинг: 0 / 0
16.12.2003, 14:21
    #32353980
f_w_p
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Присоединюсь к alex_k. Неудача с пятыми версиями в свое время чуть не погубила этот продукт. А 4.2 вполне работал. Советую попробовать FireBird 1.5. Для начала просто без всяких переделок. Потом поиграть с индексами и планами запросов.
...
Рейтинг: 0 / 0
16.12.2003, 15:33
    #32354133
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
to All...
Так чем лучше заняться (см. первый пост)???
Может на старший сервер перевести???
...
Рейтинг: 0 / 0
16.12.2003, 15:42
    #32354155
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
FB 1.5 работает с первым диалектом??? (удаленно понятно, а локально).
...
Рейтинг: 0 / 0
16.12.2003, 15:42
    #32354157
DimaR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Я в свое время решил сравнить,
тупо делфишной DataPump скопировал базу на
Oracle 8.0.5, создал такие же индексы,
все залетало, т.е. отклики на те же запросы были мгновенные, на гораздо более медленном железе, в то время как IB мог обрабатывать запросы до 20 мин.
...
Рейтинг: 0 / 0
16.12.2003, 15:48
    #32354169
tygra
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
В любом случае перенос на другой, вышестоящий сервер в линейке, даст выигрыш. Как говорится, кесарю - кесарево и никуда тут не попрешь. По крайней мере на MS SQL такое количество данных будет летать

-- Tygra's --
...
Рейтинг: 0 / 0
16.12.2003, 19:21
    #32354488
Gold
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Посмотри графики обращений к таблицам в эксперте. Скорее всего где-то есть много неиндексированных чтений. Ну и добейся чтоб они были индексированными.
...
Рейтинг: 0 / 0
17.12.2003, 03:21
    #32354634
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
железо конечно можно заменить.... но я бы порекомендовал заменить версию... причем до семерки (FB мне не понравился всеж) Если будешь менять железо, то ставь двухпроцовый. Гипертрейдинг толку не дает. Да, на двухпроцовом из IB работает только начиная с 7.0 и с дополнительной лицензией. Ощутимое достоинство -- хорошее распаралеливание ресурсов под разные запросы.
а по твоим вариантам....

"- хранить базы по областям отдельно" много гемороя очень много... но при желании можно что-то улучшить (знаю на опыте)

"- перевод базы на Dialect 3" толку нет, простой перевод в смысле

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

"- оптимизация запросов и ХП предназначенных для построения отчетов" хороший вариант может дать ускорение от 0 и до.... вчера видел оптимезацию запроса... ускорился в 1000 (тысячу) раз

"- писать новую базу (скорее всего не дадут по времени)" кардинальный вариант... может и ускорить и замедлить, но время, которое будет затрачено на разработку...
...
Рейтинг: 0 / 0
17.12.2003, 15:08
    #32355473
KiLLun
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Оптимизация базы...
Всем огромное спасибо за мнения, советы и реккомендации...
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Оптимизация базы... / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]