Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Замена существующей логики работы БД интеграцией .NET CLR  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Приветствую всех.
Есть действующая система, на базе SQL Server 2005.
Суть такова, есть запросы, которые поступают от различных устройств с разной периодичностью.
Прога берет данные запросы с различных устройств и записывает в базу данных, и ставит в очередь, на оработку или же отменяет, в зависимости от поступаемых данных.
При этом, прога которая записывает эти данные, может наложить на таблицу запросов блокировки UPDLOCK или же XLOCK.
Другая прога, периодически проверяет, наличие запросов, которые необходимо обработать, но тоже путем наложения блокировок UPDLOCK, ROWLOCK. И если таковые есть, обрабатывает их, грубо говоря синтаксически и логически
При этом логика работы и обработки обеих программ постоянно расширяется.
Поэтому обе программы сделаны не на T-SQL. Хотя можно было бы сделать, но скорость обработки критична.
В связи с блокировками, налагаемые обеими программами, периодически возникают задержки в обработке данных. И в целом, в работе системы.
В связи с этим решил, перейти на вариант интеграции .NET CLR, при этом логика работы системы будет такова:
1. Прога, которая принимает запросы с устройств, будет записывать эти данные, посредством хранимой процедуры, которая реализована на CLR.
2. А прогу которая производит логическую обработку новых данных, на триггер на .NET CLR, которая обрабатывает новые данные, сразу при поступлении.
При этом пропадает (возможно не полностью), необходимость перидически налогать блокировку на таблицу запросов.
Из вышеизложенного, после внедрения .NET CLR уменьшиться наложение блокировок, и по идее улучшится скорость работы системы.

Жду советов и замечаний по данному вопросу от людей, которые пробовали в подобных случаях, внедрять .NET CLR.
Спасибо за внимание
16 июл 09, 07:23    [7421679]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
И вообще, отличается ли скорость работы с базой данных на .NET CLR от обычных программ с использованием ADO и ADO.NET и T-SQL?
И насколько
16 июл 09, 07:31    [7421689]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Из статьи Разработка хранимых процедур на базе CLR
автор

Когда внешняя библиотека, CLR DLL, вызывается в первый раз, SQL Server должен загрузить код в память, скомпилировать исполняемый код и затем выполнить его. После того как сервер SQL выполнит эти действия, вызов внешнего объекта потребует меньших затрат по сравнению с первоначальным вызовом, но все же окажется более «дорогим», нежели вызов внутрипроцессного кода. Результат? Вызов CLR-объекта может оказаться более медленным, чем вызов хранимой процедуры T-SQL.


Вызов CLR-объектов более медленен, чем вызов ХП на T-SQL, а насколько быстр будет работа с базой на CLR с использованием ADO.NET по сравнению с внешней программой, которая работает с базой посредством ADO?
16 июл 09, 07:38    [7421694]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Вот цитата из той статьи, на которую вы дали ссылку:
Разработка хранимых процедур на базе CLR
...ради чего создаются хранимые процедуры на CLR; они предназначены для сложных и ресурсоемких вычислений либо для тех случаев, когда решить задачу средствами традиционного T-SQL невозможно. Хранимые процедуры на CLR задумывались как замена расширенных хранимых процедур, а не как их расширение.

Если на T-SQL код работает быстрее, то зачем создавать CLR?
Из собственной практики - пользую CLR именно для сложных и ресурсоемких вычислений. Как пример, вычисление определенных хэшей по определенным же алгоритма.
16 июл 09, 08:08    [7421713]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Это понятно.
В моем случае, обработка полностью на внешней программе идет с использованием ADO.
Будет ли улучшение именно по блокировкам и скорости обработки, если перенести на .NET CLR в связке с ADO.NET?
16 июл 09, 08:11    [7421716]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Длительность блокировок зависит, в том числе, и от скорости обработки. Смотрите в какую сторону она у вас изменится.
А с блокировками можно бороться и применением нового TIL - изоляцию моментальным снимком. Тут вчера как раз топик на эту тему был...
16 июл 09, 08:30    [7421740]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Т.е. при передаче такого рода данных
Скажем триггер на UPDATE будет реализован на .NET CLR
При этом будут обрабатываться данные с определенным статусом из INSERTED
И при этом пока данные не обработаются будет висеть блокировка на данной таблице?
16 июл 09, 08:57    [7421773]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
alexeyvg
Member

Откуда: Moscow
Сообщений: 31214
orunbek
Будет ли улучшение именно по блокировкам и скорости обработки, если перенести на .NET CLR в связке с ADO.NET?
Работа с данными в сиквеле делается SQL-инструкциями. Откуда они будут вызываться - неважно: скорость их работы не изменится.

Если из ADO.NET будет вызыватся CLR, а CLR будет выполнять SQL-инструкции, то скорость от этого может только уменьшиться.
16 июл 09, 09:25    [7421845]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
Lepsik
Member

Откуда: glubinka
Сообщений: 4255
вам нужно написать windows service, который и будет считывать значения с ваших устройств и записывать в базу.
20 июл 09, 04:21    [7433919]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
vino
Member

Откуда:
Сообщений: 1191
Lepsik
вам нужно написать windows service, который и будет считывать значения с ваших устройств и записывать в базу.
Наверно, так счас и сделано
20 июл 09, 11:17    [7434698]     Ответить | Цитировать Сообщить модератору
 Re: Замена существующей логики работы БД интеграцией .NET CLR  [new]
orunbek
Member

Откуда: Гималай
Сообщений: 2101
Lepsik
вам нужно написать windows service, который и будет считывать значения с ваших устройств и записывать в базу.

windows сервис ситуацию не изменит, наверно
20 июл 09, 14:41    [7436114]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить