29.12.2010, 15:37 | #1 |
Участник
|
Производительность
Добрый день всем!
Столкнулись с проблемой производительности при массовом обновлении полей у объектов через веб-сервис CRM. Пример: консольное приложение. Исходный код: Код: static CrmSdk.CrmService crmService = new CrmSdk.CrmService(); static void Main(string[] args) { string Server = "servername"; string orgName = "orgname"; CrmAuthenticationToken token = new CrmAuthenticationToken(); token.OrganizationName = orgName; CrmSdk.CrmService crmService = new CrmSdk.CrmService(); crmService.Url = "http://" + Server + "/mscrmservices/2007/crmservice.asmx"; crmService.Credentials = new System.Net.NetworkCredential("", "", ""); crmService.CrmAuthenticationTokenValue = token; crmService.PreAuthenticate = true; task task = new task(); task.subject = "SpeedTest"; Guid TaskID = crmService.Create(task); task = (task)crmService.Retrieve(EntityName.task.ToString(), TaskID, new AllColumns()); for (int i = 0; i < 1000; i++) { task.subject = "SpeedTest " + i.ToString(); crmService.Update(task); Console.WriteLine("Update Task " + task.subject); } } При запуске приложения, после инициализации веб-сервиса, появляется загрузка процессора на сервере приложением w3wp.exe - ~15% и приложением lsass.exe - ~45% (!). При запуске второй копии приложения одновременно с первой, загрузка процессора возрастает до 100% и работать в CRM становится невозможно. Сервер - виртуальная машина Windows Server 2008 SP2, на ней контроллер домена, SQL Server 2008 и все роли CRM сервера. Возникли вопросы: 1) Что-то не так с кодом? (это тестовое приложение, но принцип работы с веб-сервисом такой везде) 2) Узкое место в аппаратной части? (два логических процессора 2,66 ГГц, 2 Гб памяти) 3) Или это нормальное поведение при такой нагрузке? То есть теоретически пользователи могут нагрузить сервер до такой степени стандартным функционалом CRM. Вопрос в количестве пользователей. 4) Вопрос с lsass.exe? Не понятно в чем причина загрузки сервера этим процессом. 5) Есть определенная задача, если нужно - объясню суть задачи. Попробуем подумать над другими способами решения. Сейчас думаем над тригерами и прямыми инсертами в базу SQL Но это крайний вариант. |
|
29.12.2010, 15:50 | #2 |
Чайный пьяница
|
Цитата:
Сообщение от Melaen
Добрый день всем!
Столкнулись с проблемой производительности при массовом обновлении полей у объектов через веб-сервис CRM. Пример: консольное приложение. Исходный код: Код: static CrmSdk.CrmService crmService = new CrmSdk.CrmService(); static void Main(string[] args) { string Server = "servername"; string orgName = "orgname"; CrmAuthenticationToken token = new CrmAuthenticationToken(); token.OrganizationName = orgName; CrmSdk.CrmService crmService = new CrmSdk.CrmService(); crmService.Url = "http://" + Server + "/mscrmservices/2007/crmservice.asmx"; crmService.Credentials = new System.Net.NetworkCredential("", "", ""); crmService.CrmAuthenticationTokenValue = token; crmService.PreAuthenticate = true; task task = new task(); task.subject = "SpeedTest"; Guid TaskID = crmService.Create(task); task = (task)crmService.Retrieve(EntityName.task.ToString(), TaskID, new AllColumns()); for (int i = 0; i < 1000; i++) { task.subject = "SpeedTest " + i.ToString(); crmService.Update(task); Console.WriteLine("Update Task " + task.subject); } } При запуске приложения, после инициализации веб-сервиса, появляется загрузка процессора на сервере приложением w3wp.exe - ~15% и приложением lsass.exe - ~45% (!). При запуске второй копии приложения одновременно с первой, загрузка процессора возрастает до 100% и работать в CRM становится невозможно. Сервер - виртуальная машина Windows Server 2008 SP2, на ней контроллер домена, SQL Server 2008 и все роли CRM сервера. Возникли вопросы: 1) Что-то не так с кодом? (это тестовое приложение, но принцип работы с веб-сервисом такой везде) 2) Узкое место в аппаратной части? (два логических процессора 2,66 ГГц, 2 Гб памяти) 3) Или это нормальное поведение при такой нагрузке? То есть теоретически пользователи могут нагрузить сервер до такой степени стандартным функционалом CRM. Вопрос в количестве пользователей. 4) Вопрос с lsass.exe? Не понятно в чем причина загрузки сервера этим процессом. 5) Есть определенная задача, если нужно - объясню суть задачи. Попробуем подумать над другими способами решения. Сейчас думаем над тригерами и прямыми инсертами в базу SQL Но это крайний вариант. Поскольку аппаратка - виртуалка, то попробуйте добавить процессоров/ОЗУ. По поводу прямых инсертов и триггеров - можете попробовать, но это нерекомендуемая кастомизация.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
29.12.2010, 19:25 | #3 |
Участник
|
У меня была похожая проблема
Код стал бежать намного быстрее. Попробуйте.
__________________
Читайте SDK!!! |
|
29.12.2010, 20:04 | #4 |
Moderator
|
Виртуальная машина одна или у нее много соседей? После виртуализации моего сервера и выделении идентичных ресурсов что были у физического, машина стала работать в полтора раза медленнее, чем на физической платформе. Узким местом может быть жесткий диск. В идеале каждая виртуалка должна иметь свой личный диск или массив. Дело в том что при ее работе возникает большое количество дисковых операции, так что две или три машины могут существенно снижать производительность друг друга.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
30.12.2010, 11:18 | #5 |
Участник
|
Цитата:
Сообщение от Артем Enot Грунин
Виртуальная машина одна или у нее много соседей? После виртуализации моего сервера и выделении идентичных ресурсов что были у физического, машина стала работать в полтора раза медленнее, чем на физической платформе. Узким местом может быть жесткий диск. В идеале каждая виртуалка должна иметь свой личный диск или массив. Дело в том что при ее работе возникает большое количество дисковых операции, так что две или три машины могут существенно снижать производительность друг друга.
|
|
30.12.2010, 13:59 | #6 |
Moderator
|
Возможно что-то не так с настройками. В сети, в том числе на этом форуме есть бенчмарки CRM 4.0. Насколько я помню, она легко держит десятки тысяч конкурирующих пользователей. Из своей практики могу заметить, что импорт 13000+ организаций и 9000+ контактов длился в общей сложности около 10 минут и при этом система отвечала на запросы. Если вы пишете интеграцию, то очень не рекомендую связываться с базой. Используйте все же сервисы.
__________________
http://fixrm.wordpress.com, снятие/наведение порчи. Быстро, дорого, гарантия. MS Certified Dirty Magic Professional |
|
30.12.2010, 14:35 | #7 |
Участник
|
Цитата:
Цитата:
Вести логи изменения полей объекта "Заявка" и "Продукт для заявки", а также логи создания новых заявок. Сейчас реализовано на коллаутах. Причем сами логи - тоже объекты При этом при массовом создании/изменении заявок сервер "закипает" Сейчас есть идея повесить триггеры на таблицы в базе (вместо коллаутов) и сделать ведение логов в своей(!) таблице в БД CRM (вместо создания объектов в CRM). |
|
30.12.2010, 15:34 | #8 |
Чайный пьяница
|
Цитата:
Если у вас 4.0 рекомендую переписать под плагины. А что тут противозаконного? Ансапорт, не советую так поступать. 5 баллов. А когда пользователь попросит показать как изменялась та или иная заявка вы ему установите SQL Management Studio и научите T-SQL?
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit |
|
30.12.2010, 22:22 | #9 |
Moderator
|
Идея вынести все в отдельную базу - достаточно здравая, но тогда вы получите проблему, о которой написал a33ik (и для его решения придется писать aspx-страничку для отображения журнала). Как вариант - пишите в базу (в свой объект Запись журнала), но таблицу поместите в отдельную файловую группу на отдельном диске - это уменьшит проблемы с производительностью, бэкапом, но в то же время, Вы сможете отображать лог прямо в CRM.
|
|
30.12.2010, 22:28 | #10 |
Moderator
|
А вообще - как говорит мой коллега из поддержки: "В проблеме производительности CRM опять оказался не при чем"
|
|
05.01.2011, 23:23 | #11 |
Участник
|
В чем принципиальная разница?
Цитата:
Хотя бы тотже Report Services. Суть не в этом. Суть в том, что то, как реализовано сейчас - тормозит. При загрузке заявок из внешней разработки, работать в CRM невозможно. |
|
06.01.2011, 00:15 | #12 |
Чайный пьяница
|
Цитата:
Плагины могут быть зарегистрированы как асинхронные (а калауты - нет) и отсюда ответ на следующую часть вашего сообщения: Зарегистрируйте плагин, который выполняет логирование как асинхронный.
__________________
Эмо разработчик, сначала пишу код, потом плачу над его несовершенством. Подписывайтесь на мой блог, twitter и YouTube канал. Пользуйтесь моим Ultimate Workflow Toolkit Последний раз редактировалось a33ik; 06.01.2011 в 12:15. |
|