Вход | Регистрация
 

Как сделать "грязное чтение" по регистру ?

Как сделать
Я
   ИС-2
 
31.12.21 - 09:07
Есть РС к которому обращаются много пользователей. В нем нет кричтиеских данных. Подумал - для повышения скорости работы в нем сделать грязное чтение.
Даже если прочитаются не записанные данные, то не страшно.

Как это можно сделать ?
   Ёпрст
 
1 - 31.12.21 - 09:17
(0) у тя и так все запросы на чтение идут с хинтом нолок, в скуле, к примеру.
   Ёпрст
 
2 - 31.12.21 - 09:18
какое еще повышение чтения тебе нужно ?
   Ёпрст
 
3 - 31.12.21 - 09:18
Нужна скорость - правильно задай структуру, правильно расположи измерения в порядке следования, при необходимости, задай свои покрывающие индексы
   Ёпрст
 
4 - 31.12.21 - 09:19
в самом скуле, например.
   pechkin
 
5 - 31.12.21 - 11:28
(1) в транзакции нет
   2mugik
 
6 - 31.12.21 - 13:02
(5)Счас же версионник моден. Там вроде как без простоев.
   ДенисЧ
 
7 - 31.12.21 - 13:11
(6) Что значит "моден"? .3 вроде его принудительно включает? Или я что-то подзабыл?
   fisher
 
8 - 31.12.21 - 13:15
(0) Снимись с ручника. Все уже давно на версионниках работают. И ты тоже, если 1С и сиквел не допотопные. А в них и грязного чтения нет и скорость не хуже.
   fisher
 
9 - 31.12.21 - 13:19
Или у тебя транзакционное чтение на автоматических блокировках?
   fisher
 
10 - 31.12.21 - 13:19
Тогда только на управляемые переходить.
   mistеr
 
11 - 31.12.21 - 14:05
(0) С чего ты взял, что это поможет?

В чем узкое место сейчас?
   mistеr
 
12 - 31.12.21 - 14:06
(9) Даже на автоматических параллельному чтению ничего не мешает. Блокировки появляются при записи.
   ИС-2
 
13 - 01.01.22 - 12:37
Как можно ускорить полученение категории объекта ?

ВЫБРАТЬ 
    1 КАК КОЛИЧЕСТВО
ИЗ
    РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
ГДЕ
    КатегорииОбъектов.Объект = &Объект
    И КатегорииОбъектов.Категория = &Категория

такой ерундовый запрос выполняет 2 сек. 

Может на обращение к регистру переделать ?
   ДенисЧ
 
14 - 01.01.22 - 14:07
(13) "ЫБРАТЬ
ИЗ
    РегистрСведений.КатегорииОбъектов"

А сейчас куда обращаешься? Инлексацию проверь
   dmpl
 
15 - 01.01.22 - 14:18
(13) ВЫРАЗИТЬ в условиях не пробовал? А то объект - наверняка составной тип.
   pechkin
 
16 - 01.01.22 - 14:20
(15) а как выразить может помочь?
   Фрэнки
 
17 - 01.01.22 - 14:23
(16) раскрывается запрос в кучку вложенных по каждому типу поля, если в поле условия указан составной тип
   acht
 
18 - 01.01.22 - 14:25
(0) Если бы программисты 1С были врачами:
https://a.d-cd.net/mg8A31w4-wfn-st2mm8pCeYcNRY-960.jpg
   pechkin
 
19 - 01.01.22 - 14:26
(17) называется слышал звон, но не понял где он.
То что ты описал - это про доступ через точку
   Sapiens_bru
 
20 - 01.01.22 - 15:06
(13) Посмотреть реальный текст запроса на SQL сервере. Посмотреть план запроса. Если нужные доступы есть, если нет - начать с их получения. Не играть в угадайку.

Могу с этим помочь (бесплатно). Напиши на sapiens-bru@yandex.ru
   ИС-2
 
21 - 03.01.22 - 14:36
(20) спасибо. Как будет доступ в профайлер - напишу.

чуть ускорил за счет приведения к типу. Что еще можно выжать ?
ВЫБРАТЬ 
    1 КАК КОЛИЧЕСТВО
ИЗ
    РегистрСведений.КатегорииОбъектов КАК КатегорииОбъектов
ГДЕ
    Выразить(КатегорииОбъектов.Объект как Документ.ЗаказПокупателя) = &Объект
    И КатегорииОбъектов.Категория = &Категория и КатегорииОбъектов.Объект ссылка Документ.ЗаказПокупателя
   H A D G E H O G s
 
22 - 03.01.22 - 15:04
(21) выжать из руководства доступ к профайлеру
   Armando
 
23 - 03.01.22 - 16:17
(21) В структуре регистра измерение Объект переместить на первое место.
   SuperMario
 
24 - 04.01.22 - 12:01
(0) Вангую, что у вас УТ 10.3/УПП 1.3 судя по названию регистра (нашел его в УТ 10.3)
Если так, то у вас 1С  с автоматическими блокировками и режимом совместимости 8.2.16 или чуть старше.

Я что-то не знаю, как из 1с можно управлять хинтами WITH(NOLOCK) или, как сейчас пишется в СУБД перед выполнение запроса  SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

(15) это называется разименование полей составного типа.

(16) никак. Только хуже сделаете.
(20) можно глянуть.

(21) сделали  хуже. Вы не правильно используете Выразить(КатегорииОбъектов.Объект как Документ.ЗаказПокупателя) = &Объект
В плане запроса это будет CAST(....)  Это выражение над индексным полем. СУБД- шник свалится из Index SEEK в Index SCAN. А это, по сути, сканирование всей таблицы , т.к. индекс кластерный.

(23) если  никто не трогал рег, то Объект там на первом месте в индексе.

Не видел полного текста запроса с применением данного регистра.
Я бы смотрел в сторону:
- избавиться от полей составного типа.
- пересмотреть запрос.

Например:

Выбрать Первые 1 Объект, КатегорииОбъектов  Из  РегистрСведений.КатегорииОбъектов Где КатегорииОбъектов.Объект =&Объект И КатегорииОбъектов.Категория = &Категория  

Ничего больше вы не выжмите из этого.


Жду критики)))
   pechkin
 
25 - 04.01.22 - 12:03
Разве выразить дает каст? Вроде только для преобразования чисел-строк
   acht
 
26 - 04.01.22 - 12:12
(24) > плане запроса это будет CAST(....)  
(25) > для преобразования чисел-строк

Какие еще будут варианты?
   SuperMario
 
27 - 04.01.22 - 12:15
(25) даст. Специально нашел фрагмент курса Богачева В. где он сам признается, что раньше неправильно использовал Выразить (...). Есть пруфы.
   acht
 
28 - 04.01.22 - 12:17
(27) > Есть пруфы
Где?
   SuperMario
 
29 - 04.01.22 - 12:23
(28) из курса подготовки эксперта по технологическим вопросам Виктора Богачева.

Могу план запроса прислать в личку (не поленюсь и сделаю). Извините , к курсу доступ не предоставлю. Скрины могу)
   acht
 
30 - 04.01.22 - 12:27
(29) > в личку
Сюда. И исходный запрос.
 
 
   ДенисЧ
 
31 - 04.01.22 - 12:29
(29) Ты стесняешься своего плана запроса? Может, ты хочешь об этом поговорить?
   SuperMario
 
32 - 04.01.22 - 12:32
(31) lol

Немного терпения.
   Ёпрст
 
33 - 04.01.22 - 12:43
без выразить
ГДЕ
    КатегорииОбъектов.Объект = &Объект
    И КатегорииОбъектов.Категория = &Категория и КатегорииОбъектов.Объект ссылка Документ.ЗаказПокупателя



SELECT
P1
FROM dbo._InfoRg18552 T1
WHERE (T1._Fld18553_TYPE = 0x08 AND T1._Fld18553_RTRef = 0x00000170 AND T1._Fld18553_RRRef = 0x00000000000000000000000000000000) AND (T1._Fld18554RRef = @P2) AND (T1._Fld18553_TYPE = 0x08 AND T1._Fld18553_RTRef = 0x00000170)',N'P1 numeric(10),@P2 varbinary(16)',1,0xAC312DA6B9DCB5A540FFB200F5CA1D1D

с выразить
ГДЕ
    Выразить(КатегорииОбъектов.Объект как Документ.ЗаказПокупателя) = &Объект
    И КатегорииОбъектов.Категория = &Категория и КатегорииОбъектов.Объект ссылка Документ.ЗаказПокупателя

SELECT
P1
FROM dbo._InfoRg18552 T1
WHERE ((CASE WHEN T1._Fld18553_TYPE = 0x08 AND T1._Fld18553_RTRef = 0x00000170 THEN T1._Fld18553_RRRef END) = 0x00000000000000000000000000000000) AND (T1._Fld18554RRef = @P2) AND (T1._Fld18553_TYPE = 0x08 AND T1._Fld18553_RTRef = 0x00000170)',N'P1 numeric(10),@P2 varbinary(16)',1,0xAC312DA6B9DCB5A540FFB200F5CA1D1D
   SuperMario
 
34 - 04.01.22 - 12:46
SELECT
T1._Fld908_TYPE,
T1._Fld908_RTRef,
T1._Fld908_RRRef,
T1._Fld909RRef
FROM dbo._InfoRg907 T1
WHERE ((CASE WHEN T1._Fld908_TYPE = 0x08 AND T1._Fld908_RTRef = 0x0000008C THEN T1._Fld908_RRRef END) = P1) AND (T1._Fld909RRef = @P2)',N'P1 varbinary(16),@P2 varbinary(16)',0xB43218C04D22528811EC6C5A46022BC7,0x00000000000000000000000000000000
   SuperMario
 
35 - 04.01.22 - 12:47
(33) перепутал CAST с CASE Мои извинения, невнимателен чуть ((

В любом случае -это выражение над индексируемым полем
   Ёпрст
 
36 - 04.01.22 - 12:49
И..реальный план выполнения запрос там одинаковый
   acht
 
37 - 04.01.22 - 12:51
(35) > перепутал CAST с CASE
Воот. А то напугал =)
   SuperMario
 
38 - 04.01.22 - 12:51
(37)  Да, страдаю этим немного :-)
   SuperMario
 
39 - 04.01.22 - 12:52
(37) я же писал, что "жду критики"! Спасибо , что поправили)
   fisher
 
40 - 04.01.22 - 15:09
(12) На автоматических блокировках чтению будет мешать запись. А на управляемых на версионнике - не будет. Сабж ведь про грязное чтение. Значит ему запись мешает, раз он грязным чтением ускорить пытается.
   fisher
 
41 - 04.01.22 - 15:31
(13) 2 секунды? Очень странно, если Объект первым измерением стоит или вторым после категории или по Объект есть доп-индекс (то есть если отбор попадает в индекс с хорошей селективностью). Тогда это какая-то аномалия. Пересчет статистики сделать как вариант. Не поможет - переиндексацию. Не поможет - глянуть план выполнения, что же он такого делает. Оптимальный он или нет.
   SuperMario
 
42 - 04.01.22 - 16:08
(40) Для перевода на версионник базу нужно активно дорабатывать напильником. Я не думаю, что это будет выход при данной проблеме.
Поэтому только оптимизация. Я подозреваю, что данное решение еще и обновляется?))

(41) автор  притих ツ
   ManyakRus
 
43 - 04.01.22 - 16:14
(21) "Выразить..." - первый раз написали а второй раз нет -
"Объект" - два раза в запросе и выразить надо 2 раза.
один раз бесполезно :-)
   ИС-2
 
44 - 04.01.22 - 16:29
(42) не, я внимательно читаю.

В итоге как ускорить обращений к регистру категории объектов
   fisher
 
45 - 04.01.22 - 16:45
(44) >  я внимательно читаю
А если будешь внимательно писать, то сможешь читать больше ответов по делу.
Озвучь хотя бы структуру регистра, порядок измерений и доп-индексы если они есть.
   SuperMario
 
46 - 04.01.22 - 18:22
(45)
Там все просто, как в автомате Калашникова)
Два измерения и все

Объект (тип Документ.Ссылка, Справочник.Ссылка)
КатегорииОбъектов (тип Справочник.КатегорииОбъектов)
   SuperMario
 
47 - 04.01.22 - 18:28
ИМХО. Тема довольно большая по причинам длительного выполнения запроса.
Прежде чем хотеть "грязных чтений" нужно  ответить на вопрос: "А все ли сделано для того, что бы опуститься до такого уровня"?
Какие-то вбросы в тему не дадут истинной причины.

Поэтому все выглядит как (18)
   ИС-2
 
48 - 06.01.22 - 13:54
(41) блокировки управляемые

Где изучить как интерпритировать SQL запрос, чтобы понять правильный он или нет
   ДенисЧ
 
49 - 06.01.22 - 14:06
(48) Если запрос делает 1с - он правильный.
   fisher
 
50 - 06.01.22 - 14:14
(41) > блокировки управляемые
Если управляемые блокировки, то затыка по блокировкам быть не должно, если ты их сам не организовал.
> Где изучить как интерпритировать SQL запрос, чтобы понять правильный он или нет
Не SQL запрос. План его выполнения. Гугли "как посмотреть план выполнения запроса". Там будет отражено на какой операции сколько времени тратится. Если сам интерпретировать его не сможешь - выкладывай сюда скриншот. Или загугли "как читать план выполнения запроса". Сиквел даже умеет помогать с анализом: https://docs.microsoft.com/ru-ru/sql/relational-databases/performance/analyze-an-actual-execution-plan?view=sql-server-ver15
   ИС-2
 
51 - 06.01.22 - 14:37
спасибо, буду читать. Пока вот такой запрос

сейчас попробую его текст в 1C найти, но он не типовой

exec sp_executesql N'SELECT
T1._Fld32118
FROM dbo._InfoRg32114 T1 WITH(NOLOCK)
WHERE (T1._Fld32116RRef = P1) AND (T1._Fld32115RRef = @P2) AND (T1._Fld32117 = -@P3)',N'P1 varbinary(16),@P2 varbinary(16),@P3 numeric(10)',0x96F744A8421C39D411EC696E82026EDA,0x9C98002219A6A0CC11E4542512A11633,1
   pechkin
 
52 - 06.01.22 - 14:47
(51) ну тут собственно и так грязное чтение
   Ёпрст
 
53 - 06.01.22 - 19:24
(51) T1._Fld32117 - это че за реквизит\ресурс\измерение у тебя ? И где в твоём тексте запроса условие на него =1 ?
   pechkin
 
54 - 06.01.22 - 20:18
2 поля объект и 1 категория
   acht
 
55 - 06.01.22 - 20:29
(54) > 2 поля объект

Три различных самостоятельных поля:
_Fld32116RRef,
_Fld32115RRef
_Fld32117

И это, похоже, вообще не регистр категорий.
   Ёпрст
 
56 - 06.01.22 - 21:31
ага, и в тексте запроса он выбирает не константу = 1, а поле. И нет условия на тип реквизита, а просто условие на ссылку.Так что, одна из черепашек врёт  - это не РС категориииОбъектов


Список тем форума
 
Программист всегда исправляет последнюю ошибку.
ВНИМАНИЕ! Если вы потеряли окно ввода сообщения, нажмите Ctrl-F5 или Ctrl-R или кнопку "Обновить" в браузере.