С помощью ojdbc6 getMetadata() при увеличении количества выполняемых sql в результирующем наборе, не вижу этого с помощью ojdbc5

#oracle #jdbc #metadata

#Oracle #jdbc #метаданные

Вопрос:

мы используем getMetadata() для каждого курсора, возвращаемого из вызова хранимой процедуры oracle.

С ojdbc5 у нас нет скачка количества выполняемых sql метаданных и среднего времени. Но с помощью ojdbc6 мы видим увеличение количества выполняемых sql метаданных и увеличение среднего времени выполнения sql.

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

кто-нибудь хотя бы когда-нибудь пробовал декомпилировать файл ojdbc6 jar?

Комментарии:

1. Можете ли вы сказать, что он делает, запрашивая V $ SQL?

2. мы декомпилировали его и обнаружили, что для каждого вызова процедуры getMetadata выполняет два sql-выполнения (одно для meta, связанного с proc, а другое для параметров proc)… у нас даже есть файлы трассировки, и похоже, что это смертельная комбинация универсального программирования dao, использующего метаданные … убийцей здесь является Spring Ojdbc … да, я знаю, что все используют spring, но никто этого не заметил. Существует ли универсальная программа dao, которая не использует метаданные.

Ответ №1:

проблема заключается в том, как работает SimpleJdbcCall из Spring, он получает метаданные процедуры и ее аргументы для каждого вызова. даже если они не должны кэшировать это, должен был быть параметр, который включает и отключает кэширование метаданных при использовании SimpleJdbcCall.

При использовании SimpleJdbcCall… остерегайтесь конфликта метаданных, который происходит.. если в вашем приложении слишком много вызовов процедур pl / sql, то oracle может столкнуться с конфликтом защелки, и, следовательно, общее приложение замедлится, поскольку это создает узкое место … серверы даже выходят из строя, делая приложение невосприимчивым. добавьте небольшой кэш, погрузившись в код spring, и установите флаг для включения / отключения … tadaanngggg.. это работает потрясающе быстрее, чем когда-либо.