
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
06.04.2005, 13:22
|
|||
|---|---|---|---|
|
|||
SQLExec и хранимые процедуры |
|||
|
#18+
Добрый день! Возникла следующая проблема: есть некая хранимая процедура (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 как делать по нормальному вызов таких пакетов? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.04.2005, 13:29
|
|||
|---|---|---|---|
SQLExec и хранимые процедуры |
|||
|
#18+
По нормальному надо bulk insert делать. Смотри утилиту bcp ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.04.2005, 13:47
|
|||
|---|---|---|---|
|
|||
SQLExec и хранимые процедуры |
|||
|
#18+
не все так просто: ХП формирует запрос и на удаление и на вставку, делает проверку, надо ли удалять старую запись, при вставке ХП определяет в какие таблицы писать данные... там куча всего, надо именно вызов ХП, иначе никак ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.04.2005, 15:08
|
|||
|---|---|---|---|
SQLExec и хранимые процедуры |
|||
|
#18+
Должна быть тогда своя аналогия bulk - хранимая sp_add_pack в которой есть масса идей по оптимизации цикла вызовов sp_add - отключение индексов, директива серверу, отключение журналирования и т.д. ______________________________________________ Вы имеете право хранить молчание! Всё что Вы скажете может быть использовано против Вас в суде! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
06.04.2005, 16:18
|
|||
|---|---|---|---|
|
|||
SQLExec и хранимые процедуры |
|||
|
#18+
речь не о том, как оптимизировать ХП, а о том, как из С++ вызвать NON QUERY запрос! или как хотя бы проверить что SQLHSTMT завершил свою работу? и как грамотно переназначить statement для SQLHSTMT? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.04.2005, 22:38
|
|||
|---|---|---|---|
SQLExec и хранимые процедуры |
|||
|
#18+
Prepare для процедуры не вызвай никогда. Нет никакого смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.04.2005, 22:49
|
|||
|---|---|---|---|
SQLExec и хранимые процедуры |
|||
|
#18+
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, потому что основной накладняк будет на сервере при обработке транзакций, а твоя возня на клиенте - это фигня по сравнению с этим. Так что можно с большой долей правильности просто не заботиться о оптимизации такого рода. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.04.2005, 22:51
|
|||
|---|---|---|---|
SQLExec и хранимые процедуры |
|||
|
#18+
Ste@lthне все так просто: ХП формирует запрос и на удаление и на вставку, делает проверку, надо ли удалять старую запись, при вставке ХП определяет в какие таблицы писать данные... там куча всего, надо именно вызов ХП, иначе никак Ну вот видишь, сам же все знаешь. Так по сравнению с этой всей возней даже выполнение скрипта в ISQL копейки будет стоить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.04.2005, 22:53
|
|||
|---|---|---|---|
SQLExec и хранимые процедуры |
|||
|
#18+
речь не о том, как оптимизировать ХП, а о том, как из С++ вызвать NON QUERY запрос! Ну {call }, т.е. по RPC. или как хотя бы проверить что SQLHSTMT завершил свою работу? Никак. Он закончится - и все. Процесс-то взаимодействия клиент-сервер строго синхронен. и как грамотно переназначить statement для SQLHSTMT? Чего куда назначить ? Нипонял. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
08.04.2005, 22:54
|
|||
|---|---|---|---|
SQLExec и хранимые процедуры |
|||
|
#18+
Ste@lth "exec sp_add param; exec sp_add param; exec sp_add param; ..."), Да, и чё здесь за точка с запятой скажи пожалуйста а ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.04.2005, 17:31
|
|||
|---|---|---|---|
|
|||
SQLExec и хранимые процедуры |
|||
|
#18+
спасибо за ответы! но я уже переделал на SQLDMO:) но возникла другая проблема: запрос на выборку 500000 записей длится 5 минут, хотя в SQL Analyzer выполняется за 4 секунды.... посмотрел трэйсером, запросы везде одинаковые... может кто подскажет в чем может быть дело? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=57&mobile=1&tid=2033472]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
68ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 368ms |

| 0 / 0 |
