У меня есть верный ответ на этот вопрос - ЕСЛИ вы поделитесь с нами вашими тренировками !!!Я сгущаюсь с каждой минутой, и мне самим нужны ответы ...
ОК, я все равно отвечу.
Если вы обновляете одну таблицу на одном сервере базы данных через 40 минут«однопоточное» и за 10 минут с 4 потоками узкое место не является сервером базы данных;в противном случае это может быть связано с вводом / выводом.Если вы выполняете кучу ОБНОВЛЕНИЙ, по одному вызову на запись, то обходной путь в сети убивает вас.
Я почти уверен, что это так, а не то, что это узкое место ввода-выводаБД или вероятность того, что имя_процедуры (paramns);занимает много времени.(Если бы это была процедура, занимающая 2-10 секунд, это заняло бы около 2500 минут, чтобы сделать 30K записей).Я уверен, что причина в том, что запуск 4 одновременно обработанных сокращает время на 1/4.Поэтому особенно это не проблема ввода-вывода на сервере БД.
Это может быть единственным оправданием для помещения бизнес-логики в SP на сервере.Оптимизация, к сожалению, означает нарушение правил.Следствием является сложное техническое обслуживание.но!
Однако, лучшее решение - настроить этот параметр на использование запросов «массового обновления».Это может означать, что вы должны предпринять несколько странных и не интуитивно понятных шагов, таких как:
- Это потребует значительных модификаций, если несколько пользователей могут запускать его одновременно.
- рефакторинг системы так,имя_процедуры (paramns) может получить все данные, необходимые для обработки всех записей, с помощью оператора select.Возможно, потребуется использовать творческие объединения.Если это, конечно, SP, теперь вы переносите логику на клиент.
- Используйте, чтобы программа создала XML или другой импортируемый формат плоского файла с PK записи для обновления и новым значением поляили значения.Запишите все обновления в этот файл вместо выполнения их в БД.
- имеет временную таблицу в базе данных, которая соответствует макету этого плоского файла
- , запустите импорт в базу данных - очиститьвременную таблицу и импортируйте файл
- обновите объединение временной таблицы и обновляемой таблицы, например, UPDATE mytbl, mytemp WHERE myPK = mytempPK SET myval = mytempnewval (используйте правильный синтаксис объединенияконечно).
- Вы можете сначала попробовать некоторые из этих вещей "вручную", прежде чем потрудиться кодировать, чтобы увидеть, стоит ли увеличение скорости.
- Если возможно, вы можете поставить этовсе в SP!
Я не даю никаких гарантий, особенно когда смотрю свысока на свой постоянно откармливающийся живот, но это может привести к тому, что ваша работа по обновлению сократится до минуты.