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

Откуда: Чебаркуль
Сообщений: 3971
Пара вопросов:
а) есть 2 таблицы и 1 процедура, работающая с ними
б) таблицы я конвертнул в In-Memory Optimized Tables, процедуры остались почти нетронутыми.

Этого достаточно? или надо конвертнуть процедуру в Native compiled?
3 фев 21, 17:06    [22274143]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1696
Ролг Хупин,

достаточно - смотря для чего.

В таком варианте вы используете так называемый "interop access" к xtp-таблицам, он несколько медленней поскольку вы тратите процессорное время на компиляцию инструкций.

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

Другое дело что не всегда можно компиляцию в собственном коде применять, потому что некоторые TSQL инструкции там не поддерживаются.
3 фев 21, 19:11    [22274282]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
felix_ff
Ролг Хупин,

достаточно - смотря для чего.

В таком варианте вы используете так называемый "interop access" к xtp-таблицам, он несколько медленней поскольку вы тратите процессорное время на компиляцию инструкций.

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

Другое дело что не всегда можно компиляцию в собственном коде применять, потому что некоторые TSQL инструкции там не поддерживаются.


ясно, т.е. можно, желательно, но не обязательно.

Я проверил свою процедуру, там до фига не поддерживаемых моментов для Native Compiled.
4 фев 21, 10:24    [22274499]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Начал переделывать процедуру в Native Compiled и нарвался на такое:

там чтение из обычной таблицы Т, чем заменить?
При этом таблицу менять в memory_optimized пока не получится.
8 фев 21, 15:01    [22277426]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1696
Ролг Хупин
Начал переделывать процедуру в Native Compiled и нарвался на такое:

там чтение из обычной таблицы Т, чем заменить?
При этом таблицу менять в memory_optimized пока не получится.


ничем, вы не можете обращаться в NC-процедуре к обычным дисковым таблицам.

если у вас логика подразумевает что вы будете пытаться в запросах использовать связку disk-based table join xtp-tables / etc, то здесь только интерпретируемый код.

Сообщение было отредактировано: 8 фев 21, 16:39
8 фев 21, 16:44    [22277529]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
felix_ff
Ролг Хупин
Начал переделывать процедуру в Native Compiled и нарвался на такое:

там чтение из обычной таблицы Т, чем заменить?
При этом таблицу менять в memory_optimized пока не получится.


ничем, вы не можете обращаться в NC-процедуре к обычным дисковым таблицам.

если у вас логика подразумевает что вы будете пытаться в запросах использовать связку disk-based table join xtp-tables / etc, то здесь только интерпретируемый код.


делаю wrapper так:

обычная процедура
читаю данные из обычной таблицы, передаю в параметрах
->NC процедура
->работа с таблицами MEMORY_OPTIMIZED

Так срабатывает.
8 фев 21, 17:15    [22277569]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Чем заменить вызов на первый взгляд безобидной REPLACE?

SELECT @name = replace(@inname, ':' + @new + ':', ':' + @old + ':')


автор
Msg 10794, Level 16, State 93, Procedure usp_2, Line 101 [Batch Start Line 108]
The function 'replace' is not supported with natively compiled modules.


т.е. внутри строки где-то может быть :dobedo:, его надо заменить на :bedobe:
8 фев 21, 17:19    [22277575]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1696
Ролг Хупин,

Те функции которые недоступны из NC, придется выносить за пределы до вызова хранимки.

Можно конечно эмулировать работу replace с помощью цикла и итерации по substring но имхо это изврат.
8 фев 21, 18:01    [22277640]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
felix_ff
Ролг Хупин,

Те функции которые недоступны из NC, придется выносить за пределы до вызова хранимки.

Можно конечно эмулировать работу replace с помощью цикла и итерации по substring но имхо это изврат.


вот, да, крутил-мутил, но придется выносить во враппер
8 фев 21, 18:22    [22277666]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Еще вот вопрос.
Какое значение ставить в BUCKET_COUNT? Что именно это означает?
10 фев 21, 11:39    [22278704]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
Ролг Хупин,

https://www.sql.ru/forum/1197519/pomogite-opredelit-bucket-count

The bucket count should ideally be close to 1 – 2X the number of unique key values that are expected in the table.
For example, if you have an index on part_no and expect 10,000 unique part numbers, you specify a
BUCKET_COUNT of 10,000 – 20,000.
10 фев 21, 12:59    [22278756]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Владислав Колосов
Ролг Хупин,

