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

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

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

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

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

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

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

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

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

-- Tygra's --
...
Рейтинг: 0 / 0
Оптимизация базы...
    #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
Оптимизация базы...
    #32353152
Фотография Markelenkov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чёй-то не понял, здесь ведь вроде СУБД сравнивают?
...
Рейтинг: 0 / 0
Оптимизация базы...
    #32353167
Gt.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Gt.
Гость
мда .. у меня десктоп помощнее будет, небойсь без SCSI, обычная память ... вложите туда хотя бы 3 килобакса будет 10-20 раз быстрее
...
Рейтинг: 0 / 0
Оптимизация базы...
    #32353673
Фотография tygra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну железо уже можно и помощнее, но три лимона записей всего - это немного. Может чего с индексами? Процедура конечно офигенная, но надо ее просмотреть на те места, где все тяжко, и их прооптимизировать.

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

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

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

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

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

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

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

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

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

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


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