Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Теоретический вопрос, коллеги.
Как MS SQL работает с текстами в коде TSQL?
копирует указатель, или по значению, или еще как?
14 мар 17, 13:27    [20293218]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Mike_za,

какими ещё текстами в коде TSQL? вы про переменные?
14 мар 17, 13:30    [20293239]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
с текстовыми переменными (n)varchar(max)
14 мар 17, 13:34    [20293271]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
Mike_za
копирует указатель, или по значению, или еще как?
А какая собственно разница ?
14 мар 17, 13:39    [20293307]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
LSV, есть разница.
клеится куча переменных с динамическими запросами. в кетче надо знать, какой из запросов упал. для этого либо надо копировать сам запрос (если это бесплатно), либо задавать константу с "названием - кодом" запроса, а потом анализировать.
14 мар 17, 13:43    [20293329]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
офтоп:
у кого-нибудь есть картинка со стадиями компиляции запроса? вообщем-то и ответом будет :)
14 мар 17, 13:44    [20293334]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8805
автор
клеится куча переменных с динамическими запросами

cool story
14 мар 17, 13:51    [20293374]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Владислав Колосов
автор
клеится куча переменных с динамическими запросами

cool story


вопрос то был про теорию))
14 мар 17, 13:57    [20293403]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
LSV
Member [заблокирован]

Откуда: Киев
Сообщений: 30817
1. сделать двумя способами.
2. сравнить скорость
3. написать сюда результат
4. (профит)

а теория тут никак не поможет. Только практика.
Даже если "теоретически так быстрее", то не факт, что в реальной ситуации будет быстрее.
14 мар 17, 14:02    [20293437]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
declare 
	@x xml,
	@s	nvarchar(max),
	@n  nvarchar(max),
	@i	int = 0

set @x = 
(
	select 
		t.OpenSql + char(13) + char(10)
	from 
		cache.WorkingDocument_Storage_Table t
		cross apply (select top 60 a = 1 from sys.objects ) s
	for xml path('')
)

set @s = cast(@x as varchar(max))
	
select [MB] =  len(@s) / 1024 / 1024

while @i < 1--000--0000
begin 
	
	set @i =@i +  1
	set @n = @s
end


собрал строку в 98 мб.

К сообщению приложен файл. Размер - 46Kb
14 мар 17, 16:43    [20294418]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
мой убогий пример намекает, что MS SQL копирует строки явно не по указателю
14 мар 17, 16:44    [20294427]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда:
Сообщений: 37254
Mike_za
мой убогий пример намекает, что MS SQL копирует строки явно не по указателю
И как же вы определяете, сколько времени уходит именно на копирование строк?
14 мар 17, 16:51    [20294459]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Mike_za
мой убогий пример намекает, что MS SQL копирует строки явно не по указателю

даже не представляю откуда такой вывод из убогого примера... потому что +1 делает?
14 мар 17, 16:52    [20294465]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Если оставить только увеличение счетчика, то цикл проскакивает "очень быстро". Если же в теле есть копирование переменной, то цикл длится и длится.
Если бы строки копировались по указателю, то цикл с копированием выполнялся бы примерно "очень быстро" *2.
Я не прав?
15 мар 17, 10:44    [20296647]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Mike_za
Если оставить только увеличение счетчика, то цикл проскакивает "очень быстро". Если же в теле есть копирование переменной, то цикл длится и длится.
Если бы строки копировались по указателю, то цикл с копированием выполнялся бы примерно "очень быстро" *2.
Я не прав?

конечно, если бросить лом в унитаз поезда то это будет означать что мир не совершенен...
15 мар 17, 10:46    [20296660]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
TaPaK
Mike_za
мой убогий пример намекает, что MS SQL копирует строки явно не по указателю

даже не представляю откуда такой вывод из убогого примера... потому что +1 делает?


Убогий пример запусался несколько раз, с разным значением итераций, что указаны в табличке
15 мар 17, 10:48    [20296669]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
TaPaK
Mike_za
Если оставить только увеличение счетчика, то цикл проскакивает "очень быстро". Если же в теле есть копирование переменной, то цикл длится и длится.
Если бы строки копировались по указателю, то цикл с копированием выполнялся бы примерно "очень быстро" *2.
Я не прав?

конечно, если бросить лом в унитаз поезда то это будет означать что мир не совершенен...

Аналогия не ясна
15 мар 17, 10:48    [20296671]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Mike_za
TaPaK
пропущено...

даже не представляю откуда такой вывод из убогого примера... потому что +1 делает?


Убогий пример запусался несколько раз, с разным значением итераций, что указаны в табличке

я тоже на работу прихожу в разное время, хотя хожу каждый день
15 мар 17, 10:49    [20296675]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
TaPaK
Mike_za
пропущено...


Убогий пример запусался несколько раз, с разным значением итераций, что указаны в табличке

я тоже на работу прихожу в разное время, хотя хожу каждый день


Из примера следует, что на моем сервере уходит 0.2 сек на копирование переменной содержащей 100мб строку.
Что следует из вашего прихода на работу? Свободное начало дня?
15 мар 17, 10:52    [20296692]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Mike_za
Member

Откуда: Москва
Сообщений: 1176
Ценного в данном топике от вас было упоминание стадий компиляции. Можете раскрыть, в контексте вопроса топика?
15 мар 17, 10:55    [20296713]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6802
Mike_za
Ценного в данном топике от вас было упоминание стадий компиляции. Можете раскрыть, в контексте вопроса топика?

https://msdn.microsoft.com/en-us/library/mt744587.aspx?f=255&MSPPError=-2147217396

автор
Each time product information is needed, fills the bound variable with the key value and executes the statement.

я изучал в другой статье, но её найти по прежнему не могу
15 мар 17, 11:39    [20296987]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Mike_za
Если бы строки копировались по указателю, то цикл с копированием выполнялся бы примерно "очень быстро" *2.
Я не прав?

Mike_za
Как MS SQL работает с текстами в коде TSQL?
копирует указатель, или по значению, или еще как?

А можно узнать, что вы под этим подразумеваете, "копирует указатель, или по значению"?

Можете пояснить, в терминах действий, выполняемых процессором?

По моему, это в данном случае бессмысленный набор слов (для подразумеваемых операций), независимо от используемого языка, хоть на ассемблере пишите.
16 мар 17, 01:42    [20300123]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31949
Mike_za
MS SQL копирует строки явно не по указателю
Интересный вывод.
Вообще в современных компьютерах нет другого способа скопировать строку, кроме как используя указатели.
Кладут в одну ячейку памяти адрес источника, в другую адрес приёмника.
Потом, в цикле, перемещают байт из ячейки по первому адресу, в ячейку по второму адресу.
Потом прибавляют к первому адресу 1, прибавляют ко второму адресу 1
Потом опять.
Как то так, упрощённо.
Без указателей никак.
16 мар 17, 01:48    [20300129]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7582
Mike_za,

char *strcpy(char *dest, const char *src)
16 мар 17, 02:00    [20300133]     Ответить | Цитировать Сообщить модератору
 Re: как ms sql копирует строки?  [new]
Siemargl
Member

Откуда: 010100
Сообщений: 6530
alexeyvg
Mike_za
MS SQL копирует строки явно не по указателю
Интересный вывод.
Вообще в современных компьютерах нет другого способа скопировать строку, кроме как используя указатели.
Кладут в одну ячейку памяти адрес источника, в другую адрес приёмника.
Потом, в цикле, перемещают байт из ячейки по первому адресу, в ячейку по второму адресу.
Потом прибавляют к первому адресу 1, прибавляют ко второму адресу 1
Потом опять.
Как то так, упрощённо.
Без указателей никак.
Не всегда так. Прошу ознакомиться с понятием иммутабельных строк.

Но пример конечно супер =)
16 мар 17, 02:36    [20300146]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить