Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 статистика в DBCC DBREINDEX  [new]
Andraptor
Member

Откуда: Ukraine, Kharkiv
Сообщений: 291
У меня небольшой вопросик.

Команда DBCC DBREINDEX обновляет статистику или после нее нужно еще UPDATE STATISTIC запускать?

И в догонку...Если в таблице нет кластерного индекса то как избавиться от фрагментации в некластерных, насколько я понимаю что в данном случае команды DBREINDEX и INDEXDEFRAG малоэффективны.

Заранее спасибо!
19 апр 06, 11:26    [2578671]     Ответить | Цитировать Сообщить модератору
 Re: статистика в DBCC DBREINDEX  [new]
Crimean
Member

Откуда:
Сообщений: 13148
use tempdb
go
create table a ( id int constraint ia_id primary key nonclustered , flag int )
go
create statistics sa_flag on a ( flag )
go
insert into a select 1, 1
go
update statistics a
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
waitfor delay '00:00:10'
go
dbcc dbreindex( 'a', '', 0 )
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
drop table a
go
use tempdb
go
create table a ( id int constraint ia_id primary key clustered , flag int )
go
create statistics sa_flag on a ( flag )
go
insert into a select 1, 1
go
update statistics a
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
waitfor delay '00:00:10'
go
dbcc dbreindex( 'a', '', 0 )
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
drop table a
go
use tempdb
go
create table a ( id int constraint ia_id primary key nonclustered , flag int )
go
create statistics sa_flag on a ( flag )
go
insert into a select 1, 1
go
update statistics a
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
waitfor delay '00:00:10'
go
dbcc indexdefrag( 0, 'a', 'ia_id' )
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
drop table a
go
use tempdb
go
create table a ( id int constraint ia_id primary key clustered , flag int )
go
create statistics sa_flag on a ( flag )
go
insert into a select 1, 1
go
update statistics a
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
waitfor delay '00:00:10'
go
dbcc indexdefrag( 0, 'a', 'ia_id' )
go
select indid, stats_date( id, indid ), name from sysindexes where id = object_id( 'a' ) and indid <> 0
go
drop table a
go

сами смотрите
19 апр 06, 11:54    [2578873]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: статистика в DBCC DBREINDEX  [new]
zoytsa
Member

Откуда:
Сообщений: 10
Ребят, аналогичный вопрос - изучение привело к

"DBCC DBREINDEX does update statistics when executed, but it executes sp_updatestats and updates a sample of statistics on table/index.
But to get the best result for performance of query, you can execute update statistics [tablename] with FULL SCAN."

Верно ли понимать, что DBCC DBREINDEX обновляет статистику, но исходя из сэмпла данных, а не из полного сканирования?
Спасибо!!!
24 янв 15, 08:18    [17163480]     Ответить | Цитировать Сообщить модератору
 Re: статистика в DBCC DBREINDEX  [new]
zoytsa
Member

Откуда:
Сообщений: 10
и еще обратное мнение с форума Майкрософт:


>> Is it necessary to again run UPDATE STATISTICS T-SQL after rebuilding the indexes?

Rebuilding an index will update statistics with the equivalent of a full scan – doesn’t matter whether you use DBCC DBREINDEX or ALTER INDEX … REBUILD, the effect is the same. It can do this because it sees a complete picture of the index while its doing the rebuild.(with some exception)

Sometimes for big table even though AUTO_UPDATE_STATISTICS = TRUE we still require to update statistics,as during inset update its does not gets fully updated.

Источник (форум Microsoft): https://social.msdn.microsoft.com/Forums/sqlserver/en-US/c632a13d-afe3-4e82-aae0-2ef8f38096d3/index-rebuild


Подскажите пожалуйста!
24 янв 15, 10:51    [17163621]     Ответить | Цитировать Сообщить модератору
 Re: статистика в DBCC DBREINDEX  [new]
zoytsa
Member

Откуда:
Сообщений: 10
нашел вроде оптимально описанный пример изучения вопроса
http://troubleshootingsql.com/2011/05/13/dbreindex-and-alter-index-differences/
в последнем комментарии детали:
"The last paragraph was intended to point out the difference of how auto-created and user statistics get handled using ALTER INDEX..REBUILD ALL and DBCC DBREINDEX. I am not advocating the use of DBREINDEX as the feature is slated to be removed in future versions as mentioned in BOL. When you have tables with less number of rows, you will not see this behavior as a performance bottleneck. But if the statistics are updated only with a default sampling rate which tends to be a very small percentage for very large tables which might affect queries adversely which are dependant on the user/auto created statistics for cardinality estimation.

Index rebuild commands should never be used as a substitute for Update Statistics commands. My recommendation is ALTER INDEX REBUILD or REORGANIZE based on the threshold value that you deem apporpriate based on observed behavior in your environment and then UPDATE STATISTICS WITH FULLSCAN for user and manually created statistics during atleast one database maintenance cycle or based on the number of changes received by the table. Statistics with default sampling rate can result in sub-optimal plans. I will work on post in the future on this a working sample."
24 янв 15, 11:05    [17163638]     Ответить | Цитировать Сообщить модератору
 Re: статистика в DBCC DBREINDEX  [new]
Владислав Колосов
Member

Откуда:
Сообщений: 7868
zoytsa, зачем Вы уделяете столько внимания устаревшей команде?
24 янв 15, 14:57    [17164049]     Ответить | Цитировать Сообщить модератору
 Re: статистика в DBCC DBREINDEX  [new]
rere1234
Member

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

Да тоже заметил, что на больших таблицах несмотря на ребилд всего индекса в статистике параметр rows_sampled значительно меньше числа всех строк.
24 янв 15, 15:45    [17164163]     Ответить | Цитировать Сообщить модератору
 Re: статистика в DBCC DBREINDEX  [new]
zoytsa
Member

Откуда:
Сообщений: 10
Владислав Колосов
zoytsa, зачем Вы уделяете столько внимания устаревшей команде?


к сожалению, эту комманду использует 1С (как основная для обслуживания индексов команда "Реиндексация таблиц информационной базы")
25 янв 15, 11:38    [17165816]     Ответить | Цитировать Сообщить модератору
 Re: статистика в DBCC DBREINDEX  [new]
правильный проходящий.
Guest
zoytsa
Владислав Колосов
zoytsa, зачем Вы уделяете столько внимания устаревшей команде?


к сожалению, эту комманду использует 1С (как основная для обслуживания индексов команда "Реиндексация таблиц информационной базы")
И что вас заставляет пользоваться именно этой командой и не делать необходимое средствами самого сервера с использованием нужных, новых команд?
25 янв 15, 13:17    [17166075]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить