LINUX.ORG.RU
решено ФорумAdmin

Низкая производительность виртуалки 1С MS sql под kvm


2

5

Всем привет.
В компании провожу перевод 1С сервера на виртуалку. Ранее использовалась машина 4Gb памяти, 2x DualCore Intel Xeon 5120, 1866 MHz ), raid 10. Сейчас новый сервер 32 Gb, 2 проца AMD Opteron, raid 1 + raid 10.


Поставил kvm, поставил виртуалку win 2008 R2, на него win sql x64 + 1С 8.2 x32.
SQL Базы 1c лежат на отдельном raid 10 из 4-х WD 10000.
По тестам everest скорость выросла значительно, однако сама 1С работает заметно медленнее, примерно на 10-20% Хотя должна была бы ускориться раза в два. Вот конфиг виртуалки.

<domain type='kvm'>
  <name>WindowsServer2008_sql</name>
  <uuid>c0dc51f6-c435-6e81-512e-a6befd6f5c76</uuid>
  <memory unit='KiB'>14312000</memory>
  <currentMemory unit='KiB'>14312000</currentMemory>
  <vcpu placement='static'>12</vcpu>
  <os>
    <type arch='x86_64' machine='rhel6.4.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>
  <cpu mode='custom' match='exact'>
    <model fallback='allow'>Opteron_G4</model>
    <vendor>AMD</vendor>
    <topology sockets='2' cores='6' threads='6'/>
    <feature policy='require' name='perfctr_core'/>
    <feature policy='require' name='skinit'/>
    <feature policy='require' name='ibs'/>
    <feature policy='require' name='mmxext'/>
    <feature policy='require' name='osxsave'/>
    <feature policy='require' name='vme'/>
    <feature policy='require' name='topoext'/>
    <feature policy='require' name='fxsr_opt'/>
    <feature policy='require' name='cr8legacy'/>
    <feature policy='require' name='ht'/>
    <feature policy='require' name='wdt'/>
    <feature policy='require' name='extapic'/>
    <feature policy='require' name='osvw'/>
    <feature policy='require' name='nodeid_msr'/>
    <feature policy='require' name='perfctr_nb'/>
    <feature policy='require' name='cmp_legacy'/>
    <feature policy='require' name='lwp'/>
    <feature policy='require' name='monitor'/>
  </cpu>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/libexec/qemu-kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
      <source file='/data/guest_images/WindowsServer2008_sql.raw'/>
      <target dev='vda' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </disk>
    <disk type='file' device='disk'>
      <driver name='qemu' type='raw' cache='none' io='native'/>
       <source file='/data2/WindowsServer2008sql_database.img'/>
      <target dev='vdb' bus='virtio'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x06' function='0x0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <interface type='bridge'>
      <mac address='52:54:00:0d:ac:4b'/>
      <source bridge='br0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <interface type='direct'>
      <mac address='52:54:00:3a:8b:09'/>
      <source dev='eth1' mode='vepa'/>
      <model type='e1000'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x07' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes' listen='0.0.0.0' keymap='ru' passwd='asdFGH01'>
      <listen type='address' address='0.0.0.0'/>
    </graphics>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Собственно, где проблема, почему скорость работы 1С может быть низкой? Может проблема в MS SQL?


cache='none' io='native'

А если попробовать включить кэш и сделать io=threads?

FRCTLL ()

SQL-версия всегда медленнее файловой, если тестировать в одноюзерском режиме.
Кроме того, непонятно, как ты сравнивал скорость работы.

pekmop1024 ★★★★★ ()
Ответ на: комментарий от FRCTLL

включать кэш точно не стоит, если база дорога, а вот threads попробовать стоит, у меня с native тоже результаты неоднозначные.

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

Проблема не в том, что sql медленнее файловой, а то что новый сервак, хоть и виртуальный должен быть быстрее чем старый физический, а выходит наоборот. Это и смущает. Прирост скорости должен быть ощутимый же

abdus ()
Ответ на: комментарий от abdus

Ощутимый как, ощутимый чем? Повторю вопрос о тестах.
Может, у тебя там конфиг 1С кривой, и дай ему хоть рейд из псие-ссд, все равно тупое будет.

pekmop1024 ★★★★★ ()

sql-ная база работает медленнее файловой у кукаретиков, лежащих в анабиозе со времён 7.7. Ищи на венде профайлер и смотри в нём, откуда тормоза

anonymous ()
Ответ на: комментарий от pekmop1024

Тест запускал everest он показывает многократный прирост производительности. По 1С: есть старый сервер, на нем сейчас юзеры работают, есть новый сервак, который я настраиваю. Беру одну и ту же базу, ставлю на оба сервера. На одном она запрос логина на вход делает за 3 секунды после запуска, на новом через 10 секунд. Вызов различных таблиц на страром сервере идет тоже на 10-20% быстрее. Повторюсь, база одна и та же, конфигурация тоже.

abdus ()
Ответ на: комментарий от thexf

Оп па... а слона-то я и не заметил. Щас исправлю и замерю

abdus ()
Ответ на: комментарий от anonymous

Смешной анонимус спорит с объективной реальностью...

pekmop1024 ★★★★★ ()
Ответ на: комментарий от abdus

Тест запускал everest он показывает многократный прирост производительности

Everest - это даже не попугаи. Кроме того, для SQL важен не столько процессор, сколько иопсы. Ты хотя бы CDM по своему рейду прогнал, я уж молчу про тест Гилева на 1С...

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

Провел тест Гилева. Очень низкое значение. 6,95.

abdus ()
Ответ на: комментарий от abdus

Да уж. А что говорит CrystalDiskMark на том рейде, где БД живет? Только внутри виртуалки, ясен пень. Образ, надеюсь, не динамический? И вообще, почему файловый образ, а не раздел на LVM или в крайнем случае напрямую просунутое блочное устройство?

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

CrystalDiskMark щас проверю.Какие еще утилиты есть для теста различных подсистем? Образ не динамический. Файловый проще переносить. Да и я читал, что потери в прозводительности около 5% всего.

abdus ()
Ответ на: комментарий от abdus

Да и я читал, что потери в прозводительности около 5% всего

Если он фрагментирован, то потери могут быть совершенно жуткие.
И даже если не фрагментирован, то все равно сильно больше 5%, но не по линейке, а по иопсам.

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

для SQL важен не столько процессор, сколько иопсы.

Кхм... Почему же тогда перенос базы на SSD не даёт ощутимого результата? - Пруф не найду, но MSSQL оптимизирован для HDD.

DALDON ★★★★★ ()
Ответ на: комментарий от abdus

Меня постоянно тут тролили с 1С на вирт. машине, но я так и не добился приемлемых результатов - живу на физ. железе - горя не знаю.

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

Пруф не найду

Вот пока не найдешь, и не трынди. Трындеть - не мешки ворочать. А если не найдешь, я всем покажу, какая метка у меня на тебе висит, во имя лулзов. Нет, ничего нецензурного. Просто смешно и в тему.

pekmop1024 ★★★★★ ()
Ответ на: комментарий от pekmop1024

CrystalDiskMark дает вот какие результаты. На старом сервере:

* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :   110.179 MB/s
          Sequential Write :    97.998 MB/s
         Random Read 512KB :    42.862 MB/s
        Random Write 512KB :    42.098 MB/s
    Random Read 4KB (QD=1) :     0.549 MB/s [   134.0 IOPS]
   Random Write 4KB (QD=1) :     2.643 MB/s [   645.3 IOPS]
   Random Read 4KB (QD=32) :     2.190 MB/s [   534.6 IOPS]
  Random Write 4KB (QD=32) :     2.654 MB/s [   648.0 IOPS]

  Test : 1000 MB [C: 46.5% (22.7/48.8 GB)] (x5)
  Date : 2013/10/07 21:00:33
    OS : Windows Server 2003 R2  SP2 [5.2 Build 3790] (x86)
  
А вот какие на новом:
* MB/s = 1,000,000 byte/s [SATA/300 = 300,000,000 byte/s]

           Sequential Read :  1237.623 MB/s
          Sequential Write :   442.764 MB/s
         Random Read 512KB :   708.828 MB/s
        Random Write 512KB :   351.297 MB/s
    Random Read 4KB (QD=1) :    14.469 MB/s [  3532.5 IOPS]
   Random Write 4KB (QD=1) :    12.513 MB/s [  3054.8 IOPS]
   Random Read 4KB (QD=32) :    22.172 MB/s [  5413.0 IOPS]
  Random Write 4KB (QD=32) :    11.886 MB/s [  2901.9 IOPS]

  Test : 1000 MB [E: 7.6% (15.0/197.7 GB)] (x5)
  Date : 2013/10/07 20:58:48
    OS : Windows Server 2008 R2 Server Standard Edition (full installation) SP1 [6.1 Build 7601] (x64)
C диском похоже, что проблем нет. Какие идеи есть? =(

abdus ()
Ответ на: комментарий от abdus

Ковырять настройки MS SQL, очевидно же, что проблема именно в нем.
Я смотрю, оффтопик разных версий? Тоже всякое с ними бывает.
Еще для того, чтобы окончательно ограничить область проблемы, поставь рядом на винде же постгрес, слегка подтюнь его по типичным рекомендациям и прогони гилева на нем.
Если попугаи будут настоящие, то уже совершенно ясно, что дело не в квм и не в сторадже. При правильно настроенном постгресе я ожидаю около 30 попугаев или даже больше.

pekmop1024 ★★★★★ ()
Последнее исправление: pekmop1024 (всего исправлений: 1)
Ответ на: комментарий от abdus

Конкретно я в своё время упёрся в Сеть. На множестве мелких пакетов - коих любит слать 1С, наблюдается провал производительности. - Но это было в 2009 году кажется я пробовал. В общем я и Гилёва гонял (с плохими тоже результатами на самом деле), и так, и сяк. Потом просто собрал всё это добро на десктопной железке с 4х ядерном ЦПУ. - CPU хватает, ОЗУ - всего 4гб. - маловато, но пока хватает.

Давича стали жаловаться что медленно всё работает... - Ну я впилил SSDшки без TRIM - скорость записи в softraid упала даже ниже того что была. Скорость чтения вестимо ОК. - В общем производительность не повысилась. - Читал кучу форумов, ресурсы Майкрософта, пришёл к выводу что дисковая подсистема не всегда сильно роляет в случае с MSSQL. - Потом я просто пнул больно 1Сника... Он сделал перерасчёт итогов и всё прочее. - Всё полетело. После назначил автоматический перезапуск 1С процесса в консоли управления (согласно рекомендациям 1С). - Пока работает всё нормально. - У меня пару тройку баз по 10 гиг. 10-15 человек работает в них.

DALDON ★★★★★ ()
Последнее исправление: DALDON (всего исправлений: 2)
Ответ на: комментарий от DALDON

Конкретно я в своё время упёрся в Сеть. На множестве мелких пакетов - коих любит слать 1С, наблюдается провал производительности.

Это с Windows в госте?

petav ★★★★★ ()

2x DualCore Intel Xeon 5120, 1866 MHz

Для SQL хорошо, а 1С сервер любит MHz. Поэтому у многих на старых железках с большим MHz результаты лучшие.

Я как почитал ниже MSSQL используется + сервер 1С предприятия, тогда можно настроить shared memmory. Это даст производительности.

Потом надо бы сеть потестить, если клиент 1С запускается за рамками этого сервера. Сеть очень может влиять, гость то windows, а тут у KVM нюансы.

Так же после переноса базы можно попробовать запустить тестирование и исправление перед замером. Где-то читал, что это рекомендация 1С.

petav ★★★★★ ()

1С, вообще, обычно тупит на блокировках. При массовом там проведении закрытия месяца и т.п. Один проводит - остальные курят.

Если у тебя вылезает тупняк даже на логине, то проблема скорее всего в сети.

Могу привести интересный пример:

У меня 1с + сикуль работают тоже в виртуалках, правда под вмваре. Хосты вмваре связаны по 10Гбит, и решил я как-то для оптимизации врубить Jumbo Frames на серверах 1с и sql, чтобы они пакетов друг другу поменьше кидали. Врубил. И тут 1с начал ТАААК тупить...что жесть. Причем всякие iperf и netperf показывают адовую производительность сети, практически сферические 9.8Гбит. А 1с тупит. Возвращаю MTU 1500 - всё летает. Винда 2008R2 гостем. Вот и думай...

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

Если у тебя вылезает тупняк даже на логине, то проблема скорее всего в сети.

Присоединяюсь

petav ★★★★★ ()
Ответ на: комментарий от petav

Для SQL хорошо, а 1С сервер любит MHz.

Сейчас у меня на базе порядка 15гб, при закрытии периода Core 2 Quad 2.67 GGz нагружается порядка: 35-65 процентов (с тем учётом что там 4ре ядра, худо бедно но Win2k3, что-то раскидывает по ним, одно ядро для MSSQL, другое для 1c). В моём случае я думаю хватает. А так да: 1866 MHz маловато будет. Факт. Тем более в виртуализованном состоянии.

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

Ну в те времена, да и сейчас не скажу что для гостя win, сеть на все 100% пашет.

petav ★★★★★ ()
Ответ на: комментарий от blind_oracle

Насколько я тогда понял, 1С как раз таки шлёт много мелких пакетов... - Так что ИМХО большие фреймы как раз таки и помешали наверно. Оно там общается на своём языке клиент-серверном...

DALDON ★★★★★ ()
Ответ на: комментарий от petav

Вдогонку к комментарию про процессор Мы купили новый сервер, он быстрее старого…. Но обращаю внимание, что процессор под задачу нужно выбирать. Для большинства задач 1С нужны Mhz

petav ★★★★★ ()
Последнее исправление: petav (всего исправлений: 2)
Ответ на: комментарий от petav

Угу, я тебе верю. В общем я не жалею что я отказался от виртуализации 1С.

Я вообще если честно в масштабах своей компании сейчас перехожу даже на VirtualBOX. Ибо серьёзные проекты доверять виртуализации без вложения 3-7 миллионов (это расчёты для нашей компании от HP), смысла не имеет, так-как складывать все яйца в одну корзину без нормальных лицензий, без нормального архива, бекапа, блейд серверов я смысла никакого не вижу. По сему я сейчас всё что требует MSSQL, перевожу на реальное железо. Всё что не требует ничего такого (всякие там тестовые машины, jabber, drweb, wiki, ldap) - кручу на бесплатном VBox, и бекаплю прям через LVM. Даже SAP бегает в VBox сносно - для тестов и возможно DEV вполне годно.

У нас бегает пока под VMware ESXi 5.1 такая весёлая штука под названием: Timex, то ещё дерьмо... Бежит на Win + MSSQL, обслуживает порядка 500 человек. - Могу сказать что мы уже умаялись... На виртуалке это работает крайне не быстро.

DALDON ★★★★★ ()
Последнее исправление: DALDON (всего исправлений: 1)
Ответ на: комментарий от petav

Кстати я на самом деле в своё время сэкономил на CPU для сервера виртуализации, тоже очень пожалел об этом потом. - CPU стоят 2,13 GGz. Этого ОЧЕНЬ мало.

DALDON ★★★★★ ()
Ответ на: комментарий от DALDON

Они не могут помешать, жумбо фреймс просто увеличивают потолок макс. размера фрейма и всё, а не заставляют слать большие.

blind_oracle ★★★★★ ()
Ответ на: комментарий от blind_oracle

А формируется из-за этого пакет не дольше? Я понимаю, что вестимо он не заставляет слать больше. :)

