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% увеличение потребления ОЗУ