powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
24 сообщений из 49, страница 2 из 2
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39633895
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, "D_Reg DESC, N_Reg DESC"
Да, да я это тоже сегодня заметил. Это из темного прошлого наверное. Уберем конечно же :)
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39633901
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrКак можно оптимизировать кусок кода, если МЫ не понимаем что он делает ???
Объясняй смысл кода !!!
Начало этой хп такое
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
	DECLARE @K_Ost float,
			@K_Res float,
			@Delta float
        
	Select @K_Ost=Sum(Kol_vo) from Ostn where C_Obj=@C_Obj and C_Tov=@C_Tov --остатки, их раньше в этой же транзакции уже исправила накладная

	Select @K_Res=Sum(Kol_vo) from Reserved where C_Obj=@C_Obj and C_Tov=@C_Tov

	if @K_Ost is null set @K_Ost=0
	if @K_Res is null set @K_Res=0
	if Abs(@K_Res-@K_Ost)<=0.0005 --AI_DELTA
	return
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39633980
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Саму процедуру прислал во вложении. Да наверное лучше было бы на форум MSSQL отправить тему. Но и по Delphi скорее всего есть вопросы. Хранимая процедура вызывается компонентом SDAC
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
object spDEF: TMSStoredProc
  Connection = Conn1
end
object Conn1: TMSConnection
  Database = 'mydb'
  Authentication = auWindows
  Options.ApplicationName = 'ляля'
  Options.DefaultLockTimeout = 5000
  Options.Provider = prNativeClient
  Server = '****'
  AfterConnect = Conn1AfterConnect
  LoginPrompt = False
end

и объекты параметры у нее не определены. Один компонент для всех процедур. И как показывает профайлер каждый раз выполняется запрос
Код: sql
1.
exec [mydb].[sys].sp_procedure_params_100_rowset N'aip_ZakRes_UpdateByObjTov',1,NULL,NULL

. Читаются и создаются объекты -параметры хранимой процедуры. А а они всегда одни и теже по названию и типу. Наверное если брать типа такого
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
object spUpdateDoc: TMSStoredProc
  StoredProcName = 'aip_UpdateDoc'
  Connection = Conn1
  SQL.Strings = (
    
      '{:RETURN_VALUE = CALL aip_UpdateDoc (:DocType, :DocID, ' +
      ' :DocDT, :ResMsg)}')
  ParamData = <
    item
      DataType = ftInteger
      Name = 'RETURN_VALUE'
      ParamType = ptResult
    end
    item
      DataType = ftInteger
      Name = 'DocID'
      ParamType = ptInput
    end
    item
      DataType = ftDateTime
      Name = 'DocDT'
      ParamType = ptInput
    end
    item
      DataType = ftString
      Name = 'ResMsg'
      ParamType = ptInputOutput
      Size = 255
    end>
  CommandStoredProcName = 'aip_UpdateDoc'
end

, то будет лучше ?
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39633989
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясни словами, что делает код???
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39633998
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

если бы он сам знал
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634000
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда это не лечится.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634001
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, Корректирует резервы в соответствии с остатками, чаще всего после того как остатки изменила накладная. Накладная изменяет остатки в той же транзакции но до вызова этой хп. Резервы корректируются так чтобы обеспечивать правило Остатки = Резервы + "То что требуется заказам на расход, но нет в наличии (у нас называют условно "неудовлетворенный спрос") "
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634003
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И каждая 1 или несколько записей резервов связаны с одним заказом
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634027
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Резерв - это фактически отгруженная накладная, её нельзя корректировать. Если что-то зарезервировано, то считай что этого на складе уже нет.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634067
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr, У нас резерв это часть остатка. Накладная списывает остаток сразу. Хорошо ли это или плохо, правильно или нет обсуждать особого смысла сейчас нет. Оно так было, есть и будет, со мной или без меня. А по улучшениям быстродействия есть ли какие-нибудь мысли куда копать? И со стороны MSSQL или Delphi.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634082
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bilovДед-Папыхтет, Таблица резервов (меньшая из двух) у меня такая

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
/****** Object:  Table [dbo].[Reserved]    Script Date: 19.04.2018 22:06:21 ******/
SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE TABLE [dbo].[Reserved](
	[RecID] [int] IDENTITY(1,1) NOT NULL,
	[C_Obj] [smallint] NULL,
	[C_Tov] [int] NULL,
	[D_Reg] [datetime] NULL,
	[N_Reg] [smallint] NULL,
	[Kol_vo] [float] NULL,
 CONSTRAINT [PK_Reserved] PRIMARY KEY CLUSTERED 
(
	[RecID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[Reserved]  WITH CHECK ADD  CONSTRAINT [CK_Reserved] CHECK  (([Kol_vo]>=(0)))
GO

ALTER TABLE [dbo].[Reserved] CHECK CONSTRAINT [CK_Reserved]
GO

/****** Object:  Index [Ind_C_Tov_C_Obj]    Script Date: 19.04.2018 22:13:53 ******/
CREATE NONCLUSTERED INDEX [Ind_C_Tov_C_Obj] ON [dbo].[Reserveds]
(
	[C_Tov] ASC,
	[C_Obj] ASC
)
INCLUDE ( 	[D_Reg],
	[N_Reg],
	[Kol_vo],
	[RecID]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO

/****** Object:  Index [Ind_D_Reg_N_Reg]    Script Date: 19.04.2018 22:15:50 ******/
CREATE NONCLUSTERED INDEX [Ind_D_Reg_N_Reg] ON [dbo].[Reserved]
(
	[D_Reg] ASC,
	[N_Reg] ASC
)
INCLUDE ( 	[RecID],
	[C_Obj],
	[C_Tov],
	[Kol_vo]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO



Проблемы в ней видно сразу. По логике ни одно из полей не должно быть NULL никогда, а они имеют такую возможность. Наверное это тоже вредит чуть чуть. Надо будет на работе вопрос поднять.

Можно было бы и текст процедуры выложить, но он здоровый довольно, только логику вопроса затуманит. А курсор с которым сражаюсь я выкладывал, можно найти по "set @Delta =@K_Res-@K_Ost"
Подскажи еще по индексу CREATE NONCLUSTERED INDEX [Ind_C_Tov_C_Obj] ON [dbo].[Reserveds]. Это индекс на другую таблицу Reserveds, в то время как ты объявляешь в скрипте таблицу без буквы s в конце? Или это просто опечатка твоя? Пока полагаю все таки таблица Reserved - опечатка
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634086
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-Папыхтет, Да опечатка, пардон. Таблицы Reserved - резервы, OstN - остатки. У нас переименовывали зачем-то давно, Reserveds - это синоним. Уберу потом
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634087
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ещё раз извиняюсь. Будем считать " Таблицы Reserved - резервы, OstN - остатки" в реальности чуть-чуть по-другому называются и каждый раз реплайсю (параноя небольшая :) . С синонимом я сейчас соврал откровенно, ведь индекс нельзя создать для синонима.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634102
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bilov,

Еще, что за таблицы SchN_, SchD_, SchLink - очевидно какие то счета и связь с ними? Опишите их назначение и структуру.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634114
Дед-Папыхтет
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bilov,

И что такое @T_N входной параметр? Какие значения он может принимать и что они означают?
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634312
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дед-Папыхтет, SchN_, SchD_ - соответственно заголовки и содержимое заказов (таблицы с громаднейшим числом сток), SchLink - ерунда - не смотрите. "@T_N входной параметр" пока вообще мертвый и потом для SchLink будет нужен
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634334
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
таблицы_заказов
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
CREATE TABLE [dbo].[SchN_]
(
[D_Reg] [DATETIME] NOT NULL 
  , [T_D] [SMALLINT] NULL 
  , [T_N] [SMALLINT] NULL 
  , [T_R] [SMALLINT] NULL 
  , [From_] [INT] NULL 
  , [To_] [INT] NULL 
  , [ATTR] [SMALLINT] NULL 
  , [ZC_OBJ] [SMALLINT] NULL 
   CONSTRAINT [PK_SchN_] PRIMARY KEY CLUSTERED ([D_Reg])
);

/****** Object:  Index [ix_SchN_TR_TD_DReg]    Script Date: 22.04.2018 12:53:23 ******/
CREATE NONCLUSTERED INDEX [ix_SchN_TR_TD_DReg] ON [dbo].[SchN_]
(
	[T_R] ASC,
	[T_D] ASC,
	[D_Reg] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]

CREATE TABLE [dbo].[SchD_]
(
[D_Reg] [DATETIME] NOT NULL 
  , [N_Reg] [SMALLINT] NOT NULL 
  , [C_Tov] [INT] NULL 
  , [Kol_vo] [FLOAT] NULL 
  , [SK] [SMALLINT] NULL 
  , [C2] [FLOAT] NULL 
, CONSTRAINT [PK_SchD_] PRIMARY KEY CLUSTERED ([D_Reg], [N_Reg])
);

/****** Object:  Index [idx_SchD_C_Tov_D_Reg]    Script Date: 22.04.2018 13:06:43 ******/
CREATE NONCLUSTERED INDEX [idx_SchD_C_Tov_D_Reg] ON [dbo].[SchD_]
(
	[C_Tov] ASC,
	[D_Reg] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO



...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634377
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никакой таблицы остатков быть не может. Остатки вещь виртуальная, вчера были одни остатки, сегодня другие завтра третьи. В вашей концепции нельзя узнать количество остатков в определённый промежуток времени, нельзя ввести новую накладную "задним числом", потому что неизвестно сколько остатка было на то число. Архитектура неверная.
Повторяю, Остаток на Дату = Ближайшая Инвентаризация + Приход - Расход - Резерв
И не нужно ничего пересчитывать
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634383
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Судя по исчерпывающе-информативным именам полей в таблицах (типа T_D), а также учитывая, что структура БД
скорее всего неверная (о чем я уже писал), пытатся что-либо там "оптимизировать" равнозначно копанию в
отходах жизнедеятельности (извините за резкость).
Бросьте, как я уже выше советовал. Работает кое-как, пусть себе работает, пока не рухнуло...
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634418
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понятно. А можете посоветовать тогда какой-нибудь материал (книги, ресурсы) именно по планированию, архитектуре серьёзной учетно-складской системы. В данном вопросе это конечно же бесполезно, но в общем на будущее анализировать все это хоть сколько-нибудь общепринятой научной точки зрения было бы хорошо.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634426
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bilov,
сильно сомневаюсь что в интернете удасться найти что-то подобное.
Никто такое не публикует.
Все, что могу предложить - схема изменения состояния предмета
http://polaris.ho.ua/help/sisp.htm
Может, натолкнет на правильные мысли.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634507
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
d7i, Спасибо надеюсь что-нибудь почерпнем. Жаль где и как эта вещь работает не узнать. Под названием "Поларис" масса систем и компаний разных от ракет до мультиварок
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39634559
d7i
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bilov,
напишите свои вопросы на update.polaris@ukr.net, я вам всё разъясню.
...
Рейтинг: 0 / 0
Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
    #39635713
bilov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А запуск хранимой процедуры через специальный компонент SDAC (н/р
Код: pascal
1.
spDEF: TMSStoredProc

) это в большинстве случаев лучше для производительности чем запуск её в компоненте (TMSQuery) в скрипте вида "exec spMySmallProc @Param1=... " ? Какие-то планы выполнения запросов настраиваются, запоминаются?
...
Рейтинг: 0 / 0
24 сообщений из 49, страница 2 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Тонкости оптимизации для небольшой но очень часто используемой хранимой процедуры MSSQL
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]