Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: 1 2 [все] |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Пара вопросов: а) есть 2 таблицы и 1 процедура, работающая с ними б) таблицы я конвертнул в In-Memory Optimized Tables, процедуры остались почти нетронутыми. Этого достаточно? или надо конвертнуть процедуру в Native compiled? |
3 фев 21, 17:06 [22274143] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
Ролг Хупин, достаточно - смотря для чего. В таком варианте вы используете так называемый "interop access" к xtp-таблицам, он несколько медленней поскольку вы тратите процессорное время на компиляцию инструкций. Если у вас есть возможность переписать процедура на native compilation, то перепишите - получите максимальный выигрыш в плане быстродействия от XTP. Другое дело что не всегда можно компиляцию в собственном коде применять, потому что некоторые TSQL инструкции там не поддерживаются. |
3 фев 21, 19:11 [22274282] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
ясно, т.е. можно, желательно, но не обязательно. Я проверил свою процедуру, там до фига не поддерживаемых моментов для Native Compiled. |
||||
4 фев 21, 10:24 [22274499] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Начал переделывать процедуру в Native Compiled и нарвался на такое: там чтение из обычной таблицы Т, чем заменить? При этом таблицу менять в memory_optimized пока не получится. |
8 фев 21, 15:01 [22277426] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
ничем, вы не можете обращаться в NC-процедуре к обычным дисковым таблицам. если у вас логика подразумевает что вы будете пытаться в запросах использовать связку disk-based table join xtp-tables / etc, то здесь только интерпретируемый код. Сообщение было отредактировано: 8 фев 21, 16:39 |
||||
8 фев 21, 16:44 [22277529] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
делаю wrapper так: обычная процедура читаю данные из обычной таблицы, передаю в параметрах ->NC процедура ->работа с таблицами MEMORY_OPTIMIZED Так срабатывает. |
||||||||
8 фев 21, 17:15 [22277569] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Чем заменить вызов на первый взгляд безобидной REPLACE?SELECT @name = replace(@inname, ':' + @new + ':', ':' + @old + ':')
т.е. внутри строки где-то может быть :dobedo:, его надо заменить на :bedobe: |
||
8 фев 21, 17:19 [22277575] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
Ролг Хупин, Те функции которые недоступны из NC, придется выносить за пределы до вызова хранимки. Можно конечно эмулировать работу replace с помощью цикла и итерации по substring но имхо это изврат. |
8 фев 21, 18:01 [22277640] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
вот, да, крутил-мутил, но придется выносить во враппер |
||||
8 фев 21, 18:22 [22277666] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Еще вот вопрос. Какое значение ставить в BUCKET_COUNT? Что именно это означает? |
10 фев 21, 11:39 [22278704] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8313 |
Ролг Хупин, https://www.sql.ru/forum/1197519/pomogite-opredelit-bucket-count
|
||
10 фев 21, 12:59 [22278756] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
спасибо! но, видимо, там д.б. "ideally be close to [Х – 2X] " исходя из примера? |
||||||
10 фев 21, 13:13 [22278772] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
Ролг Хупин, вы учтите что хеш-индекс достаточно специфичная штука, так ли он вам нужен?
Сообщение было отредактировано: 10 фев 21, 13:53 |
|
10 фев 21, 13:56 [22278812] Ответить | Цитировать Сообщить модератору |
msLex Member Откуда: Сообщений: 8700 |
от 1-го до 2-х X |
||||
10 фев 21, 13:58 [22278822] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Вы правы в целом, но: хэш-индекс - один из двух доступных для memory optimized tables, так что у меня вариантов нет. Да, практически существующую, но тоже - существующую структуру, я хочу перевести несколько таблиц и процедур, которые "просятся". А остальные, которые будут в работе большими - и хотел бы, но не вижу вариантов. Например, есть таблица с несложной структурой, которую можно было бы перевести в мемори оптимизнутые, но там два этажа подчинений: Т1(мастер)->10 T1N (details)->5 T11M (details) Так что пока ограничиваюсь малым: парой таблиц и парой процедур. |
|||||
10 фев 21, 15:00 [22278888] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Еще такой вопрос: расцепил таблицы TMaster->TDetails Сделал TDetails MemoryOptimized, а TMaster осталась дисковой . При попытке вернуть Foreign Key пишет ошибку
Вопрос: как сцепить? |
||
15 фев 21, 14:49 [22281150] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
Ответ: никак. Или делайте обе таблицы xtp, или обе таблицы дисковые |
||||||
15 фев 21, 15:04 [22281160] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
ясно, но, если я конвертирую часть таблиц, то когда-то надо решать. Может руками, типа триггер прикрутить? если он сработает, конечно. Т.е. получается, что все эти делете каскаде и т.д. тоже накрываются? как с ними быть в случае дисковой и инмемори таблицы? |
||||||||
15 фев 21, 15:21 [22281177] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
Ролг Хупин, у вас накрываются любые технологии которые заведомо не поддерживаются 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] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
понял, но я же не одинок в этом безумном мире, как-то же люди моделируют свяь в таких случаях? или оставляют свободно болтаться после конвертации да и х.с.н.? |
||||
15 фев 21, 16:23 [22281218] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Дальше, есть у меня в триггере, который я делаю NC такая фигня UPDATE dbo.names SET [hname] = CHECKSUM(idname) where [id] =@Id Но CHECKSUM не поддерживается. Куда бежать? Чем заменить? |
15 фев 21, 18:46 [22281313] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8313 |
Ролг Хупин, нельзя и невинность соблюсти и капитал приобрести. Для In-memory технологии ниша довольно узкая и специфическая. Насколько я понял, область применения - это почти или полностью автоматизированные системы накопления и обработки, не ориентированные на человека. То, что Вы пытаетесь прикрутить - это куски Human-affected workflow. Сначала надо понять - как эта технология послужит Вашим целям кроме " должно быть быстрее, обещали же". |
15 фев 21, 23:10 [22281401] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Вы правы, но "должно быть быстрее" - и это тоже одна из объявленных целей. Я хочу практически проделать то, о чем было заявлено майкрософтом. Они, кстати, не ограничивали применение In-memory. В частности, если юзер хочет перевести часть таблиц-процедур-триггеров на In-memory - это допустимо и нормально. Ограничений нет, но есть ограничения на саму технологию, с чем я и борюсь в своих экспериментах ![]() |
||||
16 фев 21, 10:34 [22281449] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Кстати, вот нашел
Так что - все ок, идем дальше ![]() |
||||||
16 фев 21, 15:55 [22281689] Ответить | Цитировать Сообщить модератору |
Владислав Колосов Member Откуда: Сообщений: 8313 |
Ролг Хупин, да, надо сказать что их рекламная кампания ставит в заблуждение, на плакате все улыбаются и все довольны. Я тоже когда-то повёлся на эту рекламу. :) Но потом быстро выяснилось, что технология пригодна лишь для хардкор-реляционных систем. |
16 фев 21, 15:57 [22281690] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Это из книжки специалиста, ранее из сПб, но я тоже повелся на 2014 два раза ![]() |
||||
16 фев 21, 16:18 [22281697] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
Ролг Хупин, Без переписи логики никуда не дется если у вас будут присутствовать явные транзакции и изначально БД спроектирована под пессеместическую модель параллелизма. начнете огребать ошибки 41302 да и вообще все нюансы самой модели даже при стандартном autocommit доступе должны быть учтены. |
16 фев 21, 17:07 [22281731] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
это да, без вопросов, переписывать надо. Вот, взял 3-4 таблицы, переделал, затем их триггеры, там какие-то прошли, какие-то под вопросом. Сейчас пытаюсь разобраться как быть с RI между Disk-based table->Memory-Optimized Table. Обычный Foreign Key не работает, может через обычный триггер прикрутить.... |
||||
16 фев 21, 17:33 [22281756] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Как объявить функцию, возвращающую @out table, чтобы она возвращала memory optimized type dbo.TypeOUT?DROP FUNCTION [dbo].[test01] GO CREATE FUNCTION [dbo].[test01] (@id int) RETURNS @out table (pid int,pname nvarchar(128)) AS BEGIN insert into @out(pid, pname) values(101, N'dobedo') return; END CREATE TYPE dbo.TypeOUT AS TABLE ( id int null, name nvarchar(128) null, RID INT NOT NULL IDENTITY, INDEX ix_RID HASH (RID) WITH (BUCKET_COUNT=1024) ) WITH (MEMORY_OPTIMIZED = ON); GO select * from dbo.test01(1) |
18 фев 21, 17:04 [22282982] Ответить | Цитировать Сообщить модератору |
felix_ff Member Откуда: Moscow Сообщений: 1688 |
declare @t [dbo].[TypeOUT]; insert into @t select * from [dbo].[test01](10); select * from @t; если вы хотите что бы у вас функция сразу возвращала тип [dbo].[TypeOUT] - то хрен. такое не возможно. |
||||
18 фев 21, 19:37 [22283070] Ответить | Цитировать Сообщить модератору |
Ролг Хупин Member Откуда: Чебаркуль Сообщений: 3970 |
Вот-вот, хрен - это тоже ответ ![]() Я хотел заменить функцию инсертящую в @ таблицу и возвращающую её на функцию, которая бы инсертила в MO таблицу и возвращала её, т.е. добиться улучшения производительности. |
||||||||
19 фев 21, 12:03 [22283363] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: 1 2 [все] |
Все форумы / Microsoft SQL Server | ![]() |