А твои предположения каковы? Из-за чего начался тупняк?

DALDON ★★★★★ ()
Ответ на: комментарий от petav

Сеть не при чем. Я локально запускаю. Сервер еще не в продакшене, так что на нем только 1-2 юзера одновременно максимум. Сервак вообще не нагружен.

abdus ()
Ответ на: комментарий от blind_oracle

Хм.я вообще не 1с-ник и от нее подальше стараюсь держаться. У нас в фирме для этого отдельный спец программер есть. Я хз как 1С работает (может она постоянно много запросов шлет), по этому вопрос. Может ли быть проседание из-за нагрузки на сеть, если там гигабит, и с 1с никто кроме локального юзера не работает?

abdus ()
Ответ на: комментарий от petav

Завтра проверю скорость на файловой базе, без sql. Сейчас по сети никто еще не работает. Запуск идет с локального клиента.

abdus ()
Ответ на: комментарий от abdus

Тогда я думаю сеть не при делах. А CPU по загрузке чего показывает во время тестов? Надо смотреть именно поядерную нагрузку. Я не знаю как современные Win, но в целом старые Win только на одно ядро вешают скажем процесс MSSQL, и на другое 1C. - Соот-но petav дело говорит, что ЦПУ может не хватать.

DALDON ★★★★★ ()
Ответ на: комментарий от pekmop1024

а вот threads попробовать стоит, у меня с native тоже результаты неоднозначные.

threads дает выше скорость, но с native немного ниже задержки. Только с утра видел графики тестов на эту тему.

devl547 ★★★★★ ()
Ответ на: комментарий от DALDON

Угу, я тебе верю. В общем я не жалею что я отказался от виртуализации 1С

А я еще борюсь с этим, правда у меня все на linux.

petav ★★★★★ ()
Ответ на: комментарий от abdus

Файловая база с одним пользователем покажет лучшее результаты чем SQL с одним пользователем и это норма.

Включи shared memmory это позволит серверу 1С работать с MSSQL не через сетевые коннекты, пусть даже локальные, а через память. Если судить по историям, то прирост должен быть. Я уже это советовал выше.

petav ★★★★★ ()
<interface type='bridge'>
      <mac address='52:54:00:0d:ac:4b'/>
      <source bridge='br0'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>

Сделай так

 <interface type='bridge'>
      <mac address='52:54:00:26:c7:b6'/>
      <source bridge='br0'/>
      <model type='virtio'/>
    </interface>
а если через direct (только заметил), то можно тоже virtio использовать. А так же эмуляция процессора будет жрать такты. Может убрать эмуляцию модели процессора и сетевой карты и сэкономить тактов?

petav ★★★★★ ()
Последнее исправление: petav (всего исправлений: 2)

Что то я не понял

SQL Базы 1c лежат на отдельном raid 10 из 4-х WD 10000.

и

/data2/WindowsServer2008sql_database.img
Если у тебя просто img лежит на рейде - то ждать скорости imxo не стоит, нужно цеплять раздел на рейде и прокидывать его в виртуалку.

TEX ★★ ()
Ответ на: комментарий от petav

Я пробовал в своё время PostgresSQL, на 1с 8,1. Результат был настолько ужасен, что мы просто отдали over 200k за Win + MSSQL, и пользуемся вот.

DALDON ★★★★★ ()
Ответ на: комментарий от abdus

C диском похоже, что проблем нет. Какие идеи есть? =(

Ага... когда его кеширует VFS линукса. Неужели

Sequential Read :  1237.623 MB/s
не смущает ?

TEX ★★ ()
Ответ на: комментарий от abdus

Запуск идет с локального клиента.

Хм.. а на старом серваке тоже ? Просто у серверных виндов вроде приоритет задачам малость другой. Точно помню что обычный IIS/Apache удаленно откликается на глаз быстрее чем локально.

TEX ★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.