|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Добрый день! Есть приложение написанное на Java 7, которое использует через JDBC (Jaybird 2.2) Firebird 2.5 в качестве БД в режиме Embedded Server. Приложение выполняет разбор и анализ реестров на основе классификаторов. Эти классификаторы имеют объем порядка 25 млн записей. Приложение при запуске проверяет наличие данных в классификаторах и если они отсутствуют, то перед началом разбора реестров происходит загрузка классификаторов с фиксацией через каждые 3000 записей. Есть контрольный реестр для разбора и анализа с использованием этих классификаторов. Проблема в том, что если разбор и анализ реестра производился в рамках той же JVM (загрузка классификаторов в отдельном коннекте/ах к БД не изменяют картины), в которой происходила загрузка классификаторов, то при анализе реестров скорость работы запросов к БД к таблицам, хранящим данные классификаторов, снижается в несколько ДЕСЯТКОВ раз по сравнению со случаем, когда загрузка классификаторов производилась заранее (например при предыдущем запуске приложения). Может у кого-нибудь есть мысли из-за чего может возникать такое падение производительности? ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 13:10 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
pals, для начала Embedded Server работает в не сколько раз медленнее обычного. Во-вторых режим Embedded не родной для Java ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 13:21 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
palsМожет у кого-нибудь есть мысли из-за чего может возникать такое падение производительности?Если действительно для нормаьлной производительности требуется рестарт приложения, то - Firebird вряд ли тут "виноват" - возможно проблемы (с памятью ?) у JVM после анализа реестров ? Для того, чтобы окончательно исключить Firebird (или подтвердить его "вину") я бы снял трейс запросов (с планами и счётчиками производительности) в обоих вариантах. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 13:52 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Симонов Денисpals, для начала Embedded Server работает в не сколько раз медленнее обычного. Во-вторых режим Embedded не родной для JavaОба утверждения весьма спорны, на грани глупости. Не ожидал от тебя... ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 13:53 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
pals, Вдогонку: первое что сразу приходит в голову - отсутствие статистики у индексов после загрузки классификаторов и кривые планы последующих запросов. Но, если действительно рестарт приложения после загрузки решает проблему, то планы тут не при чём. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 13:57 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
palsМожет у кого-нибудь есть мысли из-за чего может возникать такое падение производительности? Это Ява. Следовательно - сборка мусора. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 14:14 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
hvlad, первый мой вывод основан вот на этом http://www.sql.ru/forum/697278-1/fetch-v-embedded-v-razy-medlenney-chem-v-ss Может оно уже и не так. Про второе я возможно загнул. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 14:14 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Симонов Дениспервый мой вывод основан вот на этом http://www.sql.ru/forum/697278-1/fetch-v-embedded-v-razy-medlenney-chem-v-ss С чего ты взял, что у автора проблемы с фетчем ? Зачем делать такие обобщения, да ещё и со 100% уверенностью ? Тут уже есть один такой "обобщатель", не уподобляйся, плс Симонов ДенисПро второе я возможно загнул.Второе - вообще ни о чём ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 14:25 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Симонов Дениспервый мой вывод основан вот на этом http://www.sql.ru/forum/697278-1/fetch-v-embedded-v-razy-medlenney-chem-v-ss Кстати, там тоже не всё прямолинейно, смотри реальные результаты вот тут 7822271 и дальше. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 14:40 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
hvlad, собственно, влезу. У Java или .Net (пока не очень понятно, может и у обоих) есть такая фигня, что оно оставляет препарированные запросы незакрытыми, в результате чего может накопиться под сотню тысяч запросов (с нулевыми транзакциями) в mon$statements при 5-7 активных коннектах. Полагаю, что если для мощного сервера это не так напряжно, то для embedded это будет кабздец, как и для mon$ даже на крутом сервере - там снимок с mon$ делается десять минут . Рекомендую обратить внимание на эту хрень всем, кто использует коннекты из java и .net. Если начнете в этом случае обращаться к mon$ - вам (вашей системе) капец. Что 2.5, что 3.0 - пофиг, эффект один и тот же. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 22:36 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Это от кода зависит, а не от .Net. Если правильно писать - ничего не копится и запросы не остаются незакрытыми. Ну а если руки оттуда растут - то и Delphi с С++ не спасут. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
23.12.2017, 22:56 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
hvladЕсли действительно для нормальной производительности требуется рестарт приложения, то - возможно проблемы (с памятью ?) у JVM после анализа реестров ? Мониторинг и анализ Heap Space не показывают рост использования памяти или большого количества каких-то не базовых java-классов. Загрузка классификатора (25 млн строк) идет около 45 минут и если бы была утечка памяти (или незакрытые препарированные запросы), то мы скорее всего смогли бы зафиксировать это. Есть еще один момент о котором я не упомянул в своем первом посте. В момент загрузки классификаторов мы удаляем индексы и после окончания загрузки их заново создаем. Но при повторном запуске приложение анализирует наличие данных в классификаторе и повторно не загружает данные и соответственно не пересоздает индексы. Может у FB (или JDBC-драйвера) переполняются какие-то внутренние структуры, что мешает после только что выполненного создания индекса их правильно использовать (наличие статистики или еще что-то)? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 11:44 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
И еще один уточняющий момент hvladСимонов Дениспервый мой вывод основан вот на этом http://www.sql.ru/forum/697278-1/fetch-v-embedded-v-razy-medlenney-chem-v-ss С чего ты взял, что у автора проблемы с фетчем ? Проблем с fetch на мой взгляд быть не должно потому, что ResultSet почти у всех запросов составляет не более 2-3 записей. И основная задержка именно при выполнении запроса (excecuteQuery), а не при fetch ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 12:06 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
pals, вытащи SQL запрос и выполни его отдельно в IBE или isql. Посмотри время выполнения. Проанализируй план запроса, возможно не хватает индексов. Есть ли BLOB поля? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 12:07 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovpalsМожет у кого-нибудь есть мысли из-за чего может возникать такое падение производительности? Это Ява. Следовательно - сборка мусора. А что именно в сборке мусора может быть не так? На что вы предлагаете обратить внмание? Профилирование JVM не показывает ни утечек памяти ни увеличения времени запуска GC ни учащения запуска GC. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 12:08 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
palsА что именно в сборке мусора может быть не так? Она просто не может не запуститься после того, как по памяти прогонят 25 миллионов объектов. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:15 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovОна просто не может не запуститься после того, как по памяти прогонят 25 миллионов объектов.И? Типа, солнечно-пророческие идиоты вообще не в курсе, что сборка мусора - важная часть JVM? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:18 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Basil A. SidorovТипа, солнечно-пророческие идиоты вообще не в курсе, что сборка мусора - важная часть JVM? По моим наблюдениям за Ява- и дотнет-программистами - это среди них весьма распространённое явление. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:20 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
дык, Джеймс Гослинг (James Gosling) ушел из-под Оракула. к чему это приведёт, можем посмотреть на примере Андерса Хейлсберга. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:27 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovПо моим наблюдениям за Ява- и дотнет-программистами - это среди них весьма распространённое явление.Хорошо, я переведу. "Есть приложение (Java7, JDBC) и embedded FB2.5. Если сделать первичную загрузку и начать делать инкрементальные - медленно. Если сделать первичную загрузку, завершить приложение, затем снова запустить для инкрементальных загрузок - нормально." Пипец как много информации, но вместо того, чтобы отфутболить на "планы и мониторинг в FB" и на "профилирование JVM" - начинаются общечеловеческие рассуждения о сборке мусора, незакрытых курсорах и т.п. тряхомудии. Я бы даже понял простое "воспроизведи с отдельным FB-сервером, а потом думай дальше". ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:30 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Василий, я у же говорил что ты зануда? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:35 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovpalsА что именно в сборке мусора может быть не так? Она просто не может не запуститься после того, как по памяти прогонят 25 миллионов объектов. Конечно GC запускается за время загрузки. Размер кучи установлен достаточно большой (1ГБ). Точное количество запусков Eden GC и Full GC я могу привести тоже, но не думаю, что это поможет в поиске проблемы. Мне кажется, что проблема либо на стороне FB, либо на стороне JDBC-драйвера. Как я уже говорил после загрузки данных мы заново создаем индексы (ранее удаленные перед началом загрузки). Возможно FB не успевает собрать статистику или заполнить какие-то свои внутренние структуры для полноценного использования индексов, а может есть какие-то особенности работы FB с индексами в режиме Embedded Server? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:36 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
МимопроходящийВасилий, я у же говорил что ты зануда?И? Это как нивелирует обоснованность моих претензий? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:38 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
palsМне кажется, что проблема либо на стороне FB, либо на стороне JDBC-драйвера. И вот тут-то Вам пригодится совет Сидорова "воспроизведи с отдельным FB-сервером, а потом думай дальше". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:41 |
|
Низкая скорость выполнения запросов после загрузки значительного объема данных
|
|||
---|---|---|---|
#18+
palsособенности работы FB с индексами в режиме Embedded Server? нет никаких особенностей. Единственное, что embedded скорее всего в режиме classic (super classic), следовательно страничный кеш не очень большой, но файловый кеш должен по идее компенсировать этот недостаток в какой-то мере ... |
|||
:
Нравится:
Не нравится:
|
|||
25.12.2017, 13:43 |
|
|
start [/forum/topic.php?fid=40&fpage=38&tid=1561292]: |
0ms |
get settings: |
7ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
67ms |
get tp. blocked users: |
1ms |
others: | 309ms |
total: | 455ms |
0 / 0 |