|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
Гаджимурадов Рустамkdv> поэтому там автосвип отключать нужноА вот тут ты делаешь ровно такое же голословное заявление, как и он. Только с другого конца. еще раз, для тебя и для тех, у кого не бывает систем больше чем с 10 пользователей. И для всех остальных. Когда разработчик делает систему, он ее разрабатывает в монопольном режиме. Он имеет смутное представление, как это все будет работать в многопользовательском режиме. Поэтому он не уделяет особого внимания оптимизации запросов, управлению транзакциями, версиям, мусору и прочему на текущий момент для него бреду. Потом система попадает в промышленную эксплуатацию. И бывают те, кому повезло - то есть, на 10-20 пользователях и хорошем железе система работает еще туда-сюда. И вот на этих системах, включая нагруженные еще больше, периодически случается такая фигня - вдруг все начинает тормозить на 30 минут, 1 час, или даже 2 часа, а потом "отпускает". Происходить это может в понедельник, среду, или даже четверг, и установить причину этого бывает сложно (якобы). Так вот эти внезапные и случайные тормоза, в 90% случаев, результат срабатывания АВТОСВИПА. Я замечу, что мусор в этих системах собирается так или иначе. Например, появляющиеся тормоза в конце дня, или с утра - это все РЕГУЛЯРНЫЕ тормоза, которые людям (пользователям) вроде бы понятны, и которые они могут пережить. Но вот автосвип, который срабатывает абы как, вносит в работу совершенно ненужную депрессию. Отключение автосвипа приводит к чему? К тому, что где-то в базе может быть мусор. Еще к тому, что постепенно растет память, потребляемая транзакциями snapshot. И даже если свип не запускать вручную, ничего страшного не происходит. Вот к примеру, header page от базы некоего казино. Код: plaintext 1. 2. 3. 4.
Транзакций в сутки тут примерно 300к, так что OIT застряла где-то на третий день, после чего, через год, транзакции snapshot при старте стали аллокировать аж по 27.5 мегабайт памяти под локальный TIP. И что? И НИЧЕГО. Что ты, что Сибиряков, никак не могут понять, что - автосвип стартует в любой произвольный момент времени, как только OST-OIT стало >= 20000. - свип это скан всей БД, то есть тормоза с момента его запуска до момента его окончания. - при плохом управлении транзакциями (а я позволю себе заметить, что таких систем примерно 70% от всех систем на ИБ и ФБ, если не больше), автосвип имеет мало шансов успешно завершиться, т.к. активные транзакции могут ему препятствовать. Таким образом, я делаю вывод, что автосвип - зло по определению для систем более чем с 7-10 пользователей. У кого меньше, могут положить на это дело болт. Или положить болт на все что я сейчас написал, как угодно. Тем не менее, массу систем советом отключить автосвип мы избавили от этих "случайных тормозов". Разумеется, исправлять управление транзакциями - это дальше на совести разработчиков, но они не всегда исправляют, не всегда доступны, и т.д. Пользователей систем - больше, чем разработчиков этих систем. Ну теперь скажи мне, что мое заявление - голословное. p.s. из вышеизложенного я могу сделать даже куда далее идущий вывод - ЛЮБОЙ процесс в СУБД, который стартует в непредсказуемый момент времени, является вредоносным. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 22:50 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovНадо пинать этих программистов каждый раз, когда их совсем не конфетка устроила локальный апокалипсис. Дима, не работает это. Мы выписали много заключений про "говнософт" для пользователей систем. Вероятно, эти заключения даже были переданы некоторым разработчикам. Но даже когда софт разрабатывается и используется внутри большой компании, там есть две группы - админы и девелоперы. И девелоперы весьма часто игнорируют любые советы по поводу разработки. А админы потом, например, пишут скрипты, которые убивают раз в час их софт, чтобы этот софт не держал активной транзакцию. Я насмотрелся всей этой фигни уже выше крыши. Так что твои советы не выключать автосвип и не запускать его вручную - не работают. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 22:54 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdvСтатистика снята 5 июня 2014 года 2004 года, конечно. p.s. у меня собрано статистики разной, сейчас посчитал, как минимум по ~400 разным системам, на протяжении 15 лет. Поспорьте еще со мной. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 22:57 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdvТак вот эти внезапные и случайные тормоза, в 90% случаев, результат срабатывания АВТОСВИПА. То есть 9 из 10 твоих клиентов присылают тебе выдержку из firebird.log, где есть совпадающие с точностью до минуты с началом и концом тормозов записи о запуске и окончании свипа?.. Или же просто IBTM сообщает о успешном окончании свипа именно в момент когда кончаются и тормоза? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 22:58 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdv> для тех, у кого не бывает систем больше чем с 10 пользователей kdv> Ну теперь скажи мне, что мое заявление - голословное. Вдуй щеки обратно. Твоё заявление голословное. P.S. И научись внимательно читать, что тебе пишут. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 23:05 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovТо есть 9 из 10 твоих клиентов присылают тебе выдержку из firebird.log, где есть совпадающие с точностью до минуты с началом и концом тормозов записи о запуске и окончании свипа?.. сколько лет существует версия ФБ, в которой данные про свип пишутся в лог ФБ? Dimitry SibiryakovИли же просто IBTM сообщает о успешном окончании свипа все гораздо проще. есть тормоза, смотрим статистику, видим застревание OIT, и что автосвип включен. Отключаем автосвип, "внезапные тормоза" пропадают. Как я уже сказал, про "регулярные тормоза" (с утра или вечером) речь не идет. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 23:08 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамВдуй щеки обратно. Твоё заявление голословное. почему оно голословное? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 23:09 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdvсколько лет существует версия ФБ, в которой данные про свип пишутся в лог ФБ? Три года. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 23:20 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdv> почему оно голословное? Как можно не понимать голословность и глупость утверждения "В промышленных БД нужно отключать автосвип" ? Про твои "10 юзеров" и разрешаю я уж и не говорю - смешно, не более. Не "в большинстве", не "в таких-то условиях", не "рекомендуется", а "нужно всегда" и всё тут. Тут вы с тёзкоё два брата-акробата. P.S. Системы бывают разные, жидкие и газообразные - есть на 15 юзеров с высоким оборотом и CS, а есть и на 70, в которых SS работает и никаких проблем. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2015, 23:46 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
Симонов Денисmakhaon1. Будет ли в FB 3.0 быстрее происходить sweep? Размер базы порядка 10 гб. будет. Если конечно не все 10G является мусором Раз уж тут такой спор разразился, то поясню свой ответ. В тройке sweep не должен читать всю БД. На DP и PP страницах введён swept флаг. Этот флаг означает, что на соответствующей странице данных нет неиспользуемых версий записей и sweep может просто пропустить его. В Release Notes это не описано. Кое какая информация есть здесь . Самый хреновый вариант может быть в случае если до запуска свипа приложение умудрится модифицировать все страницы, и наплодить там мусор. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 00:03 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdv, пока не понятно, что не так на той системе. длинные пишущие транзакции вроде бы все вычищены - были вопросы. в лог fb свалилось: (Server) Fri Dec 04 11:02:46 2015 Sweep is started by SWEEPER OIT 2265655, OAT 2265656, OST 2265656, Next 2265657 (Server) Fri Dec 04 11:15:24 2015 Sweep is finished OIT 2266105, OAT 2266106, OST 2266106, Next 2266109 свип в системе бывает не часто - где-то раз в 1.5 - 2 недели. раньше обычно выполнялся за где-то 2 минуты. этот почему-то был относительно долго, и, видимо, очень не вовремя: 13 минут хватило, что бы сервис убили. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 00:12 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdvОтключаем автосвип, "внезапные тормоза" пропадают. Танец дождя. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 00:18 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
Гаджимурадов РустамКак можно не понимать голословность и глупость утверждения "В промышленных БД нужно отключать автосвип" ? Про твои "10 юзеров" и разрешаю я уж и не говорю - смешно, не более. Не "в большинстве", не "в таких-то условиях", не "рекомендуется", а "нужно всегда" и всё тут. Тут вы с тёзкоё два брата-акробата. давай я твой комментарий, как и все остальные, проигнорирую. Ты уже и так себя зарекомендовал как профессионального демагога, регулярно наводящего тень на плетень. "научись внимательно читать, что тебе пишут.", и прочая ахинея, вместо конкретного ответа. К тому же, никому не известно, что Рустам делает на Firebird, какие системы, сколько там пользователей, и так далее. Предлагаю тебе с текущем стилем ответов и комментариев пойти обратно в раздел Дельфи, а тут больше не появляться. Это просто предложение, ты его можешь проигнорировать, но ты для меня так и останешься "болтологом", не имеющим на свои комментарии никакого основания, абсолютно. Гаджимурадов РустамСистемы бывают разные, жидкие и газообразные - есть на 15 юзеров с высоким оборотом и CS, а есть и на 70, в которых SS работает и никаких проблем. да, бывают. Но ПРАКТИКА (которой у тебя нет, я утверждаю, ибо обратных подтверждений нет совсем) говорит о том, что в БОЛЬШИНСТВЕ случаев автосвип лучше все же выключить, и запускать свип регулярно, автоматизированно, в конкретные периоды времени. Я думаю, что обратного ПРАКТИЧЕСКОГО примера от тебя я не получу, никогда. Поэтому все будущие дискуссии на этом предлагаю считать законченными. makhaon пока не понятно, что не так на той системе. длинные пишущие транзакции вроде бы все вычищены здесь вопрос про свип или автосвип вообще не возникал, пока. Dimitry SibiryakovТанец дождя. да, вот такой танец. Данные по четыремстам системам собери, а потом будем сравнивать. Согласен, грубовато, зато практично. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 01:20 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdvда, вот такой танец. Данные по четыремстам системам собери, а потом будем сравнивать. Что толку с данных, которые не помогут ответить на вопросы "что именно тормозит" и "на чём, собственно, затык происходит". Код свипера не такой уж и сложный. Ни на первый, ни на второй взгляд там нет ничего, что вызвало бы очередь за локами, вымывание кэша и тому подобные спецэффекты. Вот среди твоих данных есть данные из MON$IO_STATS и MON$RECORDS_STATS для коннекта свипера при тормозах? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 01:28 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdv- при плохом управлении транзакциями (а я позволю себе заметить, что таких систем примерно 70% от всех систем на ИБ и ФБ, если не больше), автосвип имеет мало шансов успешно завершиться , т.к. активные транзакции могут ему препятствовать.Не согласен с такой формулировкой. Как по мне - неуспешное завершение - это прерывание свипа по какой-либо причине. Свип можно прервать - мониторингом, шатдауном БД, остановкой сервиса, шатдауном ОСи - это всё легально и нормально. Но никакие активные тр-ции не могут помешать свипу закончить начатое. Другой вопрос - насколько близко к Next будет подвинут OIT и как много мусора будет собрано. Но это уже не относится к успешности завершения свипа. Давайте не будем друг друга путать, а остальных пугать :) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 01:39 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
makhaon13 минут хватило, что бы сервис убили.Не знаю кто там кого убил, но свип отработал и успешно завершился, судя по записи в логе. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 01:44 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
makhaonSweep is started by SWEEPER OIT 2265655, OAT 2265656, OST 2265656, Next 2265657 нафига стартанули sweep, непонятно, потому что OST-OIT = 1 makhaon этот почему-то был относительно долго, и, видимо, очень не вовремя: 13 минут хватило, что бы сервис убили. непонятно, почему долго. Next за это время выросло всего на 452 транзакции. Впрочем, об интенсивности операций внутри этих транзакций ничего не известно, может они там базу дрюкали. В результате и свип медленно отработал. Впрочем, даже и по окончании свипа явно видно, что OIT не застревало (ибо и раньше было -1 от OAT и OST, и так же оно и стало), и sweep был запущен "от балды". Еще раз. sweep нужен только для сборки потенциально присутствующего мусора в БД при застревании OIT, т.е. когда этот маркер не движется вместе с остальными "вверх". Причем, "потенциально присутствующего" - этот мусор может быть, а может и не быть. Например, взяли, и убили процесс классика, который в базе ничего не менял. OIT застрянет на его транзакции, поскольку сервер не знает, менял этот процесс что-то или нет (вернее, память об изменениях погибла вместе с убитым процессом). В результате sweep если запустить, то он отработает впустую. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 03:56 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
kdvOIT застрянет на его транзакции, поскольку сервер не знает, менял этот процесс что-то или нет (вернее, память об изменениях погибла вместе с убитым процессом). В результате sweep если запустить, то он отработает впустую. А как в таком случае продвинуть счетчик и собрать мусор? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 07:52 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
авторНапример, взяли, и убили процесс классика, который в базе ничего не менял. OIT застрянет на его транзакции, поскольку сервер не знает, менял этот процесс что-то или нет (вернее, память об изменениях погибла вместе с убитым процессом). В результате sweep если запустить, то он отработает впустую. Тогда интересен такой момент. Прога на ФИБах с одним компонентом pFIBFatabase коннектится к базе на классике с рядом транзакций. Если одновременно активных транзакций несколько, процесс все равно один и тот же? И если процесс будет срублен - все ли они зависнут (не считая транзакций Read Read Committed Rec_version? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 11:25 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
ЛюбезныйЕсли одновременно активных транзакций несколько, процесс все равно один и тот же? Чё? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 11:36 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
авторЧё? Имею в виду - один процесс на классик-сервере открывается под транзакцию или под коннект? Если под коннект (я всегда считал так), то если коннект, к примеру, с 5 активными транзакциями вдруг отвалится, то в OAT будет номер самой первой из таких транзакций? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 12:01 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
ЛюбезныйИмею в виду - один процесс на классик-сервере открывается под транзакцию или под коннект? Чё? ЛюбезныйЕсли под коннект (я всегда считал так), то если коннект, к примеру, с 5 активными транзакциями вдруг отвалится, то в OAT будет номер самой первой из таких транзакций? Как ты догадался? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 12:07 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
ЛюбезныйПрога на ФИБах с одним компонентом pFIBFatabase коннектится к базе Зачем FIBFatabase больше одного? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 12:12 |
|
Как сделать gfix -sweep в коде Delphi компонентами IBX
|
|||
---|---|---|---|
#18+
Gallemar, не подкалывай. Мне, как разработчику приложений, хочется без бутылки разобраться, почему при анализе gstat -h баз, которые используются моими приложениями, я вижу разницу в несколько сотен между Oldest transaction и Next transaction за каких-то несколько недель использования приложений, и сколько нужно выпитьчто нужно сделать, чтобы такого не было? Причём одно из приложений, которое работает уже года три с одной из баз, такой хренью не страдает - там эта разница не превышает 3. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2015, 12:15 |
|
|
start [/forum/topic.php?fid=40&msg=39121203&tid=1562465]: |
0ms |
get settings: |
8ms |
get forum list: |
11ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
67ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
others: | 261ms |
total: | 428ms |
0 / 0 |