AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 06.04.2011, 02:35   #1  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Hyper Посмотреть сообщение
Спасибо, но у клиента как раз SQL 2000. Надо мне было сразу уточнить. Смотрю пункт 1:
Угу. Надо было уточнить.

Все равно, уточните еще:
= вы делаете свои "модификации огромного количества записей" при работающих пользователях?
если вы делаете монопольно, то вам также не нужно разбивать на куски.
если далаете при работающих, то надо разбивать.

все-таки, скажите пожалуйста:
= что установлено в Recovery Model в свойствах вашей базы?
= каков размер Transaction Log в вашей базе?
= каковы настройки прироста Transaction Log в вашей базе?
= сколько свободного места на диске, где находится Transaction Log? (вопрос связан с тем, что на NTFS дисках сильно возрастает время увеличения файла, если осталось мало места)

и все-таки - не занимайтесь ерундой.
проведите ваше обновление при неработающих пользователях (в пакетнике, ночью).
Честное слово, 700тыс записей - не такое уж и большое число записей. Даже для SQL2000.


Цитата:
Сообщение от Hyper Посмотреть сообщение
Вот и занимаюсь. SQL 2000 каким-то образом влияет на следующие рекомендации, или они остаются в силе?
никак. также сразу поставьте нормальный размер и нормальный прирост.
в SQL2000 был прирост по-умолчанию в 10%.

Поэтому если ваш Transaction Log изначально мал, то он рос маленькими кусочками (на что тратится очень много времени). Кроме того, сильно увеличивается фрагментация диска.

сделайте прирост фиксированными и относительно большими кусками 200-300Мб.


Цитата:
Сообщение от Hyper Посмотреть сообщение
А вот следующее было для меня откровением, я был уверен, что разница принципиальная, а не "только логическая":

Конечно принципиальная. С точки зрения СУБД.
Но с точки зрения Аксапты - особой разницы нет.
С точки зрения Аксапты - в случае чего, откат (rollback) затронет все что было внутри транзакции.
__________________
полезное на axForum, github, vk, coub.
Старый 06.04.2011, 02:44   #2  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Все равно, уточните еще:
= вы делаете свои "модификации огромного количества записей" при работающих пользователях?
если вы делаете монопольно, то вам также не нужно разбивать на куски.
если далаете при работающих, то надо разбивать.
Других пользователей во время обновления транзакций в системе быть не должно.


Цитата:
Сообщение от mazzy Посмотреть сообщение
все-таки, скажите пожалуйста:
= что установлено в Recovery Model в свойствах вашей базы?
= каков размер Transaction Log в вашей базе?
= каковы настройки прироста Transaction Log в вашей базе?
= сколько свободного места на диске, где находится Transaction Log? (вопрос связан с тем, что на NTFS дисках сильно возрастает время увеличения файла, если осталось мало места)
Скорее всего у меня нет прав доступа к клиентскому SQL серверу, так что быстро уточнить может не получиться. Завтра проверю. В любом случае все рекомендации донесу.


Цитата:
Сообщение от mazzy Посмотреть сообщение
(пишу "с огромной вероятностью", поскольку от людей, которые используют UserConnection для разбивки на блоки, можно ожидать чего угодно).

Последний раз редактировалось Hyper; 06.04.2011 в 02:46.
Старый 06.04.2011, 02:46   #3  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Hyper Посмотреть сообщение
Других пользователей во время обновления транзакций в системе быть не должно.
Почему это?
Впрочем, как скажете.

Если других пользователей нет, то и в SQL2000 разбивать на блоки нет никакого смысла.
__________________
полезное на axForum, github, vk, coub.
Старый 06.04.2011, 02:47   #4  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Почему это?
В смысле - не ожидается, не будет.
Старый 06.04.2011, 02:20   #5  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
сформировать текст SQL запроса вида "UPDATE MyTable SET Field1=Value" и исполнить его в одной транзакции в отдельном подключении (new UserConnection()).
С UserConnection (table1.setUserConnection()) я сегодня тоже провозился. Не буду даже начинать. Расстроила меня сегодня третья Аксапта.

Правда, прямое использование SQL я не пробовал. Почему-то считал, что с точки зрения SQL сервера это будет тоже самое, что и doupdate из Аксапты - вид сбоку. Это не так?

Цитата:
Сообщение от sukhanchik Посмотреть сообщение
в этой конструкции у Вас не будет Where
Не понял, почему не будет? В каждой записи поля заполняются разными значениями, каким же образом я буду определять какую запись я сейчас буду модифицировать?

Последний раз редактировалось Hyper; 06.04.2011 в 03:04. Причина: исправил на doupdate
Старый 06.04.2011, 02:39   #6  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Hyper Посмотреть сообщение
С UserConnection (table1.setUserConnection()) я сегодня тоже провозился. Не буду даже начинать. Расстроила меня сегодня третья Аксапта.
Какой то полной фигней вы занимаетесь, честное слово.
Вы ж насилуете Аксапточку почем зря. Она сама отдаст и все сделает.
помните только одно: 700тыс - не самый большой объем. работали же.

ищите причину тормозов.
с огромной вероятностью, они где-то на стороне SQL.

(пишу "с огромной вероятностью", поскольку от людей, которые используют UserConnection для разбивки на блоки, можно ожидать чего угодно).
__________________
полезное на axForum, github, vk, coub.
Старый 06.04.2011, 02:40   #7  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Кстати, насчет "ждать чего угодно".
Скажите, метод update на вашей обновляемой таблице переопределен?
Если переопределен, то он ничего не запоминает во внутренние структуры в пределах одной транзакции?

Цитата:
Сообщение от Hyper Посмотреть сообщение
Правда, прямое использование SQL я не пробовал. Почему-то считал, что с точки зрения SQL сервера это будет тоже самое, что и update из Аксапты - вид сбоку. Это не так?
Если у таблицы переопределен метод update, то update из Аксапты работает по-другому (не эквивалентен update из SQL-сервера)

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

Но главное - посмотрите в метод update.
__________________
полезное на axForum, github, vk, coub.
Старый 06.04.2011, 02:49   #8  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от mazzy Посмотреть сообщение
Скажите, метод update на вашей обновляемой таблице переопределен?
Для данной задачи используется только doupdate.
Старый 06.04.2011, 02:52   #9  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Hyper Посмотреть сообщение
Для данной задачи используется только doupdate.
ой... как скажете, конечно. забота о целостности полностью на ваших плечах

но в рамках данной темы это значит, что побочных эффектов не должно - doupdate аксапты эквивалентен update одной (!) записи с SQL-сервера.
__________________
полезное на axForum, github, vk, coub.
Старый 06.04.2011, 12:42   #10  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Recovery Model: Full
Space allocated for Transaction Log: 80 MB
Transaction Log File Growth: 500 MB
Свободного места на диске, где находится Transaction Log: 204 GB

О настройках логов уже не беспокоюсь.

Обновление будет выполняться по одной записи и целостность данных не волнует.
mazzy: "с точки зрения СУБД накладных расходов на обслуживание 700 000 мелких транзакций значительно больше, чем на обслуживание одной большой. (в этом режиме все транзакции хранятся в transaction log). в этом случае 700 000 мелких транзакций - как самоубийство тупым столовым ножом."
Alexius: "лучше обновлять каждую запись в своей транзакции вне зависимости от модели восстановления сервера. Если все выполнять в одной транзакции, то накладные расходы сервера СУБД на блокировки (или версионность) множества записей с лихвой перекроют расходы на обслуживание кучи транзакций."

Хоть бери да бросай монетку.
Старый 06.04.2011, 12:46   #11  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
Цитата:
Сообщение от Hyper Посмотреть сообщение
Хоть бери да бросай монетку.
Лучше попробовать оба варианта на тестовой копии базы и рассказать результаты общественности
Старый 06.04.2011, 12:52   #12  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Цитата:
Сообщение от Alexius Посмотреть сообщение
Лучше попробовать оба варианта на тестовой копии базы и рассказать результаты общественности
Когда получую копию базы клиента, обязательно попробую. А в той базе, в которой сейчас работаю, слишком мало записей.
Старый 06.04.2011, 13:13   #13  
Poleax is offline
Poleax
Модератор
Аватар для Poleax
MCP
MCBMSS
Злыдни
 
1,353 / 595 (22) +++++++
Регистрация: 17.02.2005
Адрес: msk
Записей в блоге: 34
?
Цитата:
Сообщение от Hyper Посмотреть сообщение
Когда получую копию базы клиента, обязательно попробую. А в той базе, в которой сейчас работаю, слишком мало записей.
программа для генерации тестовых данных для таблиц баз данных SQL Server ?
__________________

This posting is provided "AS IS" with no warranties, and confers no rights.
Старый 06.04.2011, 14:12   #14  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Спасибо за ссылку. Хотя задачи подобного рода возникают не так регулярно, чтобы изучение еще одного программного пакета себя оправдало. Но на будущее буду иметь в виду.
Старый 06.04.2011, 13:13   #15  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от Hyper Посмотреть сообщение
Recovery Model: Full
Space allocated for Transaction Log: 80 MB
Transaction Log File Growth: 500 MB
Свободного места на диске, где находится Transaction Log: 204 GB

О настройках логов уже не беспокоюсь.
да. спасибо.
__________________
полезное на axForum, github, vk, coub.
Старый 06.04.2011, 15:06   #16  
Hyper is offline
Hyper
Участник
Соотечественники
 
163 / 29 (1) +++
Регистрация: 09.10.2003
Всем спасибо за советы. На чем я остановился:

Обновление таблиц с уникальными индексами по одному полю буду проводить кусками по пять-десять тысяч записей в одной транзакции. Во-первых, код уже написан и хуже от него точно не будет, а во-вторых, исходя из обсуждения, что лучше делать при Full Recovery Model - одну транзакцию на запись или одну транзакцию на таблицу, - вопрос спорный.

Остальные таблицы (их всего несколько) я решил пока обновлять по одной транзакции на таблицу. Тесты на мизерной базе данных пока показывают, что при использовании кучи мелких транзакций процесс выполняется медленнее, чем при меньшем количестве более крупных транзакций. Конечно, это не тест, а ерунда, т.к. при большой БД все может быть по другому, настройки данной БД не идентичны настройкам БД клиента и т.д., но пока что пусть будет так. Будет возможность - проверю в нормальных условиях.
За это сообщение автора поблагодарили: mazzy (2).
Теги
axapta

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
вывод количества записей в таблице на web форме и указание текущей страницы таблицы bambuk1960 DAX: Программирование 1 06.07.2006 13:27
Axapta SP4 EE FP1 и Axapta SP4 EE polygris DAX: Администрирование 9 27.01.2006 11:27
Axapta 3.0 SP4 - нет русского языка Grimly DAX: Администрирование 3 06.12.2005 12:53
Установка Axapta 3.0 SP4 Easten Europe Alexander A. DAX: Администрирование 0 23.08.2005 15:24
Введение в Аксапту Роман Кошелев DAX: Прочие вопросы 0 18.12.2001 14:00

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 23:47.