Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Вопрос скорее всего риторический но хотелось бы подтверждения.
Производится hash join, сервер сразу выделяет память по размеру полей? Насколько помню - да. Выделяет максимально быстро по максимуму а не занимается проверкой на максимальную длину.
Если например есть поле штрихкод с макимальной длиной 100 а заполнено только 12 а остальное пробелы. Он и будет выделять сразу под 100 а не проверять сколько заполнено и потом выделять под 12.(ну или вести статистику и т.п.)
Я прав?
22 авг 18, 14:36    [21650798]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Вдогонку напомните, как получить объем памяти(например в tempdb) которое скушал запрос?
22 авг 18, 14:43    [21650809]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
aleksrov
Member

Откуда:
Сообщений: 948
МуМу,

если это varchar то ожидаемый размер для него будет 100/2
22 авг 18, 14:49    [21650816]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4727
МуМу,

Вопрос выглядит странно, потому что сначала надо задать другой вопрос: а кто так проектировал БД, что нужно соединять таблицы по 100 байтовому ключу? Если бы ключи были подобраны правильно, то этим вопросом вообще не пришлось бы задаваться и не творить оптимизационные "танцы с бубном".
22 авг 18, 14:51    [21650817]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
a_voronin
Member

Откуда: Москва
Сообщений: 4727
aleksrov,

Если это будет NVARCHAR, то 100 * 2
22 авг 18, 14:51    [21650820]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Почему деленный на 2-а? Если будет заполнен 51-н символ, будет динамически выделятся память? Есть ссылки, не могу сходу найти?
22 авг 18, 14:52    [21650822]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
a_voronin,

Ну вообщем то именно такая рекомендация и будет выдана. Тут вопрос просто в эффекте и лично интересно, может сервер и умеет понимать такие дыры в оптимизации и лечить их на ходу(что вряд ли потому как приведет к издержкам производительности)
22 авг 18, 14:55    [21650830]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
aleksrov
Member

Откуда:
Сообщений: 948
a_voronin
aleksrov,

Если это будет NVARCHAR, то 100 * 2


Ну вы же меня понял, я это имел ввиду http://aboutsqlserver.com/2010/08/18/what-is-the-optimal-size-for-variable-width-columns/
22 авг 18, 15:02    [21650842]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
aleksrov
Member

Откуда:
Сообщений: 948
Ну и в догонку https://blogs.msdn.microsoft.com/sqlqueryprocessing/2010/02/16/understanding-sql-server-memory-grant/ , просто статья хорошая
22 авг 18, 15:03    [21650844]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
invm
Member

Откуда: Москва
Сообщений: 9347
МуМу
Я прав?
Читайте знающих авторов - https://blogs.msdn.microsoft.com/craigfr/2006/08/10/hash-join/

a_voronin
Вопрос выглядит странно, потому что сначала надо задать другой вопрос: а кто так проектировал БД, что нужно соединять таблицы по 100 байтовому ключу?
Сначала нужно понимать какие столбцы окажутся в Build-Table, а потом вопросы задавать.
22 авг 18, 15:24    [21650880]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
удивлён данными математиками

автор
если это varchar то ожидаемый размер для него будет 100/2


автор
Если это будет NVARCHAR, то 100 * 2


вы точно вопрос видели?
22 авг 18, 15:25    [21650881]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
МуМу,
автор
Если например есть поле штрихкод с макимальной длиной 100 а заполнено только 12 а остальное пробелы. Он и будет выделять сразу под 100 а не проверять сколько заполнено и потом выделять под 12.(ну или вести статистику и т.п.)

не будет смотреть на то что заполен 1 символ или 100, это вообще не лёгкая операция. По остальному ссылка invm
22 авг 18, 15:29    [21650884]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
МуМу
Member

Откуда:
Сообщений: 1134
invm,
Сам писал давненько алгоритмы подобные Hash match, поэтому внутренние алгоритмы понимаю. Требуемое поле гарантированно попадает Build-Table(или как там ее), всякие реквизиты и т.п. из рекордсета не попадают, их не учитываю. Эту статью давно читал(сходу гуглом не нашел), спасибо!
Остался вопрос каким параметром явно увидеть используемую память запросом?
22 авг 18, 16:07    [21650954]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
TaPaK
Member

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

dm_exec_query_memory_grants ну и с какой-то версии в плане видно память
22 авг 18, 16:11    [21650964]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
Mind
Member

Откуда: Лучший город на Земле
Сообщений: 2322
МуМу,

А вы вообще про какую именно память? Granted, Reserved или Used ?
23 авг 18, 01:03    [21651437]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
Grant выделяется по максимальной оценке. Из-за этого пара мега-отчетов может сожрать всю память. Надо resource governor настраивать во избежание.
23 авг 18, 11:59    [21651812]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
Grant выделяется по максимальной оценке. Из-за этого пара мега-отчетов может сожрать всю память. Надо resource governor настраивать во избежание.
\
мы пихаем всё что когда-то слышали...
23 авг 18, 12:21    [21651856]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7757
TaPaK,

пожирает и еще как, Вы с этим просто не сталкивались. Used может быть меньше Granted в 5-7 раз запросто.
23 авг 18, 13:56    [21652046]     Ответить | Цитировать Сообщить модератору
 Re: При объединении по hash join выделяется объем памяти максимальный по размеру полей?  [new]
TaPaK
Member

Откуда: Kiev
Сообщений: 6801
Владислав Колосов
TaPaK,

пожирает и еще как, Вы с этим просто не сталкивались. Used может быть меньше Granted в 5-7 раз запросто.

и как это касается темы? у кого что болит?
23 авг 18, 13:57    [21652049]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить