Перехват и переписывание запросов в SQL Server 2005 - PullRequest
4 голосов
/ 24 июня 2009

У нас есть приложение, построенное на основе SQL Server 2005, которое мы не можем контролировать. Недавно мы обнаружили, что это приложение отправляет некоторые очень неэффективные запросы SELECT в SQL, что вызывает серьезные проблемы с емкостью в базе данных. Я знаю, что правильное решение - взломать код для приложения и изменить запросы, но по причинам, которые я не буду рассматривать, это займет очень много времени. Есть ли какой-нибудь способ, которым мы можем перехватить этот конкретный запрос на сервере SQL и выборочно переписать его во что-то более оптимальное?

Ответы [ 4 ]

2 голосов
/ 24 июня 2009

Вы можете попробовать руководство по плану . Это может позволить вам настроить / оптимизировать запросы без изменения фактического вызова.

Из " Основные сведения о планах "

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

Это также может быть полезно, чтобы запрос действительно работал как хромая собака, так что разработчики приходят и просят вашей помощи ...; -)

2 голосов
/ 24 июня 2009

Вы можете использовать этот подход. Это работает как шарм для меня:)

Вместо того, чтобы пытаться перехватить и изменить вызовы SQL, исходящие из приложение, возможно, вы можете вместо этого реализовать слой абстракции без изменения приложения SQL. Например, если вы можете изменить DSN или строка подключения для входа приложение, а затем рассмотреть следующий. Давайте предположим, что текущий база данных [A]. Создать новую базу данных [B], который содержит представления и функции (но не таблицы) с тем же именем, что и что находится в [A], затем измените их на ссылаться на таблицы в [A]. добавлять любые дополнительные объединения, фильтрация, и т.д. необходимы для реализации вашего (что я предполагаю) на основе строки безопасность. Затем измените приложение DSN будет использовать базу данных [B] вместо [А].

ссылка

1 голос
/ 24 июня 2009

Вы взяли редактор ресурсов / рефлектор для исполняемых файлов? Если вам повезло и операторы SQL статичны, вы можете их изменить.

Без дополнительной информации о приложении сложно определить, возможно ли это. Если SQL генерируется динамически, то это не вариант.

1 голос
/ 24 июня 2009

Это зависит от того, что они делают и каковы запросы. Конечно, если они используют sprocs или UDF, вы можете заменить их без изменения приложения. Вы также можете рассмотреть возможность добавления некоторых индексов, которые «оптимизированы» для плохого SQL (хотя это может повлиять на законных пользователей базы данных). Вы также можете проверить запросы, которые они выполняют, и посмотреть, сможете ли вы заменить таблицы, к которым они обращаются, более эффективным представлением, но тогда вы возитесь с вашим DDL, просто чтобы справиться с плохим яблоком. Лучше всего, вероятно, перенести законные приложения с этого конкретного сервера и оставить нарушителя в покое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...