powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / SQLExec и хранимые процедуры
11 сообщений из 11, страница 1 из 1
SQLExec и хранимые процедуры
    #33000328
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Возникла следующая проблема:
есть некая хранимая процедура (sp_add) которую мне надо вызывать несколько миллионов раз ежедневно (процесс загрузки данных), данных никаких не возвращает

для вызова использую функции SQLExecDirect или SQLPrepare+SQLExecute, результат одинаковый

теперь, что я делаю: в целях оптимизации запросы решил объединить и посылать их некими пакетами (т.е. не просто "exec sp_add param", а "exec sp_add param; exec sp_add param; exec sp_add param; ..."), НО!

делаю размер пакета до 100Кб, формирую его и отправляю, возвращается SQL_SUCCESS, но далее не понятно:
1. если я делаю SQLCancel, то он выполняется не целиком, т.е. только начало пакета и прерывается
2. если я не делаю отмены, то при повторном вызове все виснет наглухо, в том числе и MSSQLServer

как делать по нормальному вызов таких пакетов?
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33000353
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
По нормальному надо bulk insert делать. Смотри утилиту bcp
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33000429
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
не все так просто:
ХП формирует запрос и на удаление и на вставку, делает проверку, надо ли удалять старую запись, при вставке ХП определяет в какие таблицы писать данные... там куча всего, надо именно вызов ХП, иначе никак
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33000703
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Должна быть тогда своя аналогия bulk
- хранимая sp_add_pack в которой есть масса идей по оптимизации цикла вызовов sp_add - отключение индексов, директива серверу, отключение журналирования и т.д.
______________________________________________
Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде!
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33000961
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
речь не о том, как оптимизировать ХП, а о том, как из С++ вызвать NON QUERY запрос!

или как хотя бы проверить что SQLHSTMT завершил свою работу?
и как грамотно переназначить statement для SQLHSTMT?
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33006117
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Prepare для процедуры не вызвай никогда. Нет никакого смысла.
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33006127
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lth
теперь, что я делаю: в целях оптимизации запросы решил объединить и посылать их некими пакетами (т.е. не просто "exec sp_add param", а "exec sp_add param; exec sp_add param; exec sp_add param; ..."), НО!


Видимо это ODBC, тогда рекомендую оформить вызовы через RPC как то:
{call sp_add ?} - это самый быстрый способ вызова процедуры.

Ste@lth
делаю размер пакета до 100Кб, формирую его и отправляю, возвращается SQL_SUCCESS, но далее не понятно:
1. если я делаю SQLCancel, то он выполняется не целиком, т.е. только начало пакета и прерывается
2. если я не делаю отмены, то при повторном вызове все виснет наглухо, в том числе и MSSQLServer

как делать по нормальному вызов таких пакетов?


Ну ты видимо цикл выборки данных с сервера не запускал. А он должен быть всегда, даже если данных не должно приходить вообще ( на самом деле данные приходят почни всегда).

Короче, чё могу посоветровать.
*На твои "пакеты" плюнь - это плохо.
*попробуй почитать про batch binding - это типа как пишешь
insert into AAA(a,b,c)
values(?,?,?)
а потом на параметры биндишь не одну переменную , а массив по напр. 1000 значений и выполняешь - вставляется 1000 строчек. Но это может для RPC не работать, и особо в скорости не прибавит.
*посмотри в сторону BCP API как уже сказали , только я не знаю поддерживается ли оно в ODBC. Оно было в DBLib - ха, а где ж оно теперь у MS -а поддерживается -то - я и не знаю.
* в крайнем случае просто тупо в цикле вызывай подряд процедуру построчно.
На самом деле если цель - добиться большой производительности вставок, то ед. выход - BCP, потому что основной накладняк будет на сервере при обработке транзакций, а твоя возня на клиенте - это фигня по сравнению с этим. Так что можно с большой долей правильности просто не заботиться о оптимизации такого рода.
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33006130
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lthне все так просто:
ХП формирует запрос и на удаление и на вставку, делает проверку, надо ли удалять старую запись, при вставке ХП определяет в какие таблицы писать данные... там куча всего, надо именно вызов ХП, иначе никак
Ну вот видишь, сам же все знаешь. Так по сравнению с этой всей возней даже
выполнение скрипта в ISQL копейки будет стоить.
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33006137
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
речь не о том, как оптимизировать ХП, а о том, как из С++ вызвать NON QUERY запрос!

Ну {call }, т.е. по RPC.

или как хотя бы проверить что SQLHSTMT завершил свою работу?

Никак. Он закончится - и все. Процесс-то взаимодействия клиент-сервер строго синхронен.

и как грамотно переназначить statement для SQLHSTMT?
Чего куда назначить ? Нипонял.
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33006139
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ste@lth "exec sp_add param; exec sp_add param; exec sp_add param; ..."),

Да, и чё здесь за точка с запятой скажи пожалуйста а ?
...
Рейтинг: 0 / 0
SQLExec и хранимые процедуры
    #33014150
Ste@lth
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за ответы!

но я уже переделал на SQLDMO:)

но возникла другая проблема: запрос на выборку 500000 записей длится 5 минут, хотя в SQL Analyzer выполняется за 4 секунды....
посмотрел трэйсером, запросы везде одинаковые...

может кто подскажет в чем может быть дело?
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / SQLExec и хранимые процедуры
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]