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

Откуда: Moscow
Сообщений: 907
Привет.
Мне необходимо загружать в таблицу довольно большой набор данных. Бывают конечно и маленькие наборы по 500. Но может привалить и 100 тысяч.

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


Пока все работает примерно так:

Таблица Place (маленькая, с ней проблем особых нет)
Id
...


Таблица Values (проблемная)
Id PlaceId
......

id кластерный индекс.
На PlaceId тоже есть неуникальный индекс (чтобы удаление происходило быстрее)



В таблицу нужно загружать данные а также иногда удалять все Values, которые принадлежат к конкретному Place.


В процедуре это делается так:

declare @tempTab table (Id int)

-- получаем все Place которые нужно удалить
insert into @tableToDel
SELECT id FROM ...

ALTER TABLE Values NOCHECK CONSTRAINT ALL

DELETE val FROM Values val
where val.PlaceId in (select id from @tempTab)

ALTER TABLE Values 	WITH CHECK CHECK CONSTRAINT ALL

... удаляем из Place 


Удаление из Place ерунда, там по 20-50 записей если максимум. А вот удаление из Values меня волнует.


Что можно сделать ?
Может быть как-то запартиционировать таблицу что ли, не знаю только как правильно - по каким полям. Что еще ?
21 апр 16, 20:11    [19090510]     Ответить | Цитировать Сообщить модератору
 Re: Нужно загружать 20 тыс записей через процедуру. Как правильно сделать ?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
а чего происходит с процессом который удаляет и с остальными процессами? Он ждет кого то или все это время удаляет?
21 апр 16, 20:38    [19090588]     Ответить | Цитировать Сообщить модератору
 Re: Нужно загружать 20 тыс записей через процедуру. Как правильно сделать ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
Мистер Хенки,

Не понял вопроса. Но видимо да, параллельные запросы к этой таблице зависают на время вставки-удаления данных.

Я не знаю как мне вообще быть. Данные загружать то надо, и они такие вот большие могут быть.. А вот как правильно спроектировать под это дело базу не знаю точно. Что мог, то вот придумал.
21 апр 16, 21:07    [19090670]     Ответить | Цитировать Сообщить модератору
 Re: Нужно загружать 20 тыс записей через процедуру. Как правильно сделать ?  [new]
iljy
Member

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

а вы вообще уже столкнулись с проблемой, или так, на воду дуете? У вас такие вставки реально происходят настолько часто, что падает производительность всей системы? 20тыс, и даже 100тыс данных - это не вот прям объем неподъемный, и если нет критической необходимости завершать вставку в течении одной секунды, то не морочьте голову ни себе, ни серверу.
21 апр 16, 21:12    [19090682]     Ответить | Цитировать Сообщить модератору
 Re: Нужно загружать 20 тыс записей через процедуру. Как правильно сделать ?  [new]
ProBiotek
Member

Откуда: Moscow
Сообщений: 907
iljy,

Проблемки уже начали проявляться. Полагаю дальше будет только хуже. Соответственно решил озаботится пораньше.

Я не админ БД, и не знаю многих тонкостей. Поэтому решил попросить совета о том, как вообще нужно проектировать подобные системы.
21 апр 16, 21:22    [19090711]     Ответить | Цитировать Сообщить модератору
 Re: Нужно загружать 20 тыс записей через процедуру. Как правильно сделать ?  [new]
Мистер Хенки
Member

Откуда: канализация
Сообщений: 6615
ProBiotek
iljy,

Проблемки уже начали проявляться. Полагаю дальше будет только хуже. Соответственно решил озаботится пораньше.

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

вы сначала помониторьте что происходит при рабочей нагрузке при обработке вашей процедурой большой пачки данных. Если выстраиваются большие очереди заблокированных запросов, то может попробовать частями производить удаление
21 апр 16, 21:29    [19090726]     Ответить | Цитировать Сообщить модератору
 Re: Нужно загружать 20 тыс записей через процедуру. Как правильно сделать ?  [new]
iljy
Member

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

дьявол всегда в деталях. Вы сначала выясните суть проблемок, а потом уже будете решение искать. Хотя бы блокировки помониторьте, как вам предложили, если в них дело, то наложение SchM проблемки только усугубит. А то повадились тут ядреными бомбами клопов морить...
21 апр 16, 21:37    [19090740]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить