Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Имя таблицы и быстродействие  [new]
rpv
Member

Откуда:
Сообщений: 102
Привет всем. Читаю книгу SQL Server 2005. Библия пользователя. Встретил такой пункт:
"Использование четырехкомпонентного имени (таблицы в запросе) позволяет многократно использовать план выполнения запроса. Указание имени владельца - это не только хорошая програмистская практика, но и способ повышения быстродействия запросов."

Знатоки, прокомментируйте пожалуйста. То есть если я буду в запросах писать dbo.table, то это добавит быстродействия?
27 авг 09, 07:38    [7584631]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Knyazev Alexey
Member

Откуда: Екб -> Мск
Сообщений: 10234
Блог
само собой- не нужно прыгать по схемам в поисках объекта,
даёт возможность определять его однозначно
27 авг 09, 07:39    [7584634]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
При наличии "неквалифицированноно" имени объекта в запросе оптимизатор не использует закешированный план запроса, а по новой начинает его строить, соответственно, начиная построения с поиска объекта во всех доступных схемах.

Сообщение было отредактировано: 27 авг 09, 07:59
27 авг 09, 07:59    [7584655]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Кто автор книги?

Мне кажется это хрень. При построении плана запроса определить из какой схемы таблица - это капля в море(c учетом, что у тебя всего одна схема). А читабельность кода сильно падает, если писать в запросе dbo.
автор
позволяет многократно использовать план выполнения запроса
Это я вообще не понял. Где? Когда? Делаешь препэйр и используй многокртано.
27 авг 09, 08:01    [7584659]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
tpg
При наличии "неквалифицированноно" имени объекта в запросе оптимизатор не использует закешированный план запроса, а по новой начинает его строить, соответственно, начиная построения с поиска объекта во всех доступных схемах.

Т.е. если другой пользователь делает такой же точно запрос(с теми же параметрами), то ему выдают по закешированному плану? И не важно, насколько изменились данные?
27 авг 09, 08:04    [7584662]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deff
Кто автор книги?

Мне кажется это хрень. При построении плана запроса определить из какой схемы таблица - это капля в море(c учетом, что у тебя всего одна схема). А читабельность кода сильно падает, если писать в запросе dbo.

Разумеется определение имени - это капля в море для единичного запроса, работающего полчаса
А для процедуры, которая выполняется пару секунд, но блокирует других из-за перекомиляции плана по причине поиска точного имени объекта еще на пару секунд, это очень существенно
27 авг 09, 10:43    [7585252]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Crimean
Member

Откуда:
Сообщений: 13148
чот я также разницы не смог найти в том числе и на интенсивно вызываемых хранимках
27 авг 09, 10:48    [7585293]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
aklerk
Member

Откуда:
Сообщений: 66
Deff,

Deff
Мне кажется это хрень

Не совсем так. Слазить и найти схему - это целая операция, неважно, одна схема или 10. На её выполнение тратиться время (более того, для этого скорее всего будет считана целая страница данных). Если запрос "быстрый" и выполняется с большой частотой, можно ощутить снижение производительности на пару процентов (только не говорите, что это мало, и стоит закрыть на это глаза. хотя всё зависит от системы, которую Вы строите).
Кстати, стоит отметить, многие мои коллеги, которые до сих пор "не отойдут" от SQL 2000, не принимают полных имён. Грустно. На дворе 2009 год...
27 авг 09, 10:50    [7585310]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Crimean
Member

Откуда:
Сообщений: 13148
накидал тестик
2 одинаковые хранимки, в них по 1 обращению к таблице
в одной - обращение по "полному имени", во второй - без схемы, только имя таблицы
в тесте хранимка вызывается N раз и считаем общее время работы
для 10 000 вызовов 480 ms vs 483 ms, при этом время прыгает. я бы сказал, что разницы нет
но вот если делаем "exec dbo.p1" vs "exec p1" то 480 vs 766 невзирая на содержимое хранимки!
так что при вызове хранимок - однозначно указывать схему (но это было понятно после появления UDF), а при работе с таблицами разницы пока не выявлено
27 авг 09, 11:03    [7585403]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Glory, aklerk
я как раз имел ввиду что это даже капля в море, по отношению к постраению плана запроса.
Т.е. надо считать одну страницу, что бы понять что единственная доступная схеме это dbo.
Но даже если в запросе указать схему, то все равно надо считать одну страницу, что бы убедиться что у пользователя есть доступ к этой схеме. Так что далеко не факт.

А если в запросе 6-10 таблиц, то львиную долю в построение плана уйдет как раз на перебор огромного варианта планов и выбор оптимального(кажется на 10 таблицах он уже может не успеть перебрать все варианты. Я что-то такое давно читал).

Я поэтому и хотел имя автора, что бы узнать насколько он авторитетен. Может действительно стоит прислушаться.
27 авг 09, 11:11    [7585444]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Deff
Т.е. надо считать одну страницу, что бы понять что единственная доступная схеме это dbo.


Сервер понимает по другому. Если у объекта нет имени схемы, то сервер ищет сначала объект в схеме пользователя, и если такого не находит, то только потом ищет объект в схеме dbo. Время, хоть и малое, но на такие манипуляции необходимо.
27 авг 09, 11:16    [7585469]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Crimean
Member

Откуда:
Сообщений: 13148
P.S.
сделал запрос из 10 таблиц
в одном случае - с указанием схемы, во втором - без
разницы не увидел
время выполнения 1110 / 1120 ms для 10 000 вызовов
27 авг 09, 11:16    [7585479]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Crimean
накидал тестик
2 одинаковые хранимки, в них по 1 обращению к таблице
в одной - обращение по "полному имени", во второй - без схемы, только имя таблицы
в тесте хранимка вызывается N раз и считаем общее время работы
для 10 000 вызовов 480 ms vs 483 ms, при этом время прыгает. я бы сказал, что разницы нет
но вот если делаем "exec dbo.p1" vs "exec p1" то 480 vs 766 невзирая на содержимое хранимки!
так что при вызове хранимок - однозначно указывать схему (но это было понятно после появления UDF), а при работе с таблицами разницы пока не выявлено

Что-то мне подсказывает, что хранимки делають прекомпайл. Надо сделать тест к таблицам без хранимок.
27 авг 09, 11:17    [7585483]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Glory
Member

Откуда:
Сообщений: 104760
Deff
Glory, aklerk
я как раз имел ввиду что это даже капля в море, по отношению к постраению плана запроса.

Вы сталкивались с проблемой перекопиляции процедур по причине как раз вымисления имен объектов ? Вопрос не о том, сколько времени это займет для текущего коннекта. Вопрос в том, что это блокирует и другие коннекты
27 авг 09, 11:17    [7585486]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Crimean
Member

Откуда:
Сообщений: 13148
2 Deff

точно! для "выражения" из 10 таблиц разница 880 vs 2780 с и без указанием схемы
при использовании хранимок достаточно указать полное имя хранимки, внутри можно не использовать схемы
27 авг 09, 11:19    [7585506]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Crimean
но вот если делаем "exec dbo.p1" vs "exec p1" то 480 vs 766 невзирая на содержимое хранимки!
так что при вызове хранимок - однозначно указывать схему (но это было понятно после появления UDF), а при работе с таблицами разницы пока не выявлено


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

It is best to owner qualify stored procedure names when you execute a procedure. This allows for better clarity and easier reuse of the existing execution plan by the current user.
...
This technique eliminates confusion about other possible versions of the procedure by different owners from a coding and maintenance standpoint, and also allows SQL Server to access the execution plan for the specific procedure more directly.
27 авг 09, 11:19    [7585508]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Deff
Member

Откуда: Пермь
Сообщений: 18323
Подытожу:
declare @I int
set @I =1 
while @i<1000000 begin
If exists(select * from [dbo.]table1) set @I=@I+1
end
Запустил с dbo и без dbo. Одинаково! Подумал. Вспомнил что для sa, основная схема dbo.

Залогинелся под простым смертным. Разница по скорости примерно в два раза!
Так что факт признан. Не забываем писать dbo:)
27 авг 09, 11:43    [7585642]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
x-x
Member

Откуда:
Сообщений: 230
Crimean

По-моему, Ваши тесты не совсем корректны. Надо бы прогнать несколько Ad-hoc запросов от разных виндовых пользователей (если аутентификация по виндовс), а потом процедурки погонять, также от разных пользоватлей.
И если по хранимкам, скорее всего, ризницы действительно не будет при её вызове от разных пользователей, то на запросах вне хранимок разница должна быть заметна.
Я кончено извиняюсь, что предлагаю Вам поработать, а не сам эти тесты пишу, но было бы очень интересно посмотреть результаты. :)
27 авг 09, 11:47    [7585665]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
Crimean
Member

