|
Скорость выполнения запросов на внешних данных 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) Пустой результат...но быстрее ))
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |