|
|
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Озадачил меня ФБ. Заметил, что в процессе работы медленно, но верно утекает память (судя по всему, по нес-ку кило на каждую транзакцию). Всё перебрал, методом исключения вышел на триггер TRIGGER TRIG_TR_COMMIT ON TRANSACTION COMMIT POSITION 0 Если его тело закомментировать (при этом оставив проверку: Код: sql 1. 2. 3. 4. - утечки нет. Стоит раскомментировать совершенно безобидную строчку Код: sql 1. 2. 3. 4. 5. 6. - утечка есть. Детали конфигурации: OS Win7 Pro x64 Server Version: WI-V2.5.3.26690 Firebird 2.5 (пробовал и на релизном 2.5.2) Server Implementation: Firebird/x86-64/Windows NT Service Version: 2 Архитектура SuperClassic (fb_inet_server.exe -s DefaultInstance -m) БД: ODS 11.2 Устройство: БД выполняет функции буфера для данных, которые сыпятся в реальном времени. Старые данные удаляются. Инсерты объединяются в транзакции пачками до 90 штук. Для нижеприведенных тестов запускал имитацию 300 источников данных с интервалом генерации раз в секунду. Подключение - единственное (соответственно никаких проблем с блокировкой доступа быть не должно). Статистика базы после 5 мин. работы теста (утечка есть): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Утечку определяю через MON$MEMORY_USAGE (а также Process Explorer-ом, столбцы Private bytes и Working set): run.bat: Код: sql 1. 2. 3. 4. 5. 6. 7. isql_shell.bat: Код: sql 1. 2. 3. 4. 5. 6. 7. mem_mon.sql: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. ('M_ ' - для фильтрации строк, чтобы в лог писалась только нужная инфа; Sleep - моя программка для создания паузы) Итоги: триггер с одним значимым оператором Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. триггер с одним только условием проверки Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. и так в течение получаса. Уже голову сломал, пытаясь дознаться, что же это за беда. Готов предоставить любую другую инфу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:33:44 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalГотов предоставить любую другую инфу. Покажи триггер целиком, без цензурных многоточек. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:46:06 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, не помешает ещё раскрыть домен DOM_BOOL и привести DLL таблицы Options ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 14:48:59 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, текст триггера привел целиком, многоточки в /* */ обозначают то, что закомментировано. Думаю, этого достаточно, чтобы не влиять на ситуацию :) Симонов Денис, ничего сверхъестественного Код: sql 1. 2. 3. Код: sql 1. 2. 3. 4. 5. 6. В таблице единственная запись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:07:09 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
В рамках акции по проверке своих самых безумных подозрений удалил закомментированный текст в триггере, а также объявления неиспользуемых переменных. Т.е. чтобы текст полностью совпадал в тем, что привел в посте. Результат - тот же (что радует, хотя бы картина мира не пошатнулась :) ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:12:36 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, проверь вот так тоже утечка будет? Код: sql 1. 2. 3. 4. 5. 6. 7. 8. Ещё вопрос в таблице Debug_Log всегда одна запись? Если нет, то вот это Код: sql 1. 2. не верно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:18:30 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutalтриггер с одним значимым оператором Код: sql 1. 2. 3. 4. 5. Попробуй заменить в этом объявлении домен на простой тип. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:20:08 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
еще интересно было бы проверить, вот в таком варианте будет утечка или нет: Код: sql 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:22:16 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, даже вот так утечки нет Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. Ещё вопрос в таблице Debug_Log всегда одна запись? Да, т.к. если там две - вываливается исключение multiple rows in singleton select Dimitry Sibiryakov, Попробуй заменить в этом объявлении домен на простой тип. Не помогло (заменял на smallint) dimitr, утекает Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. Более того, select first 1 тоже не спасает. Причем системная таблица тоже дает такой эффект: Код: sql 1. 2. Правда, намного медленнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:36:55 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Возможно, проблема в любом триггере по коммиту, а то, что на бессмысленном коде утечки нет, - работа оптимизатора, который выкидывает эти участки кода, в итоге приходя к пустому телу триггера? Это единственное более-менее разумное объяснение, которое мне приходит в голову. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:40:50 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, эээ. Таблицы мониторинга это другое. Не надо их в триггерах на коммит использовать. Если здесь действительно есть утечка, то это конечно баг. Просто пока не ясно на любом ли селекте она происходит. Попробуй в этом триггере без селекта только вставку делать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:48:35 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, пожалуй, твоя правда, просто взял первую попавшуюся под руку таблицу из системных. Но вот на таком Код: sql 1. 2. то же самое. Причем базу уже для чистоты эксперимента "обезжирил" до невозможности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 15:59:05 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Да, еще забыл: конфиг ФБ - полностью дефолтный (совпадает с firebird.conf.default) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 16:04:16 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Fr0sT-Brutal, подожди пока dimitr прокомментирует. Если он подтвердит, что это бага иди в трекер. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 16:09:05 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Симонов Денисподожди пока dimitr прокомментирует. dimitr человек вежливый, поэтому я за него прокомментирую: аффтар, тебя попросили проверить на for select вместо простого select. Ты это сделал? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 16:23:36 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, Ты это сделал? яdimitr, утекает и далее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 16:39:45 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, даже если for select утечки не будет, то баг всё равно остаётся багом и его надо править. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 16:54:02 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, А какая принципиальная разница между for select и select? Ты предполагаешь, что наличие DO как-то уберет утечку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 17:14:47 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
DarkMasterDimitry Sibiryakov, А какая принципиальная разница между for select и select? Ты предполагаешь, что наличие DO как-то уберет утечку? Предполагаю, что было подозрение на неполную выборку (одна запись из таблицы с N записей? Хотя сервер ведь выбрасывает исключение в таком случае) и нечто вроде незакрытого курсора. Удалось воспроизвести с помощью isql. Сейчас минимизирую тестовый набор и выложу на проверку всеми желающими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 17:30:56 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
DarkMaster, Разница в SavePoint'ах для последующего блока BEGIN...END, да и в наличии курсора. Fr0sT-Brutal, может сразу в трекер? Хотя давай скрипт проверим. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 17:46:04 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Fr0sT-BrutalПредполагаю, что было подозрение на неполную выборку (одна запись из таблицы с N записей? Хотя сервер ведь выбрасывает исключение в таком случае) и нечто вроде незакрытого курсора. никто не угадал, хотя разница таки есть :-) Но, похоже, она тут не причем. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 17:48:41 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
dimitr, ответ в студию ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 17:52:50 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Симонов Денис, проверка сингулярности требует дополнительной аллокации памяти под запись ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 17:56:51 |
|
||
|
Утечка памяти (возм., из-за trigger after commit)
|
|||
|---|---|---|---|
|
#18+
Так, вроде бы весь комплект готов. Скачать в зипе: http://yadi.sk/d/kgbR2SEM93USM Состав файлов: db.sql - скрипт создания базы Mem_mon.bat - батник для запуска мониторинга памяти mem_mon.sql - запрос для Mem_mon.bat fbclient.dll, isql.exe - стандартные утилы isql_shell_boss.bat - батник для запуска isql как sysdba Tester.bat - батник для запуска проверочного цикла gen_cmds.bat - генерирует команды (вызов из Tester.bat) Sleep.exe - для паузы isql_shell.bat - батник для запуска isql как юзер RTDTEST_BARE.FDB - сама БД Запуск Настройки в ФБ: Юзер для теста - WRITER, пароль "1" Алиас БД для теста - RTData 1) Запустить Mem_mon.bat 2) Открыть mem.log в просмотровщике логов, умеющем следить за обновлением файла 3) Запустить Tester.bat Замечания по юзкейсу (выяснилось в процессе вычленения необходимого минимума для воспроизведения утечки): 1) Наличие роли играет роль (хых) - на простом юзере без роли бага нет 2) Наличие параметра типа DOM_MSRS в PR_IF_W_PUSHMEASURE также вроде бы играет роль ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.09.2013, 18:46:06 |
|
||
|
|

start [/forum/topic.php?fid=40&tid=1564272]: |
0ms |
get settings: |
6ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
186ms |
get topic data: |
6ms |
get forum data: |
2ms |
get page messages: |
77ms |
get tp. blocked users: |
1ms |
| others: | 198ms |
| total: | 489ms |

| 0 / 0 |