Откуда:
Сообщений: 13148
те же 2 хранимки, 100 вызовов с WITH RECOMPILE - разницы во времени нет
резюме - в ad-hoc запросах схему указывать 100% - разница более чем существенна
внутри хранимок (функций, представлений, триггеров) схему можно не указывать
27 авг 09, 11:49    [7585676]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
tpg
Member

Откуда: Novosibirsk
Сообщений: 23902
Deff
А читабельность кода сильно падает, если писать в запросе dbo.
Таким утверждениям надо делать приписку "ИМХО".
Кому падает, а кому падает без схемы... У меня аж рвотная реакция появляется при просмотре такого кода...
27 авг 09, 11:51    [7585690]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
x-x
Member

Откуда:
Сообщений: 230
rpv
Привет всем. Читаю книгу SQL Server 2005. Библия пользователя.

Если Вы про толстую книжку Нильсена от Wiley (или какое-то созвучное издательство) с кучей авторов, то лично я советую Вам поискать другой источник знаний. Аргументировать долго, но лично мне эта книга не понравилась.
Я бы рекомендовал англоязычные книжки Дилани, Бен-Гана. На русском Хендерсона с большим интересом читал - там очень много полезного и большая часть вполне актуальна.
27 авг 09, 11:51    [7585692]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
rpv
Member

Откуда:
Сообщений: 102
Да, автор - Пол Нильсен. Можно услышать, что в книге не понравилось и почему не рекомендуете? Прочитал четверть книги, вроде написано внятно. Вон даже какое обсуждение вызвала цитата из книги!
27 авг 09, 12:00    [7585729]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
rpv
Да, автор - Пол Нильсен. Можно услышать, что в книге не понравилось и почему не рекомендуете? Прочитал четверть книги, вроде написано внятно. Вон даже какое обсуждение вызвала цитата из книги!


На счет 4х компонентного имени автор таки загнул. Ибо, если не указано иного, объект всегда ищется на локальном сервере в текущей бд. Если необходимы объекты другой бд или другого сервера, то без 3х\4х компонентного имени не обойтись. Но это не относится к проблеме, которая обсуждалась здесь с повторным использованием плана выполнения.
27 авг 09, 12:03    [7585754]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
rpv
Member

Откуда:
Сообщений: 102
pkarklin
rpv
Да, автор - Пол Нильсен. Можно услышать, что в книге не понравилось и почему не рекомендуете? Прочитал четверть книги, вроде написано внятно. Вон даже какое обсуждение вызвала цитата из книги!


На счет 4х компонентного имени автор таки загнул. Ибо, если не указано иного, объект всегда ищется на локальном сервере в текущей бд. Если необходимы объекты другой бд или другого сервера, то без 3х\4х компонентного имени не обойтись. Но это не относится к проблеме, которая обсуждалась здесь с повторным использованием плана выполнения.

Ну автор дальше и пишет: "Теперь, когда вы ознакомились с четырехкомпонентной формой имен объектов базы данных, во всех примерах книги в именах в явном виде будет указываться владелец."
27 авг 09, 12:18    [7585854]     Ответить | Цитировать Сообщить модератору
 Re: Имя таблицы и быстродействие  [new]
x-x
Member

Откуда:
Сообщений: 230
rpv
Да, автор - Пол Нильсен. Можно услышать, что в книге не понравилось и почему не рекомендуете? Прочитал четверть книги, вроде написано внятно. Вон даже какое обсуждение вызвала цитата из книги!

Долго это писать. Пример - тема ветки.
Утверждения без объяснения их сути могут приводить к заблуждениям ибо читатель начинает додумывать самостоятельно.
Как, например с этим четырёхкомпонентным именем. Без обсуждения в этой ветке вы бы или не поняли бы утверждения или поняли бы его самостоятельно, не факт, что правильно.

Лично мне понравилась книга Браст/Форте Разработка приложений на основе MSSQLServer2005. Это по разработке. По администрированию есть пара книг, искать неохота. BHV выпустило книгу Ицика Бен Гана на русском - "MSSQL2008 Основы T-SQL". Прочтите - хоть и есть маленькие огрехи перевода Вы почувствуете разницу в авторах. Практически ничего лишнего.

А Ваша книга стоит много, а толку в ней мало. Как инструкция к фотоаппарату - пользоваться можно, а фотографом не станешь. Нажмите сюда, включите тут. А что такое экспозиция, светосила и диафрагма где нибудь ещё прочитаете.
27 авг 09, 15:50    [7587216]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить