Имя: Пароль:
1C
1С v8
Скорость выполнения запросов на внешних данных 1С 8.3
,
0 Darhon
 
03.02.14
16:57
Доброго времени суток. Подскажите пожалуйста, почему при выполнении из 1С запроса встроенными средствами или через ADO запросы выполняются очень медленно или вообще вешают наглухо комп. А при выполнении того же запроса например через  IBExpert(база Firebird) все выполняется за несколько секунд. Заранее благодарю.
1 Darhon
 
03.02.14
17:07
Кто сталкивался поделитесь опытом???
2 H A D G E H O G s
 
03.02.14
17:10
Берем обработку, в ней выводим время (в миллисекундах) отправки запроса, время завершения запроса, в профайлере sql смотрим время начала запроса, продолжительность, время окончания запроса.

Возвращаемся с результатами сюда.
3 Darhon
 
03.02.14
17:10
(2) какую обработку??? Подскажеет??
4 SanGvin
 
03.02.14
17:12
(3) которую вы напишите. очевидно же.
5 Darhon
 
03.02.14
17:14
ТекстЗапроса = "select d.nike, sum(s.schet)*(-1), d.cod_drv, c.ch_name, d.channel
|from drv_schet s, drivers d, channels c
|where s.cod_purpose in (2,3,12,21) and d.cod_drv=s.cod_drv and d.channel=c.channel and d.channel in (1,8,11)
|and s.d_mod between '"+Отчет.ДатаНачала+ "' and '" +Отчет.ДатаКонца+"' group by 1, 3, 4, 5 order by 4, 1";
НаборЗаписей = Новый COMОбъект("ADODB.RecordSet");
НаборЗаписей.ActiveConnection = Соединение;
НаборЗаписей.Open(ТекстЗапроса);

Запрос такого вида.... и как я узнаю в ней время??? Если при инициализации запроса обработка виснет наглухо, вместе с компом (
6 SanGvin
 
03.02.14
17:15
вы бухгалтер?
7 H A D G E H O G s
 
03.02.14
17:16
Вижу. Вижу. Вижу нехилый такой cross join.
8 Darhon
 
03.02.14
17:17
82 000 000 записей в таблице....остальные мельче :)
9 Darhon
 
03.02.14
17:18
(7) Неет....я уборщица %) Просто за ком пустили на 10 минут :)
10 H A D G E H O G s
 
03.02.14
17:19
Добавь inner join и возвращайся.
11 H A D G E H O G s
 
03.02.14
17:19
(9) Заметно.
12 МихаилМ
 
03.02.14
17:23
(7)
для ORACLE и ms sql (>2000)

описание соединения в разделе условий - допустимо и эквивалентно inner join.

так что и FB  такое может быть.
13 H A D G E H O G s
 
03.02.14
17:27
(12) Согласен. Но я не вижу смысла рисковать.
14 МихаилМ
 
03.02.14
17:30
(12)
я тоже предпочитаю правила  соединения описывать в join
15 Darhon
 
03.02.14
17:31
До join  (выполнялось в IBExpert)

------ Информация о производительности ------
Время подготовки запроса = 16ms
Время выполнения запроса = 998ms
Среднее время на получение одной записи = 30,24 ms

После:

------ Информация о производительности ------
Время подготовки запроса = 19ms
Время выполнения запроса = 2s 871ms
Среднее время на получение одной записи = 114,84 ms
16 Darhon
 
03.02.14
17:31
С inner join производительность упала.... :(
17 Darhon
 
03.02.14
17:33
Тем более а если запрос будет описан средствами встроенного конструктора запростов? Производительность еще более упадет?
18 МихаилМ
 
03.02.14
17:38
(0)
почти уверен, что  IBExpert
не считывает весь рекордсет.

а как ведет ВИД - не знаю.
в ADO - настраивается
19 Darhon
 
03.02.14
17:41
(18) А можно ли из 1С не считывать весь рекордсет?? Ведь ИБЕксперт тоже стороннее приложение для базы как и 1С ...
20 Darhon
 
03.02.14
17:41
Как настраивается? :)
21 МихаилМ
 
03.02.14
17:42
+(18)
еще много зависит от драйвера.

помню. кому-то на этом форуме очень помогла смена драйвера FB
22 МихаилМ
 
03.02.14
17:44
(20)
читайте документацию к RECORDSET.
23 H A D G E H O G s
 
