powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / параметризация запросов insert
21 сообщений из 71, страница 3 из 3
параметризация запросов insert
    #38427890
artii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Gloryartiiпросто говорю, что в моем случае подсказывать SQL Server какие типы у констант должны быть в плане запросе,
Ну так и подсказывайте правильно

insert into A (a, b) values (1, 1.0000010000E3)
insert into A (a, b) values (1, 9.90000019999E4)

Вот, это мне и нужно было, а не городить огороды в sp_executesql и прочей пертушкой.
Спасибо
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38427895
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artiiгородить огороды в sp_executesql и прочей пертушкой

так все равно придется же, скорее всего :) хотя.. если скорости будет достаточно без этого то и хватит, да
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38427915
artii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Crimeanartiiподсказывать SQL Server какие типы у констант должны быть в плане запросе, на клиентской стороне довольно с трудоемкая задача, которая еще может не выстрелить по быстродействию

дважды неверно. во-первых восприятие констант самим SQL Server описано. а то, что вы не хотите этим пользоваться на server-side просто добавляет вам проблем, внезапно:
...


Все проще я даже не рассматривал вариант (что там говорить не знал), который описал Glory
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38427931
artii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Crimeanтак все равно придется же, скорее всего :) хотя.. если скорости будет достаточно без этого то и хватит, да

Всему свое время хочется с простыми текстовыми запросами разобраться.
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38427976
kalimba
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
artii,

А что это даст? Я так понимаю если делать OPTION(RECOMPILE), то темплейт тогда делать бессмыслено, не? Сейчас буду пробовать.
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38428008
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artiiна клиентской стороне довольно с трудоемкая задача, которая еще может не выстрелить по быстродействию.Это точно выстрелит, и это правильно. Трудоёмкость нивелируется правильным программированием, это в принципе делается один раз, потом используется.

А уж использование правильных методов для массовой загрузки даст совсем большое ускорение. Если речь о тысячах строк в секунду, то уже стоит задуматься, тогда и милионы строк в секунду будет совсем незаметно.

artiiGloryНу так и подсказывайте правильно

insert into A (a, b) values (1, 1.0000010000E3)
insert into A (a, b) values (1, 9.90000019999E4)
Вот, это мне и нужно было, а не городить огороды в sp_executesql и прочей пертушкой.Ну да, если у вас в поле тип данных float, то и передавать константы нужно такого же типа. Я почему то думал, что у вас в таблице тип DECIMAL.
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38428055
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artii,

Эксперимент №1
Код: 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.
set ansi_padding, ansi_nulls on;
go

use master;
create database TestParameterization;
alter database TestParameterization set parameterization forced;
go

use TestParameterization;
go

create table dbo.DummyTable (a int not null primary key, b int not null, c float not null);
go

insert into dbo.DummyTable (a, b, c) values (1, 2, 3.0);
go

insert into dbo.DummyTable (a, b, c) values (4, 5, 56.003);
go

insert into dbo.DummyTable (a, b, c) values (7, 8, 9000.0001);
go

select
 cp.*, t.text
from
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_sql_text(cp.plan_handle) t
where
 t.text not like '%sys.dm_exec_cached_plans%' and
 t.text like '%DummyTable%';
go
  
use master;
alter database TestParameterization set single_user with rollback immediate;
drop database TestParameterization;
go

Эксперимент №2
Код: 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.
set ansi_padding, ansi_nulls on;
go

use master;
create database TestParameterization;
alter database TestParameterization set parameterization forced;
go

use TestParameterization;
go

create table dbo.DummyTable (a int not null primary key, b int not null, c float not null);
go

insert into dbo.DummyTable (a, b, c) values (1, 2, '3.0');
go

insert into dbo.DummyTable (a, b, c) values (4, 5, '56.003');
go

insert into dbo.DummyTable (a, b, c) values (7, 8, '9000.0001');
go

select
 cp.*, t.text
from
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_sql_text(cp.plan_handle) t
where
 t.text not like '%sys.dm_exec_cached_plans%' and
 t.text like '%DummyTable%';
go
  
use master;
alter database TestParameterization set single_user with rollback immediate;
drop database TestParameterization;
go

...
Рейтинг: 0 / 0
параметризация запросов insert
    #38428067
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и
Эксперимент №3
Код: 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.
set ansi_padding, ansi_nulls on;
go

use master;
create database TestParameterization;
alter database TestParameterization set parameterization forced;
go

use TestParameterization;
go

create table dbo.DummyTable (a int not null primary key, b int not null, c float not null);
go

insert into dbo.DummyTable (a, b, c) values (1, 2, 3e0);
go

insert into dbo.DummyTable (a, b, c) values (4, 5, 56.003e0);
go

insert into dbo.DummyTable (a, b, c) values (7, 8, 9000.0001e0);
go

select
 cp.*, t.text