https://www.sql.ru/forum/1197519/pomogite-opredelit-bucket-count

The bucket count should ideally be close to 1 – 2X the number of unique key values that are expected in the table.
For example, if you have an index on part_no and expect 10,000 unique part numbers, you specify a
BUCKET_COUNT of 10,000 – 20,000.


спасибо! но, видимо, там д.б. "ideally be close to [Х – 2X] " исходя из примера?
10 фев 21, 13:13    [22278772]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1696
Ролг Хупин,

вы учтите что хеш-индекс достаточно специфичная штука, так ли он вам нужен?

+

на сколько я понял вы вообще пытаетесь перевести уже какую то существующую базу на рельсы XTP.
чисто имхо это не совсем верный подход.
сама технология имеет кучу ограничений и условностей, обычно под данную технологию сразу проектируют БД с учетом всех ее особенностей с нуля, а не переводят готовые решения которые изначально затачивались под песеммистический параллелизм и все его плюшки


Сообщение было отредактировано: 10 фев 21, 13:53
10 фев 21, 13:56    [22278812]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
msLex
Member

Откуда:
Сообщений: 8716
Ролг Хупин

спасибо! но, видимо, там д.б. "ideally be close to [Х – 2X] " исходя из примера?


от 1-го до 2-х X
10 фев 21, 13:58    [22278822]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
felix_ff
Ролг Хупин,

вы учтите что хеш-индекс достаточно специфичная штука, так ли он вам нужен?

+

на сколько я понял вы вообще пытаетесь перевести уже какую то существующую базу на рельсы XTP.
чисто имхо это не совсем верный подход.
сама технология имеет кучу ограничений и условностей, обычно под данную технологию сразу проектируют БД с учетом всех ее особенностей с нуля, а не переводят готовые решения которые изначально затачивались под песеммистический параллелизм и все его плюшки


Вы правы в целом, но:
хэш-индекс - один из двух доступных для memory optimized tables, так что у меня вариантов нет.
Да, практически существующую, но тоже - существующую структуру, я хочу перевести несколько таблиц и процедур, которые "просятся". А остальные, которые будут в работе большими - и хотел бы, но не вижу вариантов.
Например, есть таблица с несложной структурой, которую можно было бы перевести в мемори оптимизнутые, но там два этажа подчинений:
Т1(мастер)->10 T1N (details)->5 T11M (details)

Так что пока ограничиваюсь малым: парой таблиц и парой процедур.
10 фев 21, 15:00    [22278888]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Еще такой вопрос:
расцепил таблицы TMaster->TDetails
Сделал TDetails MemoryOptimized, а TMaster осталась дисковой .
При попытке вернуть Foreign Key пишет ошибку

автор
Msg 10778, Level 16, State 0, Line 41
Foreign key relationships between memory optimized tables and non-memory optimized tables are not supported.
Msg 1750, Level 16, State 1, Line 41
Could not create constraint or index. See previous errors.


Вопрос: как сцепить?
15 фев 21, 14:49    [22281150]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1696
Ролг Хупин
Еще такой вопрос:
расцепил таблицы TMaster->TDetails
Сделал TDetails MemoryOptimized, а TMaster осталась дисковой .
При попытке вернуть Foreign Key пишет ошибку

автор
Msg 10778, Level 16, State 0, Line 41
Foreign key relationships between memory optimized tables and non-memory optimized tables are not supported.
Msg 1750, Level 16, State 1, Line 41
Could not create constraint or index. See previous errors.


Вопрос: как сцепить?


Ответ: никак.

Или делайте обе таблицы xtp, или обе таблицы дисковые
15 фев 21, 15:04    [22281160]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
felix_ff
Ролг Хупин
Еще такой вопрос:
расцепил таблицы TMaster->TDetails
Сделал TDetails MemoryOptimized, а TMaster осталась дисковой .
При попытке вернуть Foreign Key пишет ошибку

пропущено...


Вопрос: как сцепить?


Ответ: никак.

Или делайте обе таблицы xtp, или обе таблицы дисковые


ясно, но, если я конвертирую часть таблиц, то когда-то надо решать.
Может руками, типа триггер прикрутить? если он сработает, конечно.
Т.е. получается, что все эти делете каскаде и т.д. тоже накрываются? как с ними быть в случае дисковой и инмемори таблицы?
15 фев 21, 15:21    [22281177]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
felix_ff
Member

