периодические тормоза, sweep отключен

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
alexintegral
Сообщения: 3
Зарегистрирован: 13 авг 2012, 12:00

периодические тормоза, sweep отключен

Сообщение alexintegral » 16 авг 2012, 06:56

windows server 2008 R2 x64, 2xXEON 3.5 GHz, 4 Gb
FB 2.5.1.26351 32bit classic, один пользователь
база 800 Мб (проблемы начались с 500).
c++, native api, sweep отключен, работа производится из разных потоков.

90% операций - только insert в таблицу1, остальное - select/insert в других таблицах.
update применимо только к одной таблице, операции редки (~1000 в день).
при этом update возможен только из одного потока, нет конкуренции.
запросы все примитивные, максимум сложности select sum(field1) from table1

статистика c интервалом в пару дней:

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

Database header page information:
        Flags                   0
        Checksum                12345
        Generation              7198805
        Page size               4096
        ODS version             11.1
        Oldest transaction      7197497
        Oldest active           7197498
        Oldest snapshot         7197498
        Next transaction        7197499
        Bumped transaction      1
        Sequence number         0
        Next attachment ID      1287
        Implementation ID       16
        Shadow count            0
        Page buffers            0
        Next header page        0
        Database dialect        3
        Creation date           Mar 22, 2012 18:49:20
        Attributes              force write

    Variable header data:
        Sweep interval:         0
        *END*

        Generation              7406437
        Page size               4096
        ODS version             11.1
        Oldest transaction      7405043
        Oldest active           7405044
        Oldest snapshot         7405044
        Next transaction        7405048
проблема:
периодически наступает время (зависимости не обнаружил, как правило раз в день-два),
когда некоторые запросы начинают выполняться
непозволительно долгое время, наблюдал до 50 секунд. это может быть любой запрос (select/insert/update)
в любом потоке, в разные таблицы.
если выполняется один такой "тормозной" запрос, он блокирует или сильно замедляет
выполнение всех остальных в других потоках. как будто начинает что-то происходить в такие моменты
постороннее, мешающее работе, но ничего криминального в ОС замечено не было.
идеально сюда вписывался sweep, но его отключение результата не принесло.

дополнительно пытался защищать isc_start_transaction с помощью критической секции,
а также открывать отдельные instance для разных потоков, менять версии FB, не помогло.

какие будут мысли по этому вопросу, уважаемые гуру?

hvlad
Разработчик Firebird
Сообщения: 1244
Зарегистрирован: 21 мар 2005, 10:48

Re: периодические тормоза, sweep отключен

Сообщение hvlad » 16 авг 2012, 14:20

alexintegral писал(а):периодически наступает время (зависимости не обнаружил, как правило раз в день-два),
когда некоторые запросы начинают выполняться
непозволительно долгое время, наблюдал до 50 секунд
Загрузка процессора, очередь к диску в эти моменты есть ?
Отключенный свип не означает отсутствие сборки мусора.
Свип делается ? gstat -r смотрится ?
Можно настроить аудит долгоиграющих запросов и посмотреть план и статистику выполнения.
Как крайнее средство - в момент подобной загрузки снать дамп памяти и выложить куда-нибудь для анализа.

PS ODS 11.1 не родная для 2.5

alexintegral
Сообщения: 3
Зарегистрирован: 13 авг 2012, 12:00

Re: периодические тормоза, sweep отключен

Сообщение alexintegral » 16 авг 2012, 14:42

процессор не более 25% всегда, за диском тоже не замечал тормозов.
вручную свип не вызывается - а как еще он может выполняться, я не знаю.
пока все работает штатно, ни один запрос не выполняется дольше 50 мс (свои логи пишутся)
gstat -r для двух самых загруженных таблиц приведен ниже
таблица создавалась с более старой версией FB, поэтому ODS имеет такой номер.
можно, конечно создать новую с 2.5.1 - но накопление статистики потребует времени, и я совсем не уверен, что решит проблему.

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

TABLE1 (129)
    Primary pointer page: 169, Index root page: 170
    Average record length: 66.50, total records: 5791390
    Average version length: 0.00, total versions: 0, max versions: 0
    Data pages: 153353, data page slots: 153353, average fill: 77%
    Fill distribution:
	 0 - 19% = 0
	20 - 39% = 0
	40 - 59% = 0
	60 - 79% = 152136
	80 - 99% = 1217

    Index RDB$PRIMARY2 (0)
	Depth: 3, leaf buckets: 8649, nodes: 5791390
	Average data length: 1.01, total dup: 0, max dup: 0
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 0
	    40 - 59% = 1
	    60 - 79% = 0
	    80 - 99% = 8648

    Index RELATION2 (1)
	Depth: 3, leaf buckets: 12488, nodes: 5791390
	Average data length: 0.00, total dup: 5791383, max dup: 3570882
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 0
	    40 - 59% = 12420
	    60 - 79% = 23
	    80 - 99% = 45

    Index RELATION3 (2)
	Depth: 3, leaf buckets: 12360, nodes: 5791391
	Average data length: 0.01, total dup: 5791293, max dup: 627789
	Fill distribution:
	     0 - 19% = 1
	    20 - 39% = 0
	    40 - 59% = 12090
	    60 - 79% = 34
	    80 - 99% = 235

    Index RELATION4 (3)
	Depth: 3, leaf buckets: 12369, nodes: 5791391
	Average data length: 0.02, total dup: 5704493, max dup: 2310410
	Fill distribution:
	     0 - 19% = 22
	    20 - 39% = 1
	    40 - 59% = 11598
	    60 - 79% = 459
	    80 - 99% = 289

TABLE2 (141)
    Primary pointer page: 210, Index root page: 211
    Average record length: 44.80, total records: 93909
    Average version length: 22.33, total versions: 46, max versions: 1
    Data pages: 1961, data page slots: 1961, average fill: 73%
    Fill distribution:
	 0 - 19% = 0
	20 - 39% = 0
	40 - 59% = 0
	60 - 79% = 1948
	80 - 99% = 13

    Index IDX_SESSIONS1 (3)
	Depth: 2, leaf buckets: 124, nodes: 93909
	Average data length: 0.00, total dup: 93811, max dup: 30493
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 0
	    40 - 59% = 62
	    60 - 79% = 7
	    80 - 99% = 55

    Index RDB$PRIMARY14 (0)
	Depth: 2, leaf buckets: 117, nodes: 93909
	Average data length: 1.00, total dup: 0, max dup: 0
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 0
	    40 - 59% = 0
	    60 - 79% = 0
	    80 - 99% = 117

    Index RELATION11 (1)
	Depth: 2, leaf buckets: 157, nodes: 93909
	Average data length: 0.01, total dup: 93811, max dup: 30493
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 0
	    40 - 59% = 138
	    60 - 79% = 11
	    80 - 99% = 8

    Index RELATION12 (2)
	Depth: 2, leaf buckets: 162, nodes: 93909
	Average data length: 0.00, total dup: 93903, max dup: 70443
	Fill distribution:
	     0 - 19% = 0
	    20 - 39% = 0
	    40 - 59% = 160
	    60 - 79% = 1
	    80 - 99% = 1

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Re: периодические тормоза, sweep отключен

Сообщение Dimitry Sibiryakov » 16 авг 2012, 15:03

Включи аудит с фильтрацией по времени выполнения запросов. Посмотри статистику reads, writes и т.д.

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

Re: периодические тормоза, sweep отключен

Сообщение kdv » 16 авг 2012, 23:04

лучше прислать полную статистику на support@ibase.ru, файлом, или сами посмотрите ее IBAnalyst-ом, чем тут в цифры пялиться.
таблица создавалась с более старой версией FB, поэтому ODS имеет такой номер.
не надо заниматься фигней. Поставили 2.5.1 - сделайте бэкап-рестор. Не хотите делать - не надо было ставить 2.5.1 вместо 2.1.

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

alexintegral
Сообщения: 3
Зарегистрирован: 13 авг 2012, 12:00

Re: периодические тормоза, sweep отключен

Сообщение alexintegral » 27 авг 2012, 08:04

проблема вылечилась выполнением backup - restore.
всем спасибо за внимание.

Ответить