from
 sys.dm_exec_cached_plans cp cross apply
 sys.dm_exec_sql_text(cp.plan_handle) t
where
 t.text not like '%sys.dm_exec_cached_plans%' and
 t.text like '%DummyTable%';
go
  
use master;
alter database TestParameterization set single_user with rollback immediate;
drop database TestParameterization;
go

...
Рейтинг: 0 / 0
параметризация запросов insert
    #38438210
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
некропостю, но "закрыть тему":
1.чтобы "отгайдить" запрос с константами - надо или гайдов 2 делать или базу в FORCED переводить. ессно, если запрос на сервер идет непараметризованный. если уже параметризованный - проще, но есть еще и п.2.
2.собственно values параметризации не поддается, только WHERE. как следствие переписывание как INSERT SELECT тоже ничего не дает ибо параметризуется опять же только WHERE
итого - в гайды играть для вставки нет возможности
p.s.
ну и с типами данных надо или четко указывать или рисовать море гайдов под разные типы, что не особо выход
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38438483
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crimeanсобственно values параметризации не поддаетсяБерем скрипт из 14972559 , убираем, за ненадобностью, set parameterization forced, выполняем и получаем:

Код: plaintext
1.
2.
3.
4.
Microsoft SQL Server 2008 R2 (SP2) - 10.50.4276.0 (X64) 
	Feb  8 2013 10:37:00 
	Copyright (c) Microsoft Corporation
	Developer Edition (64-bit) on Windows NT 6.1 <X64> (Build 7601: Service Pack 1)
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38438577
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invm,

это у вас PQ считаются - вопросов нет! но будут-то еще и AQ! а с ними проблема как была так и останется
сам профайлером смотрел. для первого получаем AQ miss + PQ miss, для остальных получаем AQ miss но PQ hit
ну и я больше про натягивание гайдов на "такие" вставки - не натянуть, надо параметризовать с клиента ну или уже хранимку
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38438674
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crimean,

Что-то я не пойму: В скрипте же непараметризованные Ad-hoc inserts?
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38438917
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот про что. даже если взять "тот" пример и форсировать параметризацию, то собственно батч будет каждый раз разбираться, хотя сам план для insert уже будет параметризован. верх картинки - видно что все 3 батча дают CacheMiss для AQ, хотя, конечно, для PQ дальше мы имеем 1 CacheInsert и дальше CacheHit
а вот если перейти на RPC с параметризацией то первый раз получим CacheInsert и дальше будут только CacheHit. вторая часть картинки
или я совсем в сторону уже сбежал?
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38438983
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
artii,

Попробуйте включить 'optimize for adhoc workloads'. Параметризацию конечно не исправит, но возможно поможет решить проблему с процедурным кэшем.
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38439001
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Crimeanя вот про что. даже если взять "тот" пример и форсировать параметризацию, то собственно батч будет каждый раз разбираться, хотя сам план для insert уже будет параметризован.Ага, теперь понятно о чем была речь. Ну да, для insert'ов shell-планов нету в кеше...Crimeanили я совсем в сторону уже сбежал?Да нет. Понятно, что RPC выгоднее, но ТС его не захотел...
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38439152
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Забавный баг оптимизатора (параметризатора). Типы данных таблы известны заранее.
Из тех, что мне нравятся - не дают сделать через *опу.

Crimean, invm - я немногое не понял, с параметризованные запросами всё нормально (а то я AQ и PQ не могу расшифровать)
И это, RPC и параметризация это не одно и тоже? (опять же детали для тех кто в терминологии плавает)
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38439493
Crimean
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mnior,


AQ и PQ - термины профайлера, собственно, для этого типа событий
а "лирику" написал, подумал и удалил
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38439808
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Mnior,

Все нормально с параметризацией. Просто для Adhoc select в кеше есть план-обертка, а для Adhoc insert нету. Соответственно и видим в трассе CacheMiss для insert AQ.
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38440217
Mnior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmВсе нормально с параметризацией.Ок.
Если будет эта тема (план-обертка, а для Adhoc insert) в баг-трекере, я проголосую против.
Иба нефег.
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38440486
artii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
invm,
Ну, скажем так, я изначально отказался от sp_executesql, по той причине, что не понимал как завернуть несколько insert или update
в один батч, сейчас мне уже понятно, что я был тогда не прав.
Сейчас я уже переписал сервер, чтобы он заворачивал запросы insert или update в параметрическую форму через sp_executesql.
Тестирую на скорость и отсутствие adhoc планов, посмотрим, что получится.
...
Рейтинг: 0 / 0
параметризация запросов insert
    #38440489
artii
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Mind,
Я знаю про эту настройку, но при моих объемах это всего лишь несколько отсрочит тормоза на некоторое время.
Поэтому это не решение
...
Рейтинг: 0 / 0
21 сообщений из 71, страница 3 из 3
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / параметризация запросов insert
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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