Откуда: Moscow
Сообщений: 1696
Ролг Хупин,

у вас накрываются любые технологии которые заведомо не поддерживаются in-memory таблицами

список вот:
https://docs.microsoft.com/ru-ru/sql/relational-databases/in-memory-oltp/transact-sql-constructs-not-supported-by-in-memory-oltp?view=sql-server-ver15

+ограничения NC процедур

+фишки оптимистической модели управления параллелизмом.
15 фев 21, 16:01    [22281206]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
felix_ff
Ролг Хупин,

у вас накрываются любые технологии которые заведомо не поддерживаются in-memory таблицами

список вот:
https://docs.microsoft.com/ru-ru/sql/relational-databases/in-memory-oltp/transact-sql-constructs-not-supported-by-in-memory-oltp?view=sql-server-ver15

+ограничения NC процедур

+фишки оптимистической модели управления параллелизмом.


понял, но я же не одинок в этом безумном мире, как-то же люди моделируют свяь в таких случаях?
или оставляют свободно болтаться после конвертации да и х.с.н.?
15 фев 21, 16:23    [22281218]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Дальше, есть у меня в триггере, который я делаю NC такая фигня

UPDATE dbo.names SET [hname] = CHECKSUM(idname) where [id] =@Id

Но CHECKSUM не поддерживается.
Куда бежать? Чем заменить?
15 фев 21, 18:46    [22281313]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
Ролг Хупин,

нельзя и невинность соблюсти и капитал приобрести. Для In-memory технологии ниша довольно узкая и специфическая. Насколько я понял, область применения - это почти или полностью автоматизированные системы накопления и обработки, не ориентированные на человека. То, что Вы пытаетесь прикрутить - это куски Human-affected workflow.
Сначала надо понять - как эта технология послужит Вашим целям кроме " должно быть быстрее, обещали же".
15 фев 21, 23:10    [22281401]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Владислав Колосов
Ролг Хупин,

нельзя и невинность соблюсти и капитал приобрести. Для In-memory технологии ниша довольно узкая и специфическая. Насколько я понял, область применения - это почти или полностью автоматизированные системы накопления и обработки, не ориентированные на человека. То, что Вы пытаетесь прикрутить - это куски Human-affected workflow.
Сначала надо понять - как эта технология послужит Вашим целям кроме " должно быть быстрее, обещали же".


Вы правы, но "должно быть быстрее" - и это тоже одна из объявленных целей.
Я хочу практически проделать то, о чем было заявлено майкрософтом.
Они, кстати, не ограничивали применение In-memory. В частности, если юзер хочет перевести часть таблиц-процедур-триггеров на In-memory - это допустимо и нормально. Ограничений нет, но есть ограничения на саму технологию, с чем я и борюсь в своих экспериментах
16 фев 21, 10:34    [22281449]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3971
Владислав Колосов
Ролг Хупин,

нельзя и невинность соблюсти и капитал приобрести. Для In-memory технологии ниша довольно узкая и специфическая. Насколько я понял, область применения - это почти или полностью автоматизированные системы накопления и обработки, не ориентированные на человека. То, что Вы пытаетесь прикрутить - это куски Human-affected workflow.
Сначала надо понять - как эта технология послужит Вашим целям кроме " должно быть быстрее, обещали же".


Кстати, вот нашел

автор
The In-Memory OLTP Engine is fully integrated in the SQL Server Database Engine.
You do not need to perform complex system refactoring, splitting data between
in-memory and conventional database servers or moving all of the data from the
database into memory. You can separate in-memory and disk data on a table-by-table
basis, which allows you to move active operational data into memory, keeping other
tables and historical data on disk. In some cases, that migration can even be done
transparently to client applications.


Так что - все ок, идем дальше
16 фев 21, 15:55    [22281689]     Ответить | Цитировать Сообщить модератору
 Re: In-Memory Optimized Tables  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 8322
Ролг Хупин,

да, надо сказать что их рекламная кампания ставит в заблуждение, на плакате все улыбаются и все довольны. Я тоже когда-то повёлся на эту рекламу. :)
Но потом быстро выяснилось, что технология пригодна лишь для хардкор-реляционных систем.
16 фев 21, 15:57    [22281690]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить