Как оптимизировать нагрузку на диск в FB 2.5.2?

Администирование клиентской и серверной части InterBase, Firebird, Yaffil. Настройка файла конфигурации и т.п.

Модераторы: kdv, Alexey Kovyazin

Ответить
VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 01 июл 2014, 12:07

Добрый день.

Есть БД под управлением FireBird 2.5.2 Superserver 64 bit на WIN 2008 R2 , живущая на виртуальной машине в дата-центре, с выделенной мощностью CPU: Intel Xeon E70L8867 @ 2.13GHz 2 ядра , ОЗУ 4 ГБ (swap 4Гб), 4 диска: 1 для системы, 2 - swap, 3 - БД и приложение работающее с ней , 4 - бекапы БД.

Приложение, которое работает с БД, вызывает высокую нагрузку на диск от 800 до 1100 IOPS (что вызывает задержку записи в БД, в следствии чего пользователи не получают инфу на рабочие места), при этом размер базы не больше 10Гб (при достижении порога производится миграция, периодически производится бекап/рестор), количество одновременных подключенных пользователей, которые производят чтение не более 20, кол-во одновременных потоков на запись ~200, а аналогичное приложение, но работающее на СУБД MS SQL, нагружает диск на 200-350 IOPS.
После изменения размера страницы базы FB с 4096 на 16384, кол-во обращений к диску удалось снизить до 600 IOPS (средняя длинна очереди диска 0,5), однако периодически возникают пики до 800 обращений. Файл конфигурации оставлен по умолчанию:

Код: Выделить всё

DefaultDbCachePages = 2048
FileSystemCacheThreshold = 65536
FileSystemCacheSize = 0
TempBlockSize = 1048576
TempCacheLimit = 67108864
LockMemSize = 1048576
LockHashSlots = 1009
EventMemSize = 65536
CpuAffinityMask = 1
увеличен только TcpRemoteBufferSize до 32767, для ускорения выгрузки данных на клиентские рабочие места.

Результат выполнения команды gstat -h

Код: Выделить всё

Database header page information:
        Flags                   0
        Checksum                12345
        Generation              12719319
        Page size               16384
        ODS version             11.2
        Oldest transaction      12719296
        Oldest active           12719297
        Oldest snapshot         12719297
        Next transaction        12719299
        Bumped transaction      1
        Sequence number         0
        Next attachment ID      843
        Implementation ID       26
        Shadow count            0
        Page buffers            0
        Next header page        0
        Database dialect        3
        Creation date           Jun 28, 2014 10:23:25
        Attributes              force write

    Variable header data:
        Sweep interval:         20000
Подскажите, возможно ли оптимизировать нагрузку на диск, и каким образом это возможно сделать, т.к. поиск по форуму однозначных ответов на этот вопрос не принес, а литература доступная в сети очень старая, и написана во времена FB 1.5.

Заранее Спасибо.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 01 июл 2014, 14:39

12 миллионов транзакций за 3 дня? может, оптимизировать работу приложений с транзакциями?

кроме того, если приложение интенсивно меняет базу, и фб находится на виртуалке, вы получите производительность ниже, чем на обычном железе. Что это за система вообще, и каким образом суперсервер у вас такое количество соединений обрабатывает?

кстати, кэш надо больше сделать. вот это
DefaultDbCachePages = 2048
означает что сейчас у вас только 32 мегабайта используется.
читали www.ibase.ru/devinfo/optimize.htm ?

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 01 июл 2014, 14:57

kdv писал(а):12 миллионов транзакций за 3 дня? может, оптимизировать работу приложений с транзакциями?

кроме того, если приложение интенсивно меняет базу, и фб находится на виртуалке, вы получите производительность ниже, чем на обычном железе. Что это за система вообще, и каким образом суперсервер у вас такое количество соединений обрабатывает?

кстати, кэш надо больше сделать. вот это
DefaultDbCachePages = 2048
означает что сейчас у вас только 32 мегабайта используется.
читали http://www.ibase.ru/devinfo/optimize.htm ?
1) Гм, видимо, такая специфика работы системы, но информации в базе реально очень много. Приложение модифицировать производитель, к сожалению уже не будет. Разработка остановлена из-за выхода нового продукта( как раз который на MS SQL), однако на него пока не перейти.

2) Живое железо увы нет возможности использовать. Система мониторинга транспорта. Как-то обрабатывает, я так понимаю следует настроить "Классик" или "Супер Классик"?

3) Читал, но честно говоря немного не понял как это соотнести с действующей системой, т.к. там описывалась "Классик" модель.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 01 июл 2014, 16:48

но информации в базе реально очень много.
да при чем тут объем информации. 10 гиг - по нынешним меркам не такая большая база.
Приложение модифицировать производитель, к сожалению уже не будет.
тогда только
а) конфиг - увеличить размер кэша, и LockHashSlots поставить 10001 или как-то так (простое число в районе 10 тысяч)
б) улучшением железа, которое под виртуалкой
я так понимаю следует настроить "Классик" или "Супер Классик"?
вы неправильно понимаете. Я задал вопрос, вы вместо этого начинаете тыкать пальцем в небо, причем совершенно точно не прочитав статью, на которую я указал.
Кроме того, "200 потоков" никак не могут параллельно работать не в 200 коннектах. Если они это делают в 20 коннектах, значит они не параллельны, и 180 тредов фактически фиктивные.
Объем памяти, необходимый в вашем случае для классика или суперклассика вы можете подсчитать, прочитав статью. А количество коннектов можете определить через mon$attachments.

В любом случае, у вас возможности действий весьма ограничены, раз "производитель ПО ничего уже менять не будет".

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 01 июл 2014, 16:53

кстати, заранее предупреждаю. с такой интенсивностью транзакций, если еще и будет расти, через 1.5-2 года база остановится, и ей надо будет делать срочно перевод в readonly, потом бэкап-рестор.

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 01 июл 2014, 17:29

1) Каким образом узнать сколько памяти требуется каждому подключению? В статье указано от 50 до 250мб.
kdv писал(а): б) улучшением железа, которое под виртуалкой
2) Что именно нужно улучшать? Объем ОЗУ? Если БД будет не хватать ОЗУ, то она не обязательно будет обращаться к файлу подкачки?

3) Я не тыкаю, а выдвигаю предположение, основанное на Вашей фразе в предыдущем посте:
kdv писал(а):и каким образом суперсервер у вас такое количество соединений обрабатывает
kdv писал(а):кстати, заранее предупреждаю. с такой интенсивностью транзакций, если еще и будет расти, через 1.5-2 года база остановится, и ей надо будет делать срочно перевод в readonly, потом бэкап-рестор.
4) Каждые 10Гб выполняем миграцию, и если требуется по ходу работы базы - остановку и бекап/рестор.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 01 июл 2014, 21:24

Каким образом узнать сколько памяти требуется каждому подключению? В статье указано от 50 до 250мб.
вы не прочитали статью. Там написано:
"Как выяснить заранее, сколько памяти будет занимать процесс классика? Никак, потому что это зависит от метаданных, запросов, и объема обрабатываемых данных. Нужно запустить Firebird Classic, и посмотреть на размер процесса при выполнении запросов (или работе приложения) к конкретной БД."

Замечу, что лучше это сделать на тестовой машине, а не пытаться это сделать на вашей виртуалке, на которой 4 гиг, где классик даже с 20 коннектами скорее всего умрет по нехватке памяти.
Что именно нужно улучшать? Объем ОЗУ? Если БД будет не хватать ОЗУ, то она не обязательно будет обращаться к файлу подкачки?
1. совет изменить кэш для суперсервера (увеличить) также относится и к классику/суперклассику (уменьшить). Про это написано в статье.
2. для начала - увеличить размер кэша для суперсервера. У вас же 4 гиг, сколько fbserver.exe занимает в памяти? Вообще странно, IOPS вы посчитали, а на память не смотрите.
3. "БД" не обращается к файлу подкачки, это файл. Памяти может не хватить серверу. Любое потребление памяти сервером больше физической будет приводить к выпадению в виртуалку и тормозам. Если в виртуалке Windows, нужно смотреть page faults для этого процесса и другие параметры памяти.
4. если вы все равно с изменением кэша упираетесь в I/O, тогда надо улучшать диск.
Я не тыкаю, а выдвигаю предположение, основанное на Вашей фразе в предыдущем посте
мой вопрос относится к тому, что "200 потоков", как я уже сказал, могут работать или в 200 коннектах, или в меньшем количестве коннектов, но не параллельно. И к тому, что суперсервер сам по себе любое количество коннектов к одной базе не способен распараллеливать на ядра. Таким образом, теоретически, у вас суперсервер занимает под 100% одного ядра, что одновременно может вызывать более медленную работу "пользователей".
Распараллеливаться может классик, но он потребляет больше памяти, и ... опять возвращаемся к статье.
И, при переходе на классик/суперклассик придется дать виртуалке больше ядер (не в курсе, сколько там сейчас).

