2012-02-29 3 views
0

Я запускаю 7 XML-парсеров (захват данных с сторонних сайтов) на моем сервере.Ошибка выполнения SQL Server

Когда я запускаю каждый XML-анализатор отдельно, требуется около 1 минуты, чтобы пройти через 15 МБ XML (что довольно много).

Когда я запускаю все 7 вместе, для завершения работы требуется около 10 минут.

Каждый XML добавляет много информации в БД и работает около 50 000 запросов.

Сервер Я бегу мои парсеры на это:

  • Тип сервера: Hp DL180 G6
  • Тип процессора: Intel Xeon E5504
  • Частота процессора: 2000 МГц
  • Количество процессоров: 2
  • Количество ядер: 4
  • Оперативная память: 16 ГБ

Запуск SQL Server Web Edition на 2 CPU

Проблема возникает, когда все парсеры работают параллельно, центральный процессор SQL Server достигает 100%.

И действительно большая проблема, в том, что мне нужно иметь около 50 XML-парсеры в будущем :(

Что вы, ребята, советы? Я должен обновить сервер XML может быть? Или сам сервер?

может быть, SQL Server работает на 1 процессор, а не на 2 процессора? как я могу проверить, что?

Любой совет поможет ...

+0

Попробуйте использовать меньше парсеров. Если у вас есть 4 ядра, запустите 4 или 3 сеанса за один раз. – TcKs

ответ

1

была такая же проблема. я имел 600000 строк XML, которые не закончил обработку даже через час. Что сработало для меня, так это разбить XML на более мелкие куски и вставить куски в временную таблицу (моя XML описала ботинок для телевизора, поэтому я разбил ее на 200 разных каналов), и теперь для всего XML требуется 1 минута.

+0

Вот что я сделал! Я анализирую графики графиков матчей в формате XML, так что теперь я разбираю их с небольшими кусками (каждый матч отдельно), и он работает быстрее, но когда все работает вместе, процессор так высок. И я думаю, что он просто плох. Может быть, любая другая идея? –

+0

Я попытался решить это с помощью нашего администратора баз данных, но не повезло.Я думаю, что движок XML проблематичен с большим XML. Я остаюсь с временным столом. он работает хорошо для меня – uriz

0

Несмотря на то, что процессор находится на 100%, я думаю, что ваше узкое место здесь - I/O. Специально потому, что вы сказали, что у вас есть несколько процессов чтения и записи данных на диск в то же время. Можете ли вы проверить ввод-вывод на вашем сервере?

Если процессы попадают в разные таблицы, возможно, вы можете сделать что-то, например, с помощью Filegroups, чтобы разделить вашу БД на разные HD.

Если они попадают в одни и те же таблицы, у вас, вероятно, есть проблема блокировки, когда синтаксический анализатор A пытается прочитать данные в тот же синтаксический анализатор таблицы B. Я бы порекомендовал JUST TO TEST и выяснил, действительно ли это проблема, при запуске вашего процесса с уровнем изоляции читайте uncommined. Если все будет хорошо, вы узнаете, в чем проблема.

+0

Hi Diego, спасибо за комментарий! можете ли вы объяснить, что именно мне следует делать? Я не понял 100%. Парсеры читают XML один раз в памяти и работают в цикле на всех элементах, поэтому в принципе ничего (кроме самой БД) не сохраняется на диске. И, как вы сказали, я просто имею дело с 3 таблицами (все парсеры). –

+0

, но вы сказали: «Каждый XML добавляет много информации в БД и работает около 50 000 запросов». Я понял, что вы запускаете несколько вложений и выбираете свою БД, и поскольку у вас есть несколько процессов, они, вероятно, борются за ресурсы. В любом случае, мое предложение заключалось в том, чтобы добавить «ваш уровень изоляции транзакции без чтения» в вашем синтаксическом анализаторе, чтобы он не вызывал блокировки, чтобы мы могли увидеть, является ли это реальной проблемой. – Diego

+0

Можете ли вы направить меня к тому, как мне это сделать? Я не DBA, как вы могли бы оценить :) –

Смежные вопросы