Исправляюсь



Posted by Рустем Мухаметшин on September 08, 1999 at 14:13:34:

In Reply to: Быстpые факты. pаботают быстpо везде! posted by Аpкадий Водяник on September 08, 1999 at 02:47:32:

        Каюсь. Проводил тест впопыхах, и не проанализировал его результаты как следует. Отметил результат и забыл, а при случае вспомнил о нем :)). Тем не менее результаты именно такие как я и сказал в предыдущем сообщении. Надеюсь, публика и Автор не решили, что я публикую заведомо ложные результаты :))).
        А теперь по существу. Как известно эффективность индексации сильно зависит от условий применения. В моем случае они оказались на 100% не выгодны для быстрых фактов :))). Честное слово, я не выбирал специально эту настройку. Просто в ней достаточно активно делался поиск по фактам для расчетов по зарплате и я решил глянуть, а что дадут ускоренные факты. При этом я не учел нижеследующего обстоятельсва и СДЕЛАЛ НЕВРЕНЫЕ, вобщемто, ОБОБЩАЮЩИЕ ВЫВОДЫ. Это могло ввести в заблуждение, поэтому, хотя я и не разделяю в целом подхода, за недоказанностью прошу прощения за необоснованные обобщения.

        Производился поиск по прототипу факта (табеля рабочего времени) запись которого производилась скученно, т.е. операции одна за одной. Это означает
        1) что как не индексируй - ничего не виграешь
        2) был правильно выбран метод реализации :))). (Быстрые факты просто не понадобились, достаточно обычных :)
        Тем не менее, я не исключаю того что в некоторых случаях (да я и сам могу написать такую настройку) "быстрота фатков" даст свой результат для счета. Однако, хочу заметить, что скорее всего в такой настройке выбран не эффективный метод реализации и следует пересмотреть баланс между э/п и фактами и их сочетанием. Скорость счета баланса только выиграет, да и потребляемая память тоже уменьшиться. Отчеты отдельный разговор.

        Ну и собственно фрагметы профилей
3.08 2-х польз, P200MMX/96M, W98, ta 1 12, OLD

  Быстрые факты Обычные факты
Чтение файлов опеpаций (*.f3p): 10760 16.9 10826 21.1
Анализ фpаз опеpаций: 603 0.9 546 1.1
Выполнение пpоводок: 32107 50.3 16343 31.9
Выполнение файлов-коэффициентов: 17194 26.9 20995 40.9
Вычисление выpажений в деpеве: 796 1.2 557 1.1
Дескpиптоpы пеpвичных документов: 131 0.2 85 0.2
Создание пеpвичных документов: 0 0.0 0 0.0
Инициализация внутpенних таблиц: 2067 3.2 1812 3.5
Индикация на мнемосхеме: 170 0.3 144 0.3
Итого: 63828 100.0 51308 100.0
За эти  ... мс было пеpесчитано 15451 опеpаций. 63828   51308  
Сpедняя скоpость пеpесчета состояния Сеpвеpа: ... оп/с 242   301  

* Профиль ZRP_R.RPT  (фрагмент с поиском). Быстрые факты
                         ~         ~.0071 *******************************************************************************
                         ~         ~.0072 *
                         ~         ~.0073 :Oklad         Расчет окладов
                         ~         ~.0074 *
                         ~         ~.0075 *******************************************************************************
                         ~         ~.0076 R =[saMONTH,MC]                      Субсчет текущего месяца
                         ~         ~.0077 MT=[get*R,'Рабочих']                 Число рабочих часов в месяце
                         ~         ~.0078 If MT=0
                         ~         ~.0079    ES='Неустановлено кол-во раб.дней в мес.'+[intsnMC]
                         ~         ~.0080   Call Error
                         ~         ~.0081   $ =0
                         ~         ~.0082   Stop
                         ~         ~.0083 EndIf
                   #   6.3%      342.0084 rewind facts range MC, MC+DC/100
                         ~         ~.0085 :Okl_next
                      1.5%        80.0086   search ТабЗП ?H сотрудник ?H2 дней ?WT штамп ??
                         ~         ~.0087   If [success]=0
                         ~         ~.0088     GoTo Okl_exit
                         ~         ~.0089   EndIf
                      0.4%        20.0090    MN=[ro100*[get*H2,H+'Оклад']*WT/MT]/100             Сумма оклада
                         ~         5.0091   If H<>0
                         ~         ~.0092     I ='20'+H
                         ~         ~.0093     IP='81'+H
                      0.2%        10.0094      [plus*H2,'Доход',MN]
                         ~         ~.0095     Call Nach
                         ~         ~.0096   EndIf
                         ~         ~.0097 Goto Okl_next
                         ~         ~.0098 :Okl_exit
                         ~         ~.0099 $ =0
                         ~         ~.0100 Stop
* Профиль ZRP_R.RPT  (фрагмент с поиском). Обычные факты
                         ~         ~.0071 *******************************************************************************
                         ~         ~.0072 *
                         ~         ~.0073 :Oklad         Расчет окладов
                         ~         ~.0074 *
                         ~         ~.0075 *******************************************************************************
                         ~         ~.0076 R =[saMONTH,MC]                      Субсчет текущего месяца
                         ~         ~.0077 MT=[get*R,'Рабочих']                 Число рабочих часов в месяце
                         ~         ~.0078 If MT=0
                         ~         ~.0079    ES='Неустановлено кол-во раб.дней в мес.'+[intsnMC]
                         ~         ~.0080   Call Error
                         ~         ~.0081   $ =0
                         ~         ~.0082   Stop
                         ~         ~.0083 EndIf
                  ## 10.7%      337.0084 rewind facts range MC, MC+DC/100
                         ~         ~.0085 :Okl_next
                      2.9%        90.0086   search ТабЗП ?H сотрудник ?H2 дней ?WT штамп ??
                         ~         5.0087   If [success]=0
                         ~         ~.0088     GoTo Okl_exit
                         ~         ~.0089   EndIf
                      1.0%        31.0090    MN=[ro100*[get*H2,H+'Оклад']*WT/MT]/100             Сумма оклада
                      0.3%        10.0091   If H<>0
                         ~         ~.0092     I ='20'+H
                         ~         ~.0093     IP='81'+H
                         ~         ~.0094      [plus*H2,'Доход',MN]
                         ~         ~.0095     Call Nach
                         ~         ~.0096   EndIf
                         ~         ~.0097 Goto Okl_next
                         ~         ~.0098 :Okl_exit
                         ~         ~.0099 $ =0
                         ~         ~.0100 Stop

        Среди прочего обратите внимание на REWIND FACTS. На него то уж точно ситуация не должна влиять. В обоих случаях одинаковая, достаточно большая величина. Зачастую это время съедает выигрышь от ограничения временного интервала и отчетная форма с REWIND и без исполняются примерно за одно и тоже время (вообщем-то опять голословно, но я уже хотел ложиться спать :)

Ну и выдержка из статистики памяти (опущеные элементы совпадают)

В базе D' Быстрые факты Обычные факты
Стpуктуpы для фактов: 17,636,713 58.5% 13,131,309 62.9%
Индексы "быстpых фактов": 4,752,978 15.8% 0 0.0%
Итого: 30,130,659   20,872,277  

~50% увеличение потребления ОЗУ




Пpишедшие ответы: