Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6  ОтправитьПечать
Очень популярная тема (более 25 ответов) Оптимизация запроса для ТП (число прочтений - 11332 )
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #45 - 05. Марта 2008 :: 16:57
Печать  
Кстати, оказывается индексы на таблицах SCxxx очень даже продуманы и полезны. Ребята оттуда заслуживают уважения.
  
Наверх
ICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #46 - 05. Марта 2008 :: 17:04
Печать  
spock писал(а) 05. Марта 2008 :: 16:32:
А тут уже начинается хужесть, но только самая-самая малость.
и это неизбежно, т.к. необходим букмарк-лукап, что показано твоими планами, а это дополнителные чтения с диска.
spock писал(а) 05. Марта 2008 :: 16:32:
А с добавление новых полей эта хужесть становится только хужее (наверняка нужно будет выводить ismark, чтобы пиктограммы были полноценными и некоторые поля таблицы: ед. изм. и прочее).
а вот хуже не будет, т.к. с большой долей вероятности* букмарк все равно будет такой же что для одного поля не входящего в индекс, что для нескольких, т.к. эти поля с большой долей вероятности расплагаются на одной странице.

* эта вероятность не распрастроняется на таблицы, совокупный объем полей (кроме blob-полей) одной записи которых, не укладываются в 8К, а также на blob-поля.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3051
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #47 - 05. Марта 2008 :: 17:08
Печать  
пока я писал ответ ты уже сам пояснил наблюдения
  

1&&2&&3
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #48 - 05. Марта 2008 :: 17:12
Печать  
trad писал(а) 05. Марта 2008 :: 17:04:
эта вероятность не распрастроняется на таблицы, совокупный объем полей одной записи которых, не укладываются в 8К, а также на blob-поля.

Да, это важно.
  
Наверх
ICQ  
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #49 - 05. Марта 2008 :: 18:01
Печать  
короче народ!
есть база на 100 тыщ элеметов.
есть периодика под эти эти позиции.
если будет интересно
могу выложить для экспериментов.
что скажете?
477687116
+есть журнал документов
база 11 гб.
  
Наверх
 
IP записан
 
ADirks
1c++ developer
1c++ moderator
Отсутствует


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #50 - 06. Марта 2008 :: 05:14
Печать  
trad писал(а) 05. Марта 2008 :: 14:22:
я кажется понял ваши проблемы Очень довольный
скажите, друзья-товарищи, у вас КП в индекс попадает?
если нет, тогда понятно ускорение в "третьем варианте"
еще раз перечитайте пост Берездетского

Отчасти наши проблемы и в этом. Но не во всех случаях.  Щас полез смотреть как там чего конкретно, и нашёл явный ляп  Печаль  КП был "IsFolder, Наименование Asc, ROW_ID" вместо "ParentID, IsFolder, Наименование Asc, ROW_ID" - это в случае иерархического режима.  Но вот при отключенной иерархии КП "Наименование Asc, ROW_ID".  Ту самую форму списка мы вертели во всех вариантах, и эффект в любом из них был неудовлетворительным.  Блин, надо будет ещё раз проверить...

Про сокрытие колонок, и модификацию запроса.  Была такая проблема, когда восстанавливались настройки ТП, и в частности видимость колонок.  Получали, что колонок визуально нет, а в запросе они оставались. Выяснилось, что если видимость колонок выключать до назначения поставщика данных, то поставщик эти скрытые колонки в запросе оставит.  Что в общем то и неудивительно, но было бы неплохо такое поведение изменить.
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #51 - 06. Марта 2008 :: 09:18
Печать  
Запрос таки побороли!
работает прекрасно!
но
ТП выводить строки, в нужном каоличестве как и положено,
вот токо в них пусто.
     РадугаМД = СоздатьОбъект("MetaDataWork");
     реквАналог = "SP" + РадугаМД.ИДРеквизитаСправочника("Аналоги", "Аналог");
     Текст="
     |select
     |  ТМЦ.code as Код,
     |  $Аналоги.Аналог as [Аналог $Справочник.ТМЦ],
     |  $ПоследнееЗначение.Цены.Единица(Цены.id,:ВыбДата) as [Ед $Справочник.Единицы],
     |  $ПоследнееЗначение.Цены.Валюта(Цены.id,:ВыбДата) as [Вал $Справочник.Валюты],
     |  $ПоследнееЗначение.Цены.Цена(Цены.id,:ВыбДата) as Цена
     |,
     |  (select sum(Резервы.РезервТовараОстаток)
     |   from $РегистрОстатки.РезервыТоваров(,,
     |          Товар="+реквАналог+",
     |          Товар, РезервТовара
     |        ) Резервы
     |  ) as Резерв,
     |  (select sum(Остатки.ОстатокТовараОстаток)
     |   from $РегистрОстатки.ОстаткиТоваров(,,
     |          Товар="+реквАналог+" and Фирма=?ВыбФирма(14,9),
     |          Товар, ОстатокТовара
     |        ) Остатки
     |  ) as Остаток,
     |  Аналоги.code as КодАналога,
     |  Аналоги.row_id as row_id
     |from $Справочник.Аналоги as Аналоги (nolock)
     |inner join $Справочник.ТМЦ as ТМЦ on ТМЦ.id = $Аналоги.Аналог
     |inner join $Справочник.Цены as Цены on Цены.parentext = $Аналоги.Аналог and $Цены.КатегорияЦены = ?ВыбЦена(14,9)
     |where Аналоги.parentext=?ТекТовар(14,9)
     |";
     КП="КодАналога, row_id";
  
Наверх
 
IP записан
 
varelchik
God Member
*****
Отсутствует


I Love YaBB 2!

Сообщений: 788
Зарегистрирован: 22. Мая 2006
Re: Оптимизация запроса для ТП
Ответ #52 - 07. Марта 2008 :: 16:59
Печать  
Так так.
И где продолжение?
Вношу поправки.
Я покачто даун в ТП.
Но!
Благодаря наставлениям некоторых лиц....
мы знаем кто они.
получил соответствующие настовления по ТП.
Незнаю может в доке это опясано, но попробую еще равз для новичков(типа мене).
1.Создаем объект ТП.
2.Инициализируем ПоставщикаДанных(Текст запроса и т.п.).
3.А только потом определяем настройки ТП(колонки ТП, и ОБЯЗАТЕЛЬНО ПОЛЯ ПОСТАВЩИКА ДАННЫХ!)

Почемук 3. пункт?
Незнаю.
Когда с первый раз создал ТП то Поле Поставщика не объявлял и все работало.
НО! еще раз уточню низнаю почему но после создания второго ТП на той же форме 2-е ТП ничего в полях не выводило, хотя строки были!
  
Наверх
 
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #53 - 07. Марта 2008 :: 17:59
Печать  
Четвертая итерация: делаем измерения по времени и прочее.
Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT TOP 30
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	parentid = '     0   '
ORDER BY
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50)) --Посчитаем
 


Сейчас результаты измерений на таблице, где всего элементов 451411, на первом уровне 185733 элементов, размер строки 1497 байт. Все дальнейшие измерения проходят на этой же таблице.(если не указано другое)

1. SQL Server Execution Times: 50 ms
1. Execution time: 46 ms

2. SQL Server Execution Times: 48 ms
2. Execution time: 46 ms

3. SQL Server Execution Times: 57 ms
3. Execution time: 63 ms

Попали в индекс все хорошо. Время замечателтьное.
« Последняя редакция: 10. Марта 2008 :: 11:17 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #54 - 07. Марта 2008 :: 18:21
Печать  
Пятая итерация: делаем измерения по времени и прочее.
Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT TOP 30
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id,
	code as Код, -- Добавил Код
	ismark as ПометкаУдаления, - Добавил пометку
	SP107 as ИНН - Добавил ИНН
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	parentid = '     0   '
ORDER BY
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50))
 



1. SQL Server Execution Times: 291 ms
1. Execution time: 296 ms

2. SQL Server Execution Times: 289 ms
2. Execution time: 280 ms

3. SQL Server Execution Times: 282 ms
3. Execution time: 283 ms
« Последняя редакция: 10. Марта 2008 :: 11:17 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #55 - 07. Марта 2008 :: 18:28
Печать  
Шестая итерация: делаем небольшой финт
Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	row_id IN (SELECT TOP 30 row_id FROM sc133 (NOLOCK) WHERE parentid = '     0   ' ORDER BY parentid, isfolder, descr, row_id)
ORDER BY  -- ЭТО ДЛЯ ПОРЯДКА
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50))
 



1. SQL Server Execution Times: 154 ms
1. Execution time: 156 ms

2. SQL Server Execution Times: 130 ms
2. Execution time: 123 ms

3. SQL Server Execution Times: 136 ms
3. Execution time: 143 ms
« Последняя редакция: 10. Марта 2008 :: 11:18 - spock »  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #56 - 07. Марта 2008 :: 18:33
Печать  
Седьмая итерация: финт и полей больше

Код
Выбрать все
SET NOCOUNT ON

DBCC DROPCLEANBUFFERS
DBCC FREEPROCCACHE

DECLARE @start as datetime
SET @start = GETDATE()

SET STATISTICS IO ON
SET STATISTICS TIME ON

SELECT
	isfolder as Пиктограммка,
	descr as Наименование,
	row_id as row_id,
	code as Код, -- Добавил Код
	ismark as ПометкаУдаления, -- Добавил пометку
	SP107 as ИНН -- Добавил ИНН
FROM sc133 (NOLOCK) -- Справочник.Клиенты
WHERE
	row_id IN (SELECT TOP 30 row_id FROM sc133 (NOLOCK) WHERE parentid = '     0   ' ORDER BY parentid, isfolder, descr, row_id)
ORDER BY  -- ЭТО ДЛЯ ПОРЯДКА
	parentid,
	isfolder,
	descr,
	row_id

SET STATISTICS TIME OFF
SET STATISTICS IO OFF

PRINT 'Execution time: ' + CAST(DATEDIFF(ms, @start, GETDATE()) as varchar(50))
 



1. SQL Server Execution Times: 153 ms  
1. Execution time: 140 ms

2. SQL Server Execution Times: 161 ms  
2. Execution time: 156 ms

3. SQL Server Execution Times: 128 ms  
3. Execution time: 126 ms
  
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #57 - 07. Марта 2008 :: 18:38
Печать  
План выполнения для итерации 4:
  

explan4.PNG ( 2 KB | Загрузки )
explan4.PNG
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #58 - 07. Марта 2008 :: 18:40
Печать  
План выполнения для итерации 5:
  

explan5.PNG ( 3 KB | Загрузки )
explan5.PNG
Наверх
ICQ  
IP записан
 
spock
1c++ developer
1c++ moderator
Отсутствует



Сообщений: 822
Местоположение: Новосибирск
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Оптимизация запроса для ТП
Ответ #59 - 07. Марта 2008 :: 18:42
Печать  
План выполнения для итерации 6:
  

explan6.PNG ( 5 KB | Загрузки )
explan6.PNG
Наверх
ICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 2 3 [4] 5 6 
ОтправитьПечать