03.02.14
17:49
(22) Это ты сейчас про тип курсора?
24 Зойч
 
03.02.14
17:51
скорее всего IBExpert выбирает TOP сколько-то, а адо - все
25 Зойч
 
03.02.14
17:51
(24) что-то вроде динамического списка
26 МихаилМ
 
03.02.14
17:54
(23)
нет.
насколько я помню, по умолчанию (oledb или ado) выбирается
то ли 50 000 записей, то ли 50 мегабайт.
27 Darhon
 
03.02.14
18:14
(26) что-то я не нашел такого в свойствах recordset-а
28 МихаилМ
 
03.02.14
18:23
(27)
CacheSize
29 Darhon
 
03.02.14
18:28
(28) На вскидку какое оптимальное значение? По умолчанию же 1??
30 МихаилМ
 
03.02.14
18:34
(29)
на вскидку  - 30 000.

но вопрос из серии "сколько записей записывать в одной вложенной транзакции ".

однозначного ответа  нет.
31 Darhon
 
03.02.14
18:39
Оук спасибо, следующая проблема.... вот:

ВЫБРАТЬ
    DRIVERS.NIKE,
    OP_STATUS_ARCH.D_STATUS КАК D_STATUS,
    OP_STATUS_ARCH.ORDER_ID КАК ORDER_ID,
    OP_STATUS_NAMES.STATUS_NAME,
    OPERATORS.FIO,
    CHANNELS.CH_NAME
ИЗ
    ВнешнийИсточникДанных.firebird.Таблица.CHANNELS КАК CHANNELS,
    ВнешнийИсточникДанных.firebird.Таблица.OPERATORS КАК OPERATORS,
    ВнешнийИсточникДанных.firebird.Таблица.OP_STATUS_ARCH КАК OP_STATUS_ARCH,
    ВнешнийИсточникДанных.firebird.Таблица.OP_STATUS_NAMES КАК OP_STATUS_NAMES,
    ВнешнийИсточникДанных.firebird.Таблица.DRIVERS КАК DRIVERS
ГДЕ
    OP_STATUS_ARCH.COD_OP = OPERATORS.COD_OP
    И OP_STATUS_ARCH.COD_DRV = DRIVERS.COD_DRV
    И OP_STATUS_ARCH.STATUS = OP_STATUS_NAMES.STATUS_ID
    И OP_STATUS_ARCH.D_STATUS > "03.02.2014"

УПОРЯДОЧИТЬ ПО
    D_STATUS,
    ORDER_ID

Виснет на мертво....на IBExperte 3-4 секунды, на 1С за 15 минут не выполнился :(( Как быть??
32 МихаилМ
 
03.02.14
18:44
(31)
анализируйте
трассировки

которые можно настроить

в "Администратор источников данных ODBC"
33 Сисой
 
03.02.14
18:56
(31) А зачем тебе перемножение таблиц OP_STATUS_ARCH и CHANNELS?
34 МихаилМ
 
03.02.14
18:59
(31)
5 таблиц
и  3 соединения

так что

(7) был прав.
35 Darhon
 
03.02.14
19:07
(33) где перемножение??
36 Darhon
 
03.02.14
19:08
(34) блин...запрос висит в трассировку ОДБЦ ничего не пишется...
37 Сисой
 
03.02.14
19:09
(35) Тебя кто учил писать запросы? Это вообще запрос двоечника.
Правильно пишет (34).
38 Сисой
 
03.02.14
19:10
По какому условию связываются OP_STATUS_ARCH и CHANNELS?
39 zladenuw
 
03.02.14
19:11
(38) то проще затащить отдельно таблицы в 1с и там уже соединять или как ?
40 Darhon
 
03.02.14
19:11
блин...не связываются, но не суть я думаю, в channels  всего 17 строк
41 Darhon
 
03.02.14
19:11
(39) не ...точно не проще....они меняются в секунду по паре раз ((
42 Сисой
 
03.02.14
19:12
(40) Так она еще и с остальными таблицами начинает перемножаться в плане запроса. Скорее всего.
43 Darhon
 
03.02.14
19:16
(42) Добавил условие....
44 Сисой
 
03.02.14
19:20
Ждем результата.
45 Darhon
 
03.02.14
19:22
(44) думает....
46 Darhon
 
03.02.14
19:24
(44) Пустой результат...но быстрее ))
Здесь можно обсудить любую тему при этом оставаясь на форуме для 1Сников, который нужен для работы. Ymryn