Вы свою виртуалку можете проверить CrystalDiskMark, сравнить с тем, что в статье, хотя бы?

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 02 июл 2014, 09:50

К виртуалке, к сожалению, никакого отношения не имеем, можем только улучшить/ухудшить ее конфигурацию по запросу.

Вчера смотрел подключения на СуперСервере через SQL запрос который Вы подсказали, по нему показывает 1 подключение.
На поднятом тестовом сервере с моделью Классик, где крутиться половина нагрузки боевого сервера, в процессах висит три fb_inet_server.exe, занимают 38,5 мб, 6,5 мб и 2,3 мб соответственно.

На виртуалке 2 ядра.

FBserver.exe занимает в памяти 42 Мб.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 02 июл 2014, 15:06

в процессах висит три fb_inet_server.exe, занимают 38,5 мб, 6,5 мб и 2,3 мб
первый основной (от приложения), второй еще от чего-то, третий - листенер. Листенер с базой не работает.
по нему показывает 1 подключение.
все время? о каких тогда 200 "потоках" шла речь? Если вы про запрос к mon$attachments, то его нужно для обновления в новой транзакции запускать. Я не знаю, в чем вы его выполняли, если это IBExpert, то тогда в SQL Editor нужно делать commit и заново execute query.

Что виртуалкой вы не рулите, это я сразу понял. Значит, увеличивайте кэш суперсервера.

Мне интересно - вы этим занимаетесь по какой причине? Вас назначили? Не проще было нанять кого-нибудь для анализа и оптимизации этого дела?
Я это к тому, что вы балансируете на грани бесплатных и платных консультаций. Еще чуть дальше, и я перестану вам отвечать.

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 03 июл 2014, 09:06

200 потоков это на основании логики работы приложения, в приложении есть объекты которые пишут информацию в БД и пользователи которые оттуда ее читают, поэтому такие выводы. А как именно работает приложение с БД я не могу сказать.

Я этим занимаюсь потому что больше некому. Фактически я отвечаю за техническую и программную часть системы и если возникают трудности, то обращаюсь к разработчику.Однако, в ситуации с настройкой FB, от него был получен ответ что модель сервера "Суперсевер" и настройки конфига по умолчанию подходят под любой объем объектов и пользователей в системе. Это вызвало сомнение и поэтому я решил обратиться за помощью сюда.

Вчера кстати добавили еще 4Гб на виртуалке, изменил в конфиге

DefaultDbCachePages = 8192
FileSystemCacheThreshold = 262144
FileSystemCacheSize = 50

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

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 03 июл 2014, 14:23

Вчера кстати добавили еще 4Гб на виртуалке, изменил в конфиге
гм. 8к страниц * 16к страницу = 131 мегабайт кэша. Вы говорите, что во время работы fbserver.exe занимает 42мб в памяти. При этом у вас в виртуалке было 4гиг.
И после этого вы увеличиваете RAM до 8 гиг, как я понял. С какой целью, если у вас FB всего 200мб памяти будет занимать?
настройки конфига по умолчанию подходят под любой объем объектов и пользователей в системе.
ну конечно. то есть, получается, со слов разработчика конфиг firebird-у совсем не нужен. хороший такой разработчик.
FileSystemCacheThreshold = 262144
FileSystemCacheSize = 50
вы все это выставляете по результатам каких-то замеров, или наобум? Похоже на второе, потому что эти цифры без других данных "окружения" не имеют ни малейшего смысла.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 03 июл 2014, 14:24

и еще
Хотя судя по отображению информации на рабочих местах сервер все равно не успевает все писать.
вроде бы "рабочие места", но вы сказали, что в mon$attachments виден только 1 коннект. Как так?

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 04 июл 2014, 09:27

kdv писал(а):и еще
Хотя судя по отображению информации на рабочих местах сервер все равно не успевает все писать.
вроде бы "рабочие места", но вы сказали, что в mon$attachments виден только 1 коннект. Как так?
ну да,1 коннект все время. При этом пишутся в базу записи от 50-150 объектов постоянно и на связи около 10 пользователей.

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 04 июл 2014, 09:40

