powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Долгое выполнение хранимых процедур
6 сообщений из 131, страница 6 из 6
Долгое выполнение хранимых процедур
    #39740759
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно помню, кто-то где-то рассказывал, что при Unknown предполагается равномерное распределение данных по страницам при том, что объем полезной информации занимает 30%.
...
Рейтинг: 0 / 0
Долгое выполнение хранимых процедур
    #39740760
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKMindпропущено...
Заглулил, молодец! То есть настолько не уверен в своих знаниях или умениях объяснять что пришлось гуглить? И то что я сказал абсолютно тоже самое но своими словами тоже сложно было понять?
где там про "средние"Ты понимаешь хоть то что там написано или просто скопировал? У тебя в статистических данных 200 строк со значениями, как ты будешь их использовать? Все сразу?
Вот у тебя известно что в таблице есть:
1 значение 100
5 значений 200
20 значений 300
WHERE id = @id OPTIMIZE FOR UNKNOWN сколько строк вернет согласно оценке оптимизатора?
...
Рейтинг: 0 / 0
Долгое выполнение хранимых процедур
    #39740763
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MindTaPaKпропущено...

где там про "средние"Ты понимаешь хоть то что там написано или просто скопировал? У тебя в статистических данных 200 строк со значениями, как ты будешь их использовать? Все сразу?
Вот у тебя известно что в таблице есть:
1 значение 100
5 значений 200
20 значений 300
WHERE id = @id OPTIMIZE FOR UNKNOWN сколько строк вернет согласно оценке оптимизатора?
согласно этому хинту актуальный план будет всегда учитывать значение статистики по переданным переменным, а на столбить ваши 20 строк или сколько вы там себе нафаназировали.
Recompile же будет принудительно перекомпилировать запрос с проброшенным значением.
...
Рейтинг: 0 / 0
Долгое выполнение хранимых процедур
    #39741243
PizzaPizza
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
gepard1980PizzaPizza, возвращаются 9 числовых полей без блобов. Думаю это не сильно влияет на перфоманс. Есть таблица с 70 полями. Вот из нее уже select * накладно делать.

Тривиальный план + 100% загружающий io + ошибки Table errorы = делайте чекдиск и разбирайтесь с дисками, надеюсь с бекапами у вас все хорошо
...
Рейтинг: 0 / 0
Долгое выполнение хранимых процедур
    #39741330
Фотография Mind
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наконец то. А столько пафоса было: "как разберешься - приходи". А в чем разница между "по переданным переменным" и "с проброшенным значением"?
TaPaKсогласно этому хинту актуальный план будет всегда учитывать значение статистики по переданным переменным , а на столбить ваши 20 строк или сколько вы там себе нафаназировали.
Recompile же будет принудительно перекомпилировать запрос с проброшенным значением.Так все таки, переданные переменные будут учитываться или нет? Потому что в твоей цитате из документации сказано прямо противоположное:
TaPaKInstructs the query optimizer to use statistical data instead of the initial values for all local variablesВообще конечно тот кто писал документацию мягко говоря очень далек от SQL Server-а, потому что написал он полную чушь.

Во-первых, о каких local variables идет речь если учитывать что для локальных переменных никакого parameter sniffing нет и быть не может, сервер по-дефолту не знает значения локальных переменных и это опция оптимизатора вообще тут не имеет никакого эффекта.
Во-вторых "use statistical data" - то есть если не указать FOR UNKNOWN то оптимизатор не будет использовать "statistical data"? Что за бред вообще.
Мне потому и смешно что ты процитировал это запутанное и по сути безсмысленное определение и не смог даже нормально перевести его.

OPTIMIZE FOR UNKNOWN - или по сути оптимизация под неизвестное значение так и называется, потому что не важно видит оптимизатор значения параметров/переменных или нет, все равно мы ему говорим оптимизируй запрос так как будто для тебя эти значения неизвестны (UNKNOWN). Ну или еще более упрощенно - оптимизируй запрос так как если бы все параметры были переменными, для которых как мы знаем "просмотр значений" не работает по умолчанию. Именно поэтому, до существования такой опции можно было переназначить параметры локальным переменным и использовать уже их в запросе, и это приводило по сути к тому же эффекту.


Ну а теперь самое интересное, вопрос на который ты не смог ответить, о том как сервер использует статистику для оценочного определения количества строк. Неужели даже интересно не было? Тест накидать за 2 минуты и самому проверить? Для саморазвития так сказать? Нет, зачем же. Гениям это не надо.

Скрипт
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
SET NOCOUNT ON
CREATE TABLE dbo.T(id int)
INSERT T(id) VALUES(100)
GO 1
INSERT T(id) VALUES(200)
GO 5
INSERT T(id) VALUES(300)
GO 20

SET SHOWPLAN_ALL ON
GO
DECLARE @id int = 100
SELECT * FROM dbo.T WHERE id = @id OPTION(OPTIMIZE FOR UNKNOWN)
GO
SET SHOWPLAN_ALL OFF
GO
DROP TABLE T


Результат:
StmtText EstimateRowsDECLARE @id int = 100 NULLSELECT * FROM dbo.T WHERE id = @id OPTION(OPTIMIZE FOR UNKNOWN) 8.666667 |--Table Scan(OBJECT:([master].[dbo].[T]) WHERE:([master].[dbo].[T].[id]=[@id])) 8.666667
Откуда же берутся эти 8.67? Из статистики:

RANGE_HI_KEY RANGE_ROWS EQ_ROWS DISTINCT_RANGE_ROWS AVG_RANGE_ROWS100 0 1 0 1200 0 5 0 1300 0 20 0 1
(1+5+20)/3=8.66667
TaPaKгде там про "средние"Это называется среднее арифметическое. Урок «Среднее арифметическое чисел», 5 класс


P.S. Не забудь запатентовать что опция OPTIMIZE FOR UNKNOWN ускоряет работу дисков в 5 раз.
...
Рейтинг: 0 / 0
Долгое выполнение хранимых процедур
    #39741363
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
invmЛог транзакций не может расти, тем более постоянно, если в базу ничего не пишется. Вам об этом уже писали..

delete?
...
Рейтинг: 0 / 0
6 сообщений из 131, страница 6 из 6
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Долгое выполнение хранимых процедур
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]