У меня есть запрос (который дает отчет Oracle Application Express), о котором мне говорили наши пользователи, выполнял «медленно» или с неприемлемой скоростью (ему не было дано фактическое время загрузки для страница и запрос - единственное, что есть на странице).Тонкая настройка запроса оракула с конвейерной функцией
Запрос включает в себя множество таблиц и фактически ссылается на конвейерную функцию, которая идентифицирует зарегистрированных пользователей на нашем сайте и возвращает пользовательскую «таблицу» записей, на которые у них есть разрешение, на основе специальной схемы безопасности, которую мы имеем.
Мой главный вопрос касается кэширования запросов Oracle и того, как они могут быть затронуты нашей установкой.
Когда я взял запрос с веб-страницы и запустил его в Sql Developer (и вручную указал идентификатор пользователя, чтобы имитировать зарегистрированного пользователя на веб-сайте), производительность от 71 секунды до 19 секунд до 0,5 секунд. Очевидно, что Oracle использует свой механизм кэширования для ускорения последующих запусков.
Как это влияет ?:
- Тот факт, что разные пользователи будут получать различные таблицы из функции трубы подкладке (все те же столбцы, только разное количество строк и значений в строки). Подвергается ли облицовке труб кеширование от работы? Я вижу только кэширование, потому что я запускаю очень изолированный тест?
- Далее - кеширование легко зависит от количества людей, использующих систему? Я не уверен, как «много» может получить кеширование. Поэтому, если у нас есть 50 одновременных пользователей, которые обращаются к различным частям веб-сайта, которые загружают разные запросы в течение всего дня, возможно ли, что оракул не сможет кэшировать многие/любые из них, потому что он постоянно видит другой запрос для запросы?
Извините, мой вопрос не очень технический.
Я разработчик, которого попросили помочь в этом, казалось бы, вопросе DBA.
Кроме того, это сложно, потому что я не могу определить, что такое фактическое время загрузки, поскольку наши пользователи не сообщают об этом уровне детализации.
Любые мысли о:
- как я могу определить, является ли этот запрос на самом деле медленно?
- Какое среднее время обработки будет?
- и как продолжить тонкую настройку, если это проблема?
Спасибо!
благодарит за детальную разбивку! из того, что вы объяснили, я согласен, что это, скорее всего, кеширование данных. ваш третий абзац описывает, что я, скорее всего, вижу. один и тот же запрос выполнялся много раз с разными значениями связывания, которые были заменены каждый раз. каждый запуск конвейерной функции «ударяет» по тем же таблицам, но просто возвращает меньшую или большую часть данных, основанную на том, кто вы. поэтому, с учетом сказанного, вы могли бы порекомендовать, как я могу продолжить расследование, как это решить? изучать планы обучения? я просто хочу, чтобы мои пользователи не испытывали 70 секунд, как я делал! – user3249281
@ user3249281 - Трудно сделать действительно общие рекомендации по настройке производительности, которые особенно полезны - есть много «это зависит». Шаг первый - выяснить, что потребляет время (или, если мы считаем, что большая часть времени тратится на ввод-вывод, что вызывает большинство логических операций ввода-вывода). Посмотрите на план запроса, и статистика выполнения, скорее всего, поможет здесь. Вы также можете отслеживать сеанс, но план запросов, вероятно, является более простой отправной точкой. –