У меня установлены две разные схемы на одном сервере Oracle (v12c).
В каждой из этих двух схем у меня есть одна и та же DB LINK, которая указывает на удаленную базу данных, которая позволяет мне читать таблицу (размер ± 12 000 строк, несколько основных столбцов (без больших двоичных объектов)).
Когда я выполняю/компилирую в TOAD SELECT * from TABLE@DBLINK
в первой схеме: 140 мс.
Когда я выполняю/компилирую в TOAD SELECT * from TABLE@DBLINK
во второй схеме: 900 мс.
Я быстро сравнил две схемы, и они кажутся идентичными (те же табличные пространства, те же права доступа и т. д.).
Чем можно объяснить такую медлительность?
Должен ли я подробно сравнивать различия между этими схемами с помощью инструмента, если это имеет смысл?
Схема плана выполнения 1
Схема плана выполнения 2
@AlexPoole, я добавил планы выполнения, и они разные. Я не знаю, почему. Извините, я не администратор базы данных. Есть ли простой способ проверить/сбросить статистику?
Судя по всему, ваша «таблица» — это не таблица, а представление, которое объединяет несколько таблиц в удаленной базе данных. И вы не просто запрашиваете таблицу саму по себе, а присоединяете ее к локальной таблице (COUNTRY
). Эти различия имеют значение.
В одном случае Oracle объединяет представление и использует локальную базу данных в качестве управляющего сайта, требуя от него собрать все части вместе локально и выполнить соединения там. В другом сценарии представление не объединяется и не выполняется полностью на удаленном компьютере.
Попробуйте добавить эти подсказки (сопоставьте псевдоним с псевдонимом таблицы, которую вы хотите добавить):
SELECT /*+ driving_site(x) no_merge(x) */ * from VIEW@DBLINK x
Что касается того, почему в одной схеме она отличается от другой: существует множество потенциальных факторов, которые могут ее изменить. Локальная таблица COUNTRY
может иметь другой размер в одной схеме, чем в другой, или иметь другую статистику, или отсутствовать статистика в одной. Ваши ссылки могут указывать на две разные базы данных, даже если имена ссылок одинаковы; они могут использовать две разные учетные записи подключения, которые могут разрешать разные объекты на удаленном компьютере. и т. д. Достаточно знать, что малейшие различия могут привести к существенно различным планам; Такая изменчивость плана довольно распространена.
Я понимаю, но определение представлений идентично в обеих схемах. Почему один объединяет страну, а другой нет?
@ b126, смотри мой последний абзац. Это очень типично для Oracle. Вы не можете ожидать одного и того же плана каждый раз и в любой ситуации. Слишком много переменных влияют на работу оптимизатора.
спасибо за точные объяснения! Тем временем я заметил ошибку в одном из двух представлений: я использовал два DBLINKS, указывающие на одну и ту же цель, но с разными именами. Переименовав неисправный DBLINK в представлении, все вернулось в норму. Но я думаю, это доказывает, что вы правы: Oracle может выбрать то или иное решение.
Посмотрите планы выполнения для обеих схем, чтобы увидеть, что оптимизатор решает делать по-другому. (Я думаю, у Toad может быть свой собственный инструмент для сбора и отображения статистики?) Может быть, начать с проверки актуальности статистики в обеих схемах - я предполагаю, что вы клонировали одну схему, чтобы создать другую, и статистика устарела.