kdv писал(а):
Вчера кстати добавили еще 4Гб на виртуалке, изменил в конфиге
гм. 8к страниц * 16к страницу = 131 мегабайт кэша. Вы говорите, что во время работы fbserver.exe занимает 42мб в памяти. При этом у вас в виртуалке было 4гиг.
И после этого вы увеличиваете RAM до 8 гиг, как я понял. С какой целью, если у вас FB всего 200мб памяти будет занимать?
настройки конфига по умолчанию подходят под любой объем объектов и пользователей в системе.
ну конечно. то есть, получается, со слов разработчика конфиг firebird-у совсем не нужен. хороший такой разработчик.
FileSystemCacheThreshold = 262144
FileSystemCacheSize = 50
вы все это выставляете по результатам каких-то замеров, или наобум? Похоже на второе, потому что эти цифры без других данных "окружения" не имеют ни малейшего смысла.
Данные параметры выставлены на основе наблюдений работы системы в системном мониторе ОС и подбором на основе наименьшей нагрузки на диск и наибольшей актуальности данных у пользователей.

FB сейчас в памяти занимает 141 МБ, кроме нее есть само приложение системы, которое кушает минимум 500 Мб, плюс есть другое вспомогательное приложение и системные процессы. В итоге оконный интерфейс сервера перестал тормозить.

Совет увеличить ОЗУ и кэш Вы дали сами почти в первом сообщении. Однако, конкретного так ничего и не сказали, сославшись на платные консультации и статью, поэтому я считаю что лучше уже что-то делать, чем ничего не делать и сидеть ждать пока система окончательно загнется.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 04 июл 2014, 14:01

ну да,1 коннект все время. При этом пишутся в базу записи от 50-150 объектов постоянно и на связи около 10 пользователей.
кого интересуют какие-то мифические пользователи вашей трехзвенки? В одном коннекте к БД все равно операции параллельно выполняться не могут, по определению. Для СУБД - 1 коннект = 1 пользователь.
Однако, конкретного так ничего и не сказали, сославшись на платные консультации и статью
как я вам скажу КОНКРЕТНОЕ, если вы тут какие-то куски странных цифр из под полы достаете, и про "плюс есть еще приложения" говорите вообще в самом конце? Вы разве спросили - вот у меня тут есть столько-то памяти, как ее выделить под кэш? Или дали еще какую-то информацию?
В статье все расписано - какая архитектура сколько потребляет, как устанавливать, что это даст. Я вам написал какие параметры и куда надо выставить.
В результате получил в ответ, что вообще какую-то лабуду нес, и ничем не помог. Нормально... :-)

Вы хотели, чтобы за вас кто-то все это настроил? Так за такие услуги обычно деньги платят.

Раз настроили - ок, нет проблем.

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 04 июл 2014, 16:38

kdv писал(а):
Однако, конкретного так ничего и не сказали, сославшись на платные консультации и статью
как я вам скажу КОНКРЕТНОЕ, если вы тут какие-то куски странных цифр из под полы достаете

Вы хотели, чтобы за вас кто-то все это настроил? Так за такие услуги обычно деньги платят.

Раз настроили - ок, нет проблем.
Какие куски? С каких пор статистика и конфиг -это куски?

У Вас что-то все на деньги замыкается. Так не интересно.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 05 июл 2014, 22:54

Какие куски? С каких пор статистика и конфиг -это куски?
по статистике и конфигу я вам ответил. Вы потом выдали свои новые настройки конфига, которые не говорят ни о чем, в том смысле что с чего вы эти значения установили именно такими. И кончилось все тем, что вы дали какие-то общие цифры, и написали, что сами все посчитали.
Ну и прекрасно. Хотя я бы рекомендовал вам перечитать еще раз весь этот топик.
У Вас что-то все на деньги замыкается.
а вы бесплатно работаете? :-)

VjacheslavT
Сообщения: 9
Зарегистрирован: 01 июл 2014, 09:46

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение VjacheslavT » 07 июл 2014, 09:49

kdv писал(а):
У Вас что-то все на деньги замыкается.
а вы бесплатно работаете? :-)
нет, но можно один раз безвозмездно помочь и получить клиента, чем его сразу послать и наверняка потерять.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: Как оптимизировать нагрузку на диск в FB 2.5.2?

Сообщение kdv » 07 июл 2014, 16:24

и что, я вам не помог